Это руководство поможет вам установить, понять и управлять 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
для обновления всех сертификатов на узле: