Я видел эти проблемы на многих других форумах и наконец нашел решение, которое работает от меня.
Во-первых, мои проблемы были исключительно из-за сертификата /var/lib/кубелет/pki/kubelet.crt
, срок действия которого истек:
эхо -n | openssl s_client -connect localhost:10250 2>&1 | sed -ne '/-НАЧАТЬ СЕРТИФИКАТ-/,/-КОНЕЦ СЕРТИФИКАТА-/p' | openssl x509 -текст -noout | grep -A 2 Валидность
или же
sudo openssl x509 -in /var/lib/kubelet/pki/kubelet.crt -text -noout | grep -A 2 Валидность
Во-первых, вам нужно включить --rotate-сертификаты = истина
и --rotate-server-certificates=true
в вашем кубеле. В моем случае я установил кластер, используя кубадм
, так что я могу редактировать /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
, и добавьте следующее в KUBELET_EXTRA_ARGS
:
Environment="KUBELET_EXTRA_ARGS=--rotate-certificates=true --rotate-server-certificates=true --tls-cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
В общем, это просто добавление этих флагов в выполнение kubelet /usr/bin/kubelet --rotate-certificates=true --rotate-server-certificates=true
.
И перезагрузите и перезапустите kubelet с помощью:
sudo systemctl демон-перезагрузка
перезапуск службы sudo kubelet
После перезагрузки я вижу что-то вроде 14114 log.go:172] http: ошибка рукопожатия TLS от 20.0.0.13:57738: для kubelet нет сертификата обслуживания
, что означает, что сертификат необходимо добавить и утвердить.
Во-вторых, нам необходимо утвердить csr
из kubernetes (это то, на что я никогда раньше не смотрел...):
kubectl получить csr
Там вы увидите сертификат, ожидающий утверждения, поэтому только что утвержденный:
сертификат kubectl утверждает csr-dlcf6
Теперь ваш кластер должен иметь обновленный сертификат сервера kubelet. Чтобы проверить еще раз:
эхо -n | openssl s_client -connect localhost:10250 2>&1 | sed -ne '/-НАЧАТЬ СЕРТИФИКАТ-/,/-КОНЕЦ СЕРТИФИКАТА-/p' | openssl x509 -текст -noout | grep -A 2 Валидность
Некоторые примечания:
- Мы включили ротацию как для клиента, так и для сервера. Ротация клиентов также является частью сценария автоматического обновления сертификата (https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/)
- После того, как мы включили вращение
/var/lib/кубелет/pki/kubelet.crt
больше не используется, вместо этого символическая ссылка /var/lib/kubelet/pki/kubelet-server-current.pem
используется и указывает на последний ротированный сертификат.
Использованная литература: