• Русский
  • Automated Kubernetes Certificate Rotation

    Это руководство поможет вам установить, понять и управлять Kubernetes Certificate Rotator в для автоматизации ротации сертификатов Kubernetes в ваших кластерах.

    Installation

    Смотрите Cluster Plugin для инструкций по установке.

    Примечание:

    • В настоящее время поддерживаются:

      • On-Premises кластеры
      • DCS кластеры

    How it works

    Этот плагин обрабатывает автоматическую ротацию следующих сертификатов.

    Certificate fileFunctionNode Type
    apiserver.crtСерверный сертификат для kube-apiserverControl Plane Node
    apiserver-etcd-client.crtКлиентский сертификат для kube-apiserver для доступа к etcdControl Plane Node
    apiserver-kubelet-client.crtКлиентский сертификат для kube-apiserver для доступа к kubeletControl Plane Node
    front-proxy-client.crtКлиентский сертификат для kube-apiserver для доступа к агрегированным API серверамControl Plane Node
    etcd/server.crtСерверный сертификат для etcdControl Plane Node
    etcd/peer.crtСертификат для взаимодействия между членами etcdControl Plane Node
    /root/.kube/config, admin.conf, super-admin.confКлиентский сертификат в kubeconfig для администрирования кластераControl Plane Node
    controller-manager.confКлиентский сертификат в kubeconfig для kube-controller-managerControl Plane Node
    scheduler.confКлиентский сертификат в kubeconfig для kube-schedulerControl Plane Node
    kubelet.crtСерверный сертификат для kubeletAll Nodes
    kubelet-client-current.pemКлиентский сертификат для kubelet (ссылается в kubelet.conf)All Nodes

    Rotation Process

    1. Загрузка информации о сертификатах

      На первом этапе собирается метаданные для всех целевых сертификатов. Поскольку эти сертификаты хранятся в разных путях на хосте, их содержимое считывается из соответствующих файлов. Для этого на целевом узле создаётся временный Pod с примонтированными каталогами сертификатов, что позволяет Pod'у прочитать информацию. Информация о сертификатах собирается один раз в день. Детали сертификатов (пути, срок действия) хранятся в ConfigMap cpaas-system/node-local-certs-<node-name>. Зашифрованный CA сертификат хранится в Secret cpaas-system/kubernetes-ca.

    2. Условие запуска ротации

      Поля notBefore и notAfter сертификата указывают период его действия. Ротация запускается, если оставшийся срок действия меньше 20% или 30 дней.

    3. Очередь ротации

      Сертификаты, требующие ротации, помещаются в очередь на обработку. Программа ротации оценивает недавние действия по ротации и срочность ожидающих задач, чтобы решить, обрабатывать их немедленно или нет. Это предотвращает возможные проблемы со здоровьем кластера из-за одновременной ротации нескольких сертификатов.

    4. Генерация новых сертификатов

      Программа ротации генерирует новые сертификаты на основе внутренне хранящейся информации CA. В процессе ротации создаётся временный Pod на целевом узле с примонтированными необходимыми каталогами сертификатов, что позволяет контролируемо изменять файлы.

    5. Перезапуск компонентов

      Требующие перезапуска:

      • kube-apiserver: необходимо перезапустить для загрузки новых сертификатов. При перезапуске он регенерирует внутренний loopback сертификат (действительный один год, используется только внутри и не может быть внешне ротирован).
      • kube-controller-manager: необходимо перезапустить для перезагрузки kubeconfig файла.
      • kube-scheduler: необходимо перезапустить для перезагрузки kubeconfig файла.
      • kubelet: необходимо перезапустить для перезагрузки серверного сертификата.

      Метод перезапуска: Добавить аннотации в YAML-файлы соответствующих статических Pod'ов, чтобы вызвать пересоздание Pod'ов kubelet'ом. Для перезапуска kubelet смонтируйте файловую систему хоста с hostPID is true и выполните в контейнере команду "systemctl restart kubelet".

      Автоматическая перезагрузка:

      • Etcd может автоматически перезагружать сертификаты.
    6. Сроки ротации

      • Сертификаты kubelet: ротация через 61 день (срок действия 91 день)
      • Сертификаты контрольной плоскости: ротация через 292 дня (срок действия 365 дней)

    Operation Considerations

    Если kubelet находится в ненормальном состоянии в окне ротации и не может автоматически ротировать сертификаты, требуется ручная ротация:

    Операторы должны вручную обновить сертификаты.

    Выполните следующие команды для ручного обновления сертификатов:

    cert-renew --ca-cert <ca-cert-path> --ca-key <ca-key-path> --days <days> <certificate or kubeconfig 1> <certificate or kubeconfig 2> ...

    Например, чтобы обновить kubelet.crt:

    cert-renew --ca-cert /etc/kubernetes/pki/ca.crt --ca-key /etc/kubernetes/pki/ca.key --days 91 /etc/kubernetes/pki/kubelet.crt

    Чтобы скачать и подготовить инструмент cert-renew, выполните:

    curl "$(kubectl get services -n cpaas-system frontend -o jsonpath='{.spec.clusterIP}'):8080/cluster-cert-rotator/download/cert-renew" -o ./cert-renew && chmod +x ./cert-renew

    Опционально, скачайте renew-all.sh для обновления всех сертификатов на узле:

    curl "$(kubectl get services -n cpaas-system frontend -o jsonpath='{.spec.clusterIP}'):8080/cluster-cert-rotator/download/renew-all.sh" -o ./renew-all.sh