Изменять 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 — крайняя мера. Лучше избегать этого на этапе проектирования. Если это произошло, выполните план восстановления, чтобы минимизировать последствия.