Automated Kubernetes Certificate Rotation
Это руководство поможет вам установить, понять и управлять Kubernetes Certificate Rotator в для автоматизации ротации сертификатов Kubernetes в ваших кластерах.
Installation
Смотрите Cluster Plugin для инструкций по установке.
Примечание:
В настоящее время поддерживаются:
- On-Premises кластеры
- DCS кластеры
How it works
Этот плагин обрабатывает автоматическую ротацию следующих сертификатов.
Rotation Process
-
Загрузка информации о сертификатах
На первом этапе собирается метаданные для всех целевых сертификатов. Поскольку эти сертификаты хранятся в разных путях на хосте, их содержимое считывается из соответствующих файлов. Для этого на целевом узле создаётся временный Pod с примонтированными каталогами сертификатов, что позволяет Pod'у прочитать информацию. Информация о сертификатах собирается один раз в день. Детали сертификатов (пути, срок действия) хранятся в ConfigMap
cpaas-system/node-local-certs-<node-name>. Зашифрованный CA сертификат хранится в Secretcpaas-system/kubernetes-ca. -
Условие запуска ротации
Поля
notBeforeиnotAfterсертификата указывают период его действия. Ротация запускается, если оставшийся срок действия меньше 20% или 30 дней. -
Очередь ротации
Сертификаты, требующие ротации, помещаются в очередь на обработку. Программа ротации оценивает недавние действия по ротации и срочность ожидающих задач, чтобы решить, обрабатывать их немедленно или нет. Это предотвращает возможные проблемы со здоровьем кластера из-за одновременной ротации нескольких сертификатов.
-
Генерация новых сертификатов
Программа ротации генерирует новые сертификаты на основе внутренне хранящейся информации CA. В процессе ротации создаётся временный Pod на целевом узле с примонтированными необходимыми каталогами сертификатов, что позволяет контролируемо изменять файлы.
-
Перезапуск компонентов
Требующие перезапуска:
kube-apiserver: необходимо перезапустить для загрузки новых сертификатов. При перезапуске он регенерирует внутренний loopback сертификат (действительный один год, используется только внутри и не может быть внешне ротирован).kube-controller-manager: необходимо перезапустить для перезагрузки kubeconfig файла.kube-scheduler: необходимо перезапустить для перезагрузки kubeconfig файла.kubelet: необходимо перезапустить для перезагрузки серверного сертификата.
Метод перезапуска: Добавить аннотации в YAML-файлы соответствующих статических Pod'ов, чтобы вызвать пересоздание Pod'ов kubelet'ом. Для перезапуска kubelet смонтируйте файловую систему хоста с
hostPID is trueи выполните в контейнере команду "systemctl restart kubelet".Автоматическая перезагрузка:
- Etcd может автоматически перезагружать сертификаты.
-
Сроки ротации
- Сертификаты
kubelet: ротация через 61 день (срок действия 91 день) - Сертификаты контрольной плоскости: ротация через 292 дня (срок действия 365 дней)
- Сертификаты
Operation Considerations
Если kubelet находится в ненормальном состоянии в окне ротации и не может автоматически ротировать сертификаты, требуется ручная ротация:
Операторы должны вручную обновить сертификаты.
Выполните следующие команды для ручного обновления сертификатов:
Например, чтобы обновить kubelet.crt:
Чтобы скачать и подготовить инструмент cert-renew, выполните:
Опционально, скачайте renew-all.sh для обновления всех сертификатов на узле: