Это руководство поможет вам установить, понять и управлять Kubernetes Certificate Rotator в для автоматизации ротации сертификатов Kubernetes в ваших кластерах.
Смотрите Cluster Plugin для инструкций по установке.
Примечание:
В настоящее время поддерживаются:
- On-Premises кластеры
- DCS кластеры
Этот плагин обрабатывает автоматическую ротацию следующих сертификатов.
| Certificate file | Function | Node Type |
|---|---|---|
| apiserver.crt | Серверный сертификат для kube-apiserver | Control Plane Node |
| apiserver-etcd-client.crt | Клиентский сертификат для kube-apiserver для доступа к etcd | Control Plane Node |
| apiserver-kubelet-client.crt | Клиентский сертификат для kube-apiserver для доступа к kubelet | Control Plane Node |
| front-proxy-client.crt | Клиентский сертификат для kube-apiserver для доступа к агрегированным API серверам | Control Plane Node |
| etcd/server.crt | Серверный сертификат для etcd | Control Plane Node |
| etcd/peer.crt | Сертификат для взаимодействия между членами etcd | Control Plane Node |
| /root/.kube/config, admin.conf, super-admin.conf | Клиентский сертификат в kubeconfig для администрирования кластера | Control Plane Node |
| controller-manager.conf | Клиентский сертификат в kubeconfig для kube-controller-manager | Control Plane Node |
| scheduler.conf | Клиентский сертификат в kubeconfig для kube-scheduler | Control Plane Node |
| kubelet.crt | Серверный сертификат для kubelet | All Nodes |
| kubelet-client-current.pem | Клиентский сертификат для kubelet (ссылается в kubelet.conf) | All Nodes |
Загрузка информации о сертификатах
На первом этапе собирается метаданные для всех целевых сертификатов. Поскольку эти сертификаты хранятся в разных путях на хосте, их содержимое считывается из соответствующих файлов. Для этого на целевом узле создаётся временный Pod с примонтированными каталогами сертификатов, что позволяет Pod'у прочитать информацию. Информация о сертификатах собирается один раз в день. Детали сертификатов (пути, срок действия) хранятся в ConfigMap cpaas-system/node-local-certs-<node-name>. Зашифрованный CA сертификат хранится в Secret cpaas-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".
Автоматическая перезагрузка:
Сроки ротации
kubelet: ротация через 61 день (срок действия 91 день)Если kubelet находится в ненормальном состоянии в окне ротации и не может автоматически ротировать сертификаты, требуется ручная ротация:
Операторы должны вручную обновить сертификаты.
Выполните следующие команды для ручного обновления сертификатов:
Например, чтобы обновить kubelet.crt:
Чтобы скачать и подготовить инструмент cert-renew, выполните:
Опционально, скачайте renew-all.sh для обновления всех сертификатов на узле: