Вопрос или проблема
Я открыл порт 6443 с помощью ufw.
$ sudo ufw status
Статус: активен
Куда Действие Откуда
-- ------ ----
6443/tcp РАЗРЕШИТЬ Везде
6443 РАЗРЕШИТЬ Везде
6443/udp РАЗРЕШИТЬ Везде
Вот некоторые другие проверки, которые я сделал …
$ sudo nc -l 6443
nc: Адрес уже используется
$ sudo ss -tuln | grep 6443
tcp LISTEN 0 4096 *:6443 *:*
$ sudo iptables -L -n | grep 6443
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:6443
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:6443
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:6443
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:6443
С клиентской машины –
$ ping 129.x.x.x
PING 129.x.x.x (129.x.x.x) 56(84) байт данных.
64 байта от 129.x.x.x: icmp_seq=1 ttl=63 время=0.266 мс
64 байта от 129.x.x.x: icmp_seq=2 ttl=63 время=0.213 мс
64 байта от 129.x.x.x: icmp_seq=3 ttl=63 время=0.238 мс
64 байта от 129.x.x.x: icmp_seq=4 ttl=63 время=0.168 мс
64 байта от 129.x.x.x: icmp_seq=5 ttl=63 время=0.189 мс
64 байта от 129.x.x.x: icmp_seq=6 ttl=63 время=0.193 мс
64 байта от 129.x.x.x: icmp_seq=7 ttl=63 время=0.195 мс
64 байта от 129.x.x.x: icmp_seq=8 ttl=63 время=0.179 мс
^C
--- 129.x.x.x статистика ping ---
8 пакетов передано, 8 получено, 0% потерь, время 7167мс
rtt min/avg/max/mdev = 0.168/0.205/0.266/0.030 мс
$ nc -vz 129.x.x.x 22
Соединение с 129.x.x.x 22 порт [tcp/ssh] успешно!
Но вот ошибка –
$ nc -vz 129.x.x.x 6443
nc: подключение к 129.x.x.x порт 6443 (tcp) не удалось: Нет маршрута к хосту
Что мне нужно сделать, чтобы открыть этот порт? Этот порт используется сервером api kubernetes, и без его открытия я не смогу присоединить узел к кластеру.
Ответ или решение
Невозможность подключения к другому узлу с помощью telnet: Причины и решения
Если вы столкнулись с проблемой подключения к удаленному узлу через порт 6443 (используемый Kubernetes API Server), несмотря на успешные проверки других портов, таких как SSH (22), и на то, что пинг до узла проходит успешно, возможно, проблема связана с конфигурацией сети или брандмауэра. Давайте рассмотрим, как можно диагностировать и решить эту проблему.
1. Проверка статуса брандмауэра
Вы уже выполнили команду sudo ufw status
, и она отображает, что порт 6443 открыт. Это хороший первый шаг. Убедитесь, что брандмауэр действительно активен и что вы не имеете дополнительных правил, которые могли бы блокировать соединение.
Также проверьте iptables
, используя команду:
sudo iptables -L -n
Убедитесь, что нет правил, которые могут конфликтовать с разрешением на порт 6443. В вашем выводе команды видно, что порты 6443 могут принимать соединения, что значит, что это не проблема.
2. Убедитесь, что служба прослушивает порт
Вы выполнили команду sudo ss -tuln | grep 6443
, и вы видите, что что-то слушает на этом порту. Это значит, что служба Kubernetes действительно запущена и готова принимать соединения на порту 6443.
Однако, ошибка nc: connect to 129.x.x.x port 6443 (tcp) failed: No route to host
говорит о проблемах с маршрутизацией. Это может указывать на несколько вещей:
-
Сетевые правила маршрутизации: Убедитесь, что маршруты настроены правильно на обоих узлах. Используйте команду
ip route
для проверки маршрутов. -
Сетевые интерфейсы: Убедитесь, что служба Kubernetes выполняется на правильном интерфейсе. Проверьте файл конфигурации службы, чтобы убедиться, что она прослушивает нужный интерфейс. Могут быть ситуации, когда служба настроена на прослушивание локального интерфейса, а не на все доступные интерфейсы.
3. Проверка настройки безопасности
Системы безопасности, такие как SELinux или AppArmor, могут блокировать соединения на определенных портах. Проверьте статус SELinux с помощью:
getenforce
Если он активирован, попробуйте временно отключить его и проверьте, сможете ли вы подключиться, используя:
sudo setenforce 0
Не забудьте вернуть его в Permissive режим позже.
4. Логи и диагностика
Проверьте логи Kubernetes API Server для возможных сообщений об ошибках. Логи могут находиться в /var/log/
или в системных журналах, в зависимости от вашей конфигурации. Используйте следующие команды для просмотра логов:
sudo journalctl -u kube-apiserver
Это может помочь обнаружить причины, по которым сервер не отвечает на запросы.
5. Тестирование подключения
Для проверки подключения к порту 6443 с удаленного узла используйте инструмент telnet
:
telnet 129.x.x.x 6443
Если telnet
также не удается подключиться, а пинг проходит и SSH работает, это указывает на гораздо более серьезные проблемы, связанные с маршрутизацией или с настройками сети.
Заключение
Если после выполнения всех вышеперечисленных шагов проблема не решена, возможно, стоит рассмотреть возможность подозрительных аппаратных или программных ограничений между узлами, таких как VPN, прокси-серверы или другие настройки сетевой инфраструктуры.
Если у вас есть доступ к логам и можно предоставить больше информации, это может помочь вам более быстро и эффективно устранить эту проблему. Не забывайте также сообщить об изменениях в конфигурациях, так как они могут оказать влияние на существующий системный трафик.