Изменять IP-адреса узлов в Kubernetes — опасно. Это может привести к нестабильной работе кластера, потере связи между компонентами и невозможности запуска приложений.

Разберёмся, почему не стоит менять IP, и как поступить, если всё же пришлось.

1. Почему важен IP-адрес узла

Kubernetes использует IP-адреса узлов для:

  • Идентификации узла и его kubelet
  • Связи между компонентами кластера
  • Работы CNI и сетевых плагинов
  • DNS и сервисов
  • Проверки TLS-сертификатов

После изменения IP все эти связи рвутся, узел становится NotReady, а поды могут не перезапускаться.

2. Что может пойти не так

  • kubelet не подключается к API-серверу
  • Узел отображается как NotReady
  • Поды всё ещё привязаны к старому узлу
  • Сетевые плагины выходят из строя
  • Сертификаты недействительны
  • kube-proxy/CNI агенты не работают

3. Когда это может понадобиться

Иногда смена IP — неизбежна:

  • Миграция в другую подсеть
  • Изменения на стороне провайдера
  • Требования политики безопасности

4. Безопасные альтернативы

  • Используйте статические IP или резервируемые IP
  • Используйте имена хостов, где возможно
  • Проектируйте сеть с учётом стабильности IP
  • Лучше воссоздать узел, чем менять IP

5. План восстановления

Если IP уже изменился:

Шаг 1: Очистите узел

kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

Шаг 2: Укажите новый IP в конфигурации kubelet

Добавьте в /etc/default/kubelet:

--node-ip=<новый-ip>

Шаг 3: Перезапустите kubelet

systemctl restart kubelet

Шаг 4: Удалите узел из кластера

kubectl delete node <old-node-name>

Узел зарегистрируется с новым IP.

Шаг 5: Проверка

kubectl get nodes -o wide
kubectl get pods -o wide -A

Убедитесь, что всё работает.

6. Вывод

Смена IP-адреса узла в Kubernetes — крайняя мера. Лучше избегать этого на этапе проектирования. Если это произошло, выполните план восстановления, чтобы минимизировать последствия.