← Назад к вопросам

Протухали ли сертификаты в Kubernetes

2.7 Senior🔥 251 комментариев
#Kubernetes#Безопасность

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Краткий ответ

Да, сертификаты в Kubernetes протухают (expire). Это критически важный механизм безопасности. Все внутренние компоненты Kubernetes (kube-apiserver, kubelet, etcd) и инструменты управления (kubectl) используют TLS-сертификаты для взаимной аутентификации и шифрования связи. Эти сертификаты имеют строго ограниченный срок действия, обычно 1 год при установке с помощью kubeadm.

Подробное объяснение

В Kubernetes существует два основных типа сертификатов:

  1. Сертификаты, управляемые самой контрольной плоскостью (control plane): Например, сертификаты для kubelet, которые автоматически обновляются (rotated).
  2. Сертификаты контрольной плоскости (статические сертификаты): Это сертификаты, используемые компонентами kube-apiserver, etcd, kube-controller-manager, kube-scheduler, а также клиентский сертификат для kubectl (администратора). Именно они чаще всего становятся источником проблем при истечении срока действия.

Какие сертификаты и где находятся?

При стандартной установке через kubeadm основные сертификаты хранятся в директории /etc/kubernetes/pki. Вот ключевые файлы:

/etc/kubernetes/pki/
├── apiserver.crt
├── apiserver.key
├── apiserver-etcd-client.crt
├── apiserver-etcd-client.key
├── apiserver-kubelet-client.crt
├── apiserver-kubelet-client.key
├── ca.crt
├── ca.key
├── front-proxy-ca.crt
├── front-proxy-ca.key
├── front-proxy-client.crt
├── front-proxy-client.key
├── etcd/
│   ├── ca.crt
│   ├── ca.key
│   ├── server.crt
│   ├── server.key
│   ├── peer.crt
│   └── peer.key
└── sa.pub  # Не сертификат, а ключ для ServiceAccount

Как проверить срок действия сертификатов?

Используйте команды openssl или kubeadm. Самый надежный способ — проверить дату истечения (expiry date) напрямую.

# Проверка сертификата API Server
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep -A2 "Validity"

# Или более конкретная команда для получения даты истечения
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates

# Утилита kubeadm позволяет проверить все сертификаты разом
kubeadm certs check-expiration

Результат команды kubeadm certs check-expiration выглядит так:

CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Dec 30, 2023 15:08 UTC   364d            ca                      no
apiserver                  Dec 30, 2023 15:08 UTC   364d            ca                      no
apiserver-etcd-client      Dec 30, 2023 15:08 UTC   364d            etcd-ca                 no
apiserver-kubelet-client   Dec 30, 2023 15:08 UTC   364d            ca                      no
front-proxy-client         Dec 30, 2023 15:08 UTC   364d            front-proxy-ca          no

Что происходит при протухании сертификатов?

Симптомы могут варьироваться в зависимости от того, какой именно сертификат истек:

  • Сертификат kube-apiserver: Контрольная плоскость перестанет работать. kube-apiserver может не запуститься, или другие компоненты (scheduler, controller-manager, kubelet) не смогут подключиться к нему.
  • Клиентский сертификат kubectl~/.kube/config): Команды kubectl начнут возвращать ошибки аутентификации, например: Unable to connect to the server: x509: certificate has expired or is not yet valid.
  • Сертификаты kubelet: Узлы (nodes) перейдут в состояние NotReady, так как API Server не сможет аутентифицировать их.
  • Сертификаты etcd: Работа распределенного хранилища данных нарушится, что приведет к полной неработоспособности кластера.

Как обновить (продлить) сертификаты?

1. Автоматическое обновление (для сертификатов kubelet)

Начиная с Kubernetes 1.8, kubelet запрашивает и автоматически обновляет свои клиентские сертификаты через Certificate Signing Requests (CSR). Это настраивается флагами --rotate-certificates и --cert-dir у kubelet.

2. Ручное обновление сертификатов контрольной плоскости (с помощью kubeadm)

Для кластеров, развернутых через kubeadm, процесс упрощен:

# 1. Сначала проверьте сроки действия
sudo kubeadm certs check-expiration

# 2. Обновите все сертификаты (на мастер-узле)
sudo kubeadm certs renew all

# 3. Обновите конфигурацию для kubectl
# Копируем новый конфиг с обновленным клиентским сертификатом администратора
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 4. Перезапустите статические Pods контрольной плоскости (если они управляются kubelet)
# kubeadm размещает apiserver, scheduler и controller-manager как Pods в пространстве имен kube-system
sudo systemctl restart kubelet
# Или принудительно пересоздайте Pods, удалив их (они будут созданы автоматически)
kubectl delete pod -n kube-system kube-apiserver-<node-name> kube-controller-manager-<node-name> kube-scheduler-<node-name>

Важное замечание: Команда kubeadm certs renew использует существующие ключи (.key файлы) по умолчанию. Если вам необходимо сгенерировать и новые ключи (более безопасный вариант), используйте флаг --certificate-key, полученный предварительно из kubeadm init phase upload-certs.

Рекомендации по управлению жизненным циклом сертификатов

  • Мониторинг: Внедрите мониторинг даты истечения сертификатов. Можно использовать:
    *   Планировщик задач (cron) с запуском `kubeadm certs check-expiration` и отправкой алертов.
    *   Специализированные инструменты, например, `kube-cert-manager` или скрипты на основе `openssl`.
  • Автоматизация: Для продакшен-сред рассмотрите использование Hashicorp Vault или cert-manager не только для сертификатов приложений (Ingress), но и для внутренних сертификатов кластера через интеграцию с Kubernetes CSR API.
  • Политика обновления: Установите регулярный график обновления сертификатов (например, за 1-3 месяца до истечения срока). Не ждите крайнего срока.
  • Документация: Всегда документируйте процесс обновления сертификатов для вашего конкретного кластера, особенно если он был установлен не через kubeadm.

Заключение

Протухание сертификатов — это не "если", а "когда". Это одна из самых частых причин простоев самодежных или плохо обслуживаемых Kubernetes-кластеров. Регулярная проверка и своевременное обновление сертификатов должны быть частью стандартных операционных процедур (runbooks) для любого DevOps -инженера, ответственного за инфраструктуру Kubernetes. Использование kubeadm значительно упрощает этот процесс, но не отменяет необходимости в мониторинге и плановом обслуживании.

Протухали ли сертификаты в Kubernetes | PrepBro