У меня проблемы с настройкой kubernetes ingress-nginx для внешнего доступа к моему приложению. Вот шаги, которые я сделал:
Развертывание приложения:
- Созданное пространство имен под названием ingress
- Развернутый ресурс набора statefulset, который описывает мое приложение (назовем его testapp) во входном пространстве имен
- Создана служба ClusterIP, которая делает мое приложение доступным в кластере kube (testapp) во входном пространстве имен.
Настройка Ingress nginx:
- Создан контроллер ingress-nginx в пространстве имен ingress
- Создан сервис ingress-nginx в пространстве имен ingress
ingress-nginx NodePort 10.102.152.58 <none> 80:30692/TCP,443:32297/TCP 6d2h
- Создан тип входящего ресурса в пространстве имен входящего трафика, который выглядит следующим образом
apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: / name: testappingress spec: rules: - host: testapp.k8s.myorg.io http: paths: - backend: serviceName: testapp servicePort: 80 path: /
Если я описываю входящий ресурс, я получаю следующее:
ubuntu@ip-10-0-20-81:~/ingress$ kubectl describe ingress testappingress -n ingress
Name: testappingress
Namespace: ingress
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
testapp.k8s.myorg.io
/ testapp:80 (<none>)
Annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CREATE 15m nginx-ingress-controller Ingress ingress/testappingress
Normal CREATE 15m nginx-ingress-controller Ingress ingress/testappingress
Normal UPDATE 14m nginx-ingress-controller Ingress ingress/testappingress
Normal UPDATE 14m nginx-ingress-controller Ingress ingress/testappingress
Если я проверю журналы с контроллера ingress-nginx, я получаю следующее:
I0317 15:06:00.029706 6 event.go:221] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"ingress", Name:"testappingress", UID:"2c8db73f-48c6-11e9-ae46-12bdb9ac3010", APIVersion:"extensions/v1beta1", ResourceVersion:"1185441", FieldPath:""}): type: 'Normal' reason: 'CREATE' Ingress ingress/testappingress
I0317 15:06:00.039419 6 controller.go:177] Configuration changes detected, backend reload required.
I0317 15:06:00.508433 6 controller.go:195] Backend successfully reloaded.
I0317 15:06:00.568448 6 controller.go:212] Dynamic reconfiguration succeeded.
Классическая настройка Route53 / ELB:
- Создан классический ELB, который указывает на экземпляры кластера kubernetes и предоставляет порт 80
- Создана запись Route53 в существующей зоне хостинга (CNAME), которая указывает на классический ELB сверху.
- Настройте проверку работоспособности на ELB, чтобы указать на службу ingress-nginx NodePort на порту: 30692, который работает.
Когда я делаю:
curl http://testapp.k8s.myorg.io
Я не получаю ответа.
Вот что я пытался решить проблему:
If I do:
telnet testapp.k8s.myorg.io 80
Он будет преобразован в мое классическое DNS-имя ELB
Если я перейду в любой контейнер / модуль, который существует внутри входящего пространства имен, и сделаю следующее:
curl http://testapp
Получу соответствующий ответ.
Из этого могу сделать следующие выводы:
Приложение правильно развернуто и доступно через службу, которая предоставляется (ClusterIP) изнутри кластера kubernetes.
DNS правильно разрешается в ELB
HealthCheck на ELB работает
Не знаете, что еще я могу сделать, чтобы решить, почему я не могу получить доступ к своей службе через Ingress?