Какова наилучшая практика ротации сертификатов Kubernetes

#kubernetes #certificate #kubelet

Вопрос:

В настоящее время я использую скрипт для продления сертификатов Kubernetes до истечения срока их действия. Но это ручной процесс. Я должен тщательно следить за сроками годности и запускать этот сценарий заранее. Каков рекомендуемый способ автоматического обновления всех сертификатов плоскости управления без обновления плоскости управления? Флаги kubelet —rotate* вращают все компоненты (например, контроллер) или это только для kubelet? PS: Кластер Kubernetes был создан с помощью kubeadm.

Комментарии:

1. Привет, как говорят документы , это специфично для kubelet . Вы также спрашиваете конкретно об этих kubelet или других компонентах? С точки зрения передовой практики, вы видели документы об автоматическом продлении сертификата ?

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

3. Решение может сильно зависеть от вашей настройки. Не могли бы вы рассказать подробнее о вашем кластере Kubernetes? Как он был создан? Вы использовали такие инструменты, как kubeadm или kubespray ?

4. он создан с помощью kubeadm. Нет управляемой службы.

Ответ №1:

Отвечая на следующий вопрос:

Каков рекомендуемый способ автоматического обновления всех сертификатов плоскости управления без обновления плоскости управления

Согласно документам и рекомендациям k8s, наилучшей практикой является использование «Автоматического обновления сертификата» с обновлением плоскости управления:

Автоматическое продление сертификата

Эта функция предназначена для решения самых простых случаев использования; если у вас нет особых требований к обновлению сертификатов и вы регулярно обновляете версии Kubernetes (менее 1 года между каждым обновлением), kubeadm позаботится о том, чтобы ваш кластер был в актуальном состоянии и был достаточно безопасным.

Примечание.Рекомендуется часто обновлять кластер, чтобы оставаться в безопасности.

Kubernetes.io: Администрирование кластера: Сертификаты Kubeadm: Автоматическое продление сертификата

Почему это рекомендуемый способ:

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

При каждом control-plane обновлении сертификаты будут обновляться, как описано выше (по умолчанию true ).:

  • $ kubeadm upgrade apply --help
 --certificate-renewal    Perform the renewal of certificates used by component changed during upgrades. (default true)
 

Вы также можете проверить срок действия control-plane сертификатов, запустив:

  • $ kubeadm certs check-expiration
 [check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
 
CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 May 30, 2022 13:36 UTC   364d                                    no      
apiserver                  May 30, 2022 13:36 UTC   364d            ca                      no      
apiserver-etcd-client      May 30, 2022 13:36 UTC   364d            etcd-ca                 no      
apiserver-kubelet-client   May 30, 2022 13:36 UTC   364d            ca                      no      
controller-manager.conf    May 30, 2022 13:36 UTC   364d                                    no      
etcd-healthcheck-client    May 30, 2022 13:36 UTC   364d            etcd-ca                 no      
etcd-peer                  May 30, 2022 13:36 UTC   364d            etcd-ca                 no      
etcd-server                May 30, 2022 13:36 UTC   364d            etcd-ca                 no      
front-proxy-client         May 30, 2022 13:36 UTC   364d            front-proxy-ca          no      
scheduler.conf             May 30, 2022 13:36 UTC   364d                                    no      
 
CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      May 28, 2031 13:36 UTC   9y              no      
etcd-ca                 May 28, 2031 13:36 UTC   9y              no      
front-proxy-ca          May 28, 2031 13:36 UTC   9y              no  
 

Еще одна заметка!

kubelet.conf не включен в приведенный выше список, поскольку kubeadm настраивается kubelet для автоматического продления сертификата.

Из того, что видно по умолчанию:

  • Срок действия клиентских сертификатов, созданных kubeadm, истекает через 1 год.
  • Срок действия CA, созданных kubeadm, истекает через 10 лет.

Существуют и другие функции, позволяющие поворачивать сертификаты «полуавтоматическим» способом.

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

  • $ kubeadm certs renew

где вы можете автоматически (с помощью команды) обновить указанные (или все) сертификаты:

  • $ kubeadm certs renew all
 [renew] Reading configuration from the cluster...
[renew] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
 
certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself renewed
certificate for serving the Kubernetes API renewed
certificate the apiserver uses to access etcd renewed
certificate for the API server to connect to kubelet renewed
certificate embedded in the kubeconfig file for the controller manager to use renewed
certificate for liveness probes to healthcheck etcd renewed
certificate for etcd nodes to communicate with each other renewed
certificate for serving etcd renewed
certificate for the front proxy client renewed
certificate embedded in the kubeconfig file for the scheduler manager to use renewed
 
Done renewing certificates. You must restart the kube-apiserver, kube-controller-manager, kube-scheduler and etcd, so that they can use the new certificates.
 

Пожалуйста, обратите особое внимание на выходные данные:

 You must restart the kube-apiserver, kube-controller-manager, kube-scheduler and etcd, so that they can use the new certificates.
 

Как указано, вам нужно будет перезапустить компоненты вашего control-plane , чтобы использовать новый сертификат, но помните:

  • $ kubectl delete pod -n kube-system kube-scheduler-ubuntu не получится.

Вам нужно будет перезапустить контейнер docker, отвечающий за компонент:

  • $ docker ps | grep -i "scheduler"
  • $ docker restart 8c361562701b (пример)
 8c361562701b   38f903b54010             "kube-scheduler --au…"   11 minutes ago      Up 11 minutes                k8s_kube-scheduler_kube-scheduler-ubuntu_kube-system_dbb97c1c9c802fa7cf2ad7d07938bae9_5
b709e8fb5e6c   k8s.gcr.io/pause:3.4.1   "/pause"                 About an hour ago   Up About an hour             k8s_POD_kube-scheduler-ubuntu_kube-system_dbb97c1c9c802fa7cf2ad7d07938bae9_0
 

Как указано в ссылке ниже, kubelet может автоматически обновлять свой сертификат ( kubeadm настраивает кластер таким образом, чтобы эта опция была включена).:

В зависимости от версии, используемой в вашей среде, это можно отключить. В настоящее время в новейшей версии k8s, управляемой kubeadm этой опцией, эта опция включена по умолчанию, насколько мне известно.


Пожалуйста, имейте в виду, что перед началом работы с любым узлом/плоскостью управления/обновлением/обновлением kubernetes прочитайте «Примечания по срочному обновлению», относящиеся к вашей версии k8s (пример).:


Определение автоматического способа ротации сертификатов может идти в любом случае, но вы можете использовать уже упомянутые команды для автоматизации этого процесса. Вам нужно будет создать сценарий (который у вас уже есть), который будет помещен в cron, который через некоторое время запустится и обновит их.

Ответ №2:

Начиная с версии kubernetes 1.8 добавлена ротация сертификатов. Вы можете прочитать об этом здесь, https://kubernetes.io/docs/tasks/tls/certificate-rotation/

Комментарии:

1. Это только кублет. Не включает в себя всю плоскость управления.