Сталкивался ли ты с ситуацией, когда в Kubernetes протухали сертификаты?

«Сталкивался ли ты с ситуацией, когда в Kubernetes протухали сертификаты?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, сталкивался. Это классическая проблема при долгой эксплуатации self-managed кластеров, развернутых с помощью kubeadm. Сертификаты компонентов управления (API Server, etcd, scheduler) по умолчанию имеют срок действия 1 год.

Симптомы: Кластер перестает отвечать. Команды kubectl выдают ошибки типа Unable to connect to the server: x509: certificate has expired or is not yet valid.

Как я решал эту проблему:

  1. Проверка срока действия: Подключался к control-plane ноде и проверял сертификаты.
    # Проверяем все сертификаты в /etc/kubernetes/pki
    kubeadm certs check-expiration
  2. Обновление сертификатов: Использовал kubeadm для обновления.
    # Обновляем все сертификаты
    kubeadm certs renew all
  3. Обновление kubeconfig: После обновления сертификатов нужно обновить конфиг пользователя.
    sudo cp /etc/kubernetes/admin.conf ~/.kube/config
    sudo chown $(id -u):$(id -g) ~/.kube/config
  4. Перезапуск статических подов управления: Перезапускал Pod'ы API Server, Controller Manager, Scheduler, которые работают как статические манифесты.
    # Находим и перезапускаем статические поды
    docker ps | grep kube-apiserver | grep -v pause | awk '{print $1}' | xargs docker restart
    # Аналогично для других компонентов

Проактивные меры, которые я внедрил после этого случая:

  • Настройка автоматического обновления: Добавил в kubeadm-конфиг параметр certificateRenewal: true и настроил регулярный запуск kubeadm certs renew через CronJob или systemd timer.
  • Мониторинг: Настроил алерты в Prometheus на истечение срока действия сертификатов, используя метрику kubelet_certificate_manager_client_ttl_seconds или внешние скрипты проверки.
  • Рассмотрение managed-решений: Для production-нагрузок стал чаще рекомендовать managed-Kubernetes (EKS, GKE, AKS), где проблема обновления сертификатов лежит на провайдере.