Ingress- nginx контроллер не запускает ELB должным образом в AWS EC2 Kubernetes Cluster - PullRequest
2 голосов
/ 03 февраля 2020

Я создаю кластер с утилитой kops на AWS EC2. Сейчас я пытаюсь настроить контроллер ingress- nginx, чтобы он маршрутизировал все трафики c в моем кластере. Мне нужно, чтобы он обрабатывал соединения HTTP, HTTPS и WebSocket. Основываясь на этом руководстве , я сделал все необходимые вещи:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.28.0/deploy/static/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.28.0/deploy/static/provider/aws/service-l4.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.28.0/deploy/static/provider/aws/patch-configmap-l4.yaml

Когда я пытаюсь получить все элементы в ingress-nginx пространстве имен с kubectl -n ingress-nginx get all:

NAME                    TYPE           CLUSTER-IP    EXTERNAL-IP                                                                 PORT(S)                      AGE
service/ingress-nginx   LoadBalancer   100.71.94.9   a7d3fe1383e344c1d8cb2de671xxxxxx-810xxxxxx.eu-central-1.elb.amazonaws.com   80:32389/TCP,443:31803/TCP   16m

Когда я открываю консоль AWS -> Экземпляры EC2 -> Балансировщик нагрузки, я вижу, что ELB создан, но на вкладке «Экземпляры» имеется статус OutOfService для каждого узла. Поэтому я не могу связаться с моим ELB URL: a7d3fe1383e344c1d8cb2de671xxxxxx-810xxxxxx.eu-central-1.elb.amazonaws.com:

AWS Console - Load Balancers - ELB

Есть еще некоторые подробности об услуге, использующей kubectl -n ingress-nginx describe service/ingress-nginx

Name:                     ingress-nginx
Namespace:                ingress-nginx
Labels:                   app.kubernetes.io/name=ingress-nginx
                          app.kubernetes.io/part-of=ingress-nginx
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{"service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout":"60"...
                          service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: 60
                          service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: *
Selector:                 app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/part-of=ingress-nginx
Type:                     LoadBalancer
IP:                       100.71.94.9
LoadBalancer Ingress:     a7d3fe1383e344c1d8cb2de671xxxxxx-810xxxxxx.eu-central-1.elb.amazonaws.com
Port:                     http  80/TCP
TargetPort:               http/TCP
NodePort:                 http  32389/TCP
Endpoints:                <none>
Port:                     https  443/TCP
TargetPort:               https/TCP
NodePort:                 https  31803/TCP
Endpoints:                <none>
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type    Reason                Age   From                Message
  ----    ------                ----  ----                -------
  Normal  EnsuringLoadBalancer  15m   service-controller  Ensuring load balancer
  Normal  EnsuredLoadBalancer   15m   service-controller  Ensured load balancer

Я что-то пропустил?

UPD # 1

Если я делаю то же самое в кластере EKS, все работает хорошо, и появляется ingress-контроллер на каждом узле. Есть идеи ..?

1 Ответ

0 голосов
/ 03 февраля 2020

Вам необходимо добавить группу безопасности в экземпляры EC2 (рабочие узлы kubernetes), в которых развернуто nginx, чтобы разрешить порты 80 и 443 для группы безопасности, которая была создана для ELB.

Редактировать:

Раздел конечных точек службы service/ingress-nginx не имеет IP-адресов модулей nginx. Следовательно, когда ELB отправляет запрос проверки работоспособности, но запрос не может достичь модулей, проверка работоспособности завершается неудачно, и ELB помечает серверную часть как outofservice.

...