Мы запускаем кластер Kubernetes в GKE (Google Kubernetes Engine версия 1.13.10). Это региональный кластер, который начинался с двух узлов на зону (всего шесть узлов). В этом кластере работает несколько служб, включая некоторые веб-службы и службу Kerberos.
Недавно мы изменили количество узлов на зону с двух на три (поэтому у нас теперь девять узлов). Когда мы сделали это, служба Kerberos стала недоступной.
Некоторые подробности: служба Kerberos работает на трех пакетах в StatefulSet за двумя службами (UDP и TCP) со статическим IP-адресом. Сервис является LoadBalancer и использует локальную политику внешнего трафика, чтобы мы могли легче регистрировать IP-адрес клиента.
Когда мы добавили дополнительные узлы, служба Kerberos зарегистрировала следующие события:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal UpdatedLoadBalancer 53m (x2 over 56m) service-controller Updated load balancer with new hosts
Модули продолжали работать, но внешняя конечная точка службы больше не была доступна: телнет к конечной точке ничего не показывал вдругой конец. Перезапуск стручков решил проблему.
Вот определение для службы TCP:
kind: Service
metadata:
annotations:
external-dns.alpha.kubernetes.io/hostname: kdc.example.org
name: kdc-tcp
namespace: kdc
spec:
clusterIP: 10.8.18.71
externalTrafficPolicy: Local
healthCheckNodePort: 32447
loadBalancerIP: 35.101.23.134
ports:
- name: kerberos-tcp
nodePort: 32056
port: 88
protocol: TCP
targetPort: 88
selector:
app: kdc
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: 35.101.23.134
Почему при добавлении некоторых дополнительных узлов это может произойти? Как мы можем избежать этой проблемы в будущем?