Проверка работоспособности 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.