Обновлен k8 рабочий узел с Ubuntu 20.04 до 22.04. Разрешение DNS/сеть внутри подов не работает, и поды продолжают падать/перезапускаться.

Вопрос или проблема

У меня есть кластер k8, основанный на Ubuntu 20.04: 1 мастер и 3 рабочих узла.

Я освободил один из рабочих узлов. Установил пакеты kubectl, iptables, kubeadm, kubelet и containerd на удержание.

Обновление ОС до 22.04 прошло гладко, но после обновления поды (daemon-sets kube-system) постоянно сбоивают. Одна из проблем, которую я обнаружил, заключается в том, что DNS-резолвинг не работает внутри подов на обновлённом узле. Когда я возвращаюсь к Ubuntu 20.04, всё работает нормально. Кто-нибудь может помочь/предложить решение, пожалуйста?

Ответ или решение

Когда вы обновляете операционную систему на рабочем узле Kubernetes с Ubuntu 20.04 до 22.04 и сталкиваетесь с проблемами DNS-резолюции внутри подов, это может быть вызвано несколькими факторами. Проблема с DNS может привести к сбоям и перезагрузкам подов, поскольку многие приложения полагаются на корректное разрешение имен для коммуникации между компонентами. Рассмотрим возможные причины и шаги по их устранению.

Теория

Проблемы с сетевыми настройками и DNS могут возникнуть из-за различных изменений в системах, связанных с обновлением ОС:

  1. Изменения в сетевой конфигурации: Обновление до Ubuntu 22.04 может привести к изменениям в конфигурации сетевых интерфейсов, политике брандмауэра (iptables) и настройках DNS. Вероятно, произошли изменения в системном резольвере (например, переход на systemd-resolved) или изменились настройки firewall, влияющие на сетевые подключения.

  2. Совместимость компонентов Kubernetes: Неверное взаимодействие между версиями компонентов Kubernetes и новыми системными библиотеками или драйверами может вызвать сбои в работе кластерных сервисов.

  3. Политики безопасности и SELinux: С новыми версиями ОС могут быть внесены изменения в политиках безопасности либо активирован SELinux, который может блокировать определенные сетевые вызовы.

Пример

Допустим, вы обновили систему, и сетевые параметры изменились. Например, система могла сменить настройки DNS в /etc/resolv.conf или автоматизировать DNS через systemd-resolved, обновив конфигурацию сети, но Kubernetes использует другую логику работы с DNS. Если kubelet не помечен как совместимый с вашей новой ОС, это также может быть источником проблемы.

Поэтому возникает ситуация: внутри кластера pod пытается обратиться к DNS-серверу, но запросы не разрешаются, поскольку резольверы либо не настраиваются, либо не взаимодействуют корректно с новой конфигурацией сети.

Применение

Вот ряд действий, которые стоит предпринять для устранения проблемы:

  1. Проверка стека сетевой конфигурации:

    • Убедитесь, что изменения в сетях (например, создание интерфейсов или правил NAT) не привели к разрыву связи между компонентами кластера.
    • Убедитесь, что конфигурация /etc/resolv.conf на узле корректна и указывает на правильные DNS-серверы, используемые вашим кластером.
  2. Проверка политики iptables:

    • Проверьте правила iptables и убедитесь, что они совместимы с кластерами Kubernetes и не блокируют внешний и внутренний трафик.
  3. Проверьте совместимость компонентов Kubernetes:

    • Убедитесь, что версии kubeadm, kubelet и kubectl, которые вы используете, совместимы с Ubuntu 22.04.
    • Перезапустите службы Kubernetes после обновления и проверьте статус модулей с помощью journalctl.
  4. Диагностика DNS:

    • Используйте утилиты вроде nslookup или dig внутри подов с установленным допустимым образом для диагностики, чтобы узнать, действительно ли DNS-запросы не разрешаются.
  5. Проверка log-файлов:

    • Проанализируйте журналы kubelet, containerd и системных служб для выявления конкретных ошибок и предупреждений, указывающих на сетевые проблемы.
  6. Использование alternative resolver:

    • Рассмотрите возможность использования альтернативного DNS-кешера или резольвера, совместимого с новой версией Ubuntu, для тестирования.
  7. Отключение systemd-resolved:

    • Временно отключите systemd-resolved и проверьте изменение работы системы, если считаете, что его конфигурация может быть причиной проблем.

Каждая из этих мер может отдельно привести к решению проблемы. Все перечисленные шаги подразумевают развертывание и тестирование в тестовом окружении, чтобы минимизировать риск воздействия на продакшн-кластер. Всегда сохраняйте резервные копии перед критическими изменениями конфигурации.

Следуя этим рекомендациям, вы сможете не только восстановить работоспособность вашего кластера, но и понять причину сбоя, тем самым предотвратив подобные ситуации в будущем.

Оцените материал
Добавить комментарий

Капча загружается...