Проверка работоспособности Google loadbalancer не удалась

Я установил контроллер входящего трафика Kubernetes на GKE, следуя официальной документации, как показано ниже.

      kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.46.0/deploy/static/provider/cloud/deploy.yaml

Контроллер входящего трафика работает нормально.

      ingress-nginx-admission-create-dvkgp        0/1     Completed   0          5h29m
ingress-nginx-admission-patch-58l4z         0/1     Completed   1          5h29m
ingress-nginx-controller-65d7564f46-2rtjs   1/1     Running     0          5h29m

Он автоматически создает балансировщик нагрузки TCP, проверку работоспособности и правила брандмауэра. В моем кластере Kubernetes 3 узла. Интересно, что проверка работоспособности не выполняется в двух случаях. Он проходит для экземпляра, в котором работает входной контроллер. Я отлаживаю его, но ничего не понимаю Может ли кто-нибудь помочь мне в этом.

2 ответа

Если бы вы заглянули в примененный файл deploy.yaml , вы бы увидели:

      apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local

Обратите внимание на externalTrafficPolicy: Local. Он используется для сохранения исходного IP-адреса клиента .

Это еще лучше объяснено здесь: исходный IP-адрес для служб с Type=LoadBalancer

Из документов k8s:

Однако, если вы работаете в Google Kubernetes Engine / GCE, установка для того же поля service.spec.externalTrafficPolicy значения Local заставляет узлы без конечных точек службы удалять себя из списка узлов, подходящих для трафика с балансировкой нагрузки , намеренно не выполняя проверки работоспособности.

Эти проверки работоспособности рассчитаны на провал. Это работает так, что IP-адреса клиентов могут быть сохранены.

Обратите внимание, что один узел, который указан как работоспособный, - это тот, на котором работает модуль ingress-nginx-controller. Удалите этот модуль и дождитесь его перепланирования на другом узле - теперь этот другой узел должен быть исправен. Теперь запустите 3 реплики модуля, по одной на каждом узле, и все узлы будут исправны.

Одна из возможных причин - правила брандмауэра . Google указал диапазон IP-адресов и сведения о портах для зондировщиков Google Health Check. Вам нужно настроить ingress allow правило, чтобы установить соединение для проверки работоспособности с вашим сервером.

Дополнительные сведения об отладке см. В этом блоге Google Cloud Platform: Отладка проверок работоспособности в балансировке нагрузки на Google Compute Engine.