Вопрос или проблема
Информация о кластере:
kubectl version
Client Version: v1.29.14
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.29.14
Cloud being used: bare-metal
Installation method:
Host OS: AlmaLinux 8
CNI and version: Flannel ver: 0.26.4
CRI and version: cri-dockerd ver: 0.3.16
У меня есть мастер-узел, и я создаю свой первый рабочий узел; перед выполнением команды kubeadm join на рабочем узле я мог пинговать мастера с рабочего узла и наоборот без проблем, но теперь, после выполнения команды kubeadm join … я больше не могу пинговать между ними, и получаю эту ошибку:
[root@worker-1 ~]# kubectl get nodes -o wide
E0308 19:38:31.027307 59324 memcache.go:265] couldn't get current server API group list: Get "https://198.58.126.88:6443/api?timeout=32s": dial tcp 198.58.126.88:6443: connect: connection refused
E0308 19:38:32.051145 59324 memcache.go:265] couldn't get current server API group list: Get "https://198.58.126.88:6443/api?timeout=32s": dial tcp 198.58.126.88:6443: connect: connection refused
E0308 19:38:33.075350 59324 memcache.go:265] couldn't get current server API group list: Get "https://198.58.126.88:6443/api?timeout=32s": dial tcp 198.58.126.88:6443: connect: connection refused
E0308 19:38:34.099160 59324 memcache.go:265] couldn't get current server API group list: Get "https://198.58.126.88:6443/api?timeout=32s": dial tcp 198.58.126.88:6443: connect: connection refused
E0308 19:38:35.123011 59324 memcache.go:265] couldn't get current server API group list: Get "https://198.58.126.88:6443/api?timeout=32s": dial tcp 198.58.126.88:6443: connect: connection refused
Подключение к серверу 198.58.126.88:6443 было отклонено - правильно ли указан хост или порт?
Пинг с рабочего узла к мастер-узлу:
[root@worker-1 ~]# ping 198.58.126.88
PING 198.58.126.88 (198.58.126.88) 56(84) bytes of data.
From 198.58.126.88 icmp_seq=1 Destination Port Unreachable
From 198.58.126.88 icmp_seq=2 Destination Port Unreachable
From 198.58.126.88 icmp_seq=3 Destination Port Unreachable
Что может вызывать эту блокировку на рабочем узле?
Спасибо.
Ответ или решение
Отказ в подключениям в сети и невозможность выполнения команды ‘ping’ между серверами может быть вызвана несколькими факторами, связанными с сетевой конфигурацией, конфигурацией кластера, а также настройками безопасности. В данном случае, учитывая предоставленные данные, можно выделить несколько вероятных причин:
Теория
-
Фаерволл и сетевые правила:
Если до выполнения командыkubeadm join
пинг между нодами работал, но после выполнения этой команды перестал, возможно, причина в изменениях, которые повлияли на сетевые правила, например, конфигурация брандмауэра. -
Ошибка в конфигурации кластера:
Проблемы могут возникать из-за неправильной конфигурации Kubernetes, особенно если CNI-плагин неправильно настроен или был некорректно установлен. -
Конфликт IP-адресов:
Конфликты IP-адресов могут блокировать сетевой трафик между нодами. При добавлении новой рабочей ноды в кластер возможно возникновение таких конфликтов. -
Аварийное состояние или сбой в службах:
Диагностируемая проблема с отказом соединения может быть следствием сбоя в работе основных служб кластера, таких как kubelet, api-server или инфра-сеть.
Пример
Исходя из указанного лога ошибок, доступ к серверу API Kubernetes отказывается с ошибкой соединения connection refused
, а также пинг заканчивается сообщением Destination Port Unreachable
, указывающие на наличие проблем на уровне IP-маршрутизации или сетевых фильтров.
Применение
-
Проверка конфигурации фаерволла:
Проверьте текущую конфигурацию файерволла на обеих нодах. Убедитесь в этом, выполнив команды, какiptables -L
илиfirewalld
, в зависимости от используемого вами решения. Убедитесь, что порт 6443 на сервере открыт для входящих соединений. -
Проверка службы kubelet и служб сети:
На обеих нодах выполнитеsystemctl status kubelet
иsystemctl status flanneld
для проверки состояния соответствующих служб. Если они не работают, попытайтесь перезапустить их с помощьюsystemctl restart
. -
Проверьте логи и статусы pod’ов в кластере:
kubectl get pods -A
иkubectl logs <pod-name> -n kube-system
могут дать понимание о сбоях в подах сетевого уровня, таких как flannel, которые ответственны за связь между нодами. -
Проверка конфигурации сети:
Настройте и проверьте конфигурацию CNI. Убедитесь, что Flannel правильно сконфигурирован и все необходимые конфигурационные файлы присутствуют и действительны. -
Коллизия IP-адресов:
Проверьте конфигурацию IP-адресации на всех интерфейсах нод. Если они настроены статически, убедитесь, что нет конфликтующих IP-адресов. -
Трассировка и диагностика трафика:
Используйте такие инструменты, какtraceroute
иtcpdump
, чтобы отследить сеть на наличие неверно маршрутизированного трафика или блокировок.
Решение сетевых проблем в кластере Kubernetes, особенно на bare-metal, может требовать углубленного анализа и понимания сетевой инфраструктуры, конфигураций и взаимодействий сервисов Kubernetes. Каждый шаг здесь требует аккуратного выполнения и уточнения, чтобы учесть все возможные аспекты.