#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
настраивает кластер таким образом, чтобы эта опция была включена).:
- Kubernetes.io: Настройка ротации сертификатов для набора кубов
- Github.com: Kubernetes: Kubeadm: Проблемы: —обновление сертификата true не продлевает kubelet.conf
В зависимости от версии, используемой в вашей среде, это можно отключить. В настоящее время в новейшей версии k8s, управляемой kubeadm
этой опцией, эта опция включена по умолчанию, насколько мне известно.
Пожалуйста, имейте в виду, что перед началом работы с любым узлом/плоскостью управления/обновлением/обновлением kubernetes прочитайте «Примечания по срочному обновлению», относящиеся к вашей версии k8s (пример).:
Определение автоматического способа ротации сертификатов может идти в любом случае, но вы можете использовать уже упомянутые команды для автоматизации этого процесса. Вам нужно будет создать сценарий (который у вас уже есть), который будет помещен в cron, который через некоторое время запустится и обновит их.
Ответ №2:
Начиная с версии kubernetes 1.8 добавлена ротация сертификатов. Вы можете прочитать об этом здесь, https://kubernetes.io/docs/tasks/tls/certificate-rotation/
Комментарии:
1. Это только кублет. Не включает в себя всю плоскость управления.