Проблема исходит от kubeadm, который использует старые сертификаты, когда ему нужно обновить их.Но если эти исходные сертификаты слишком старые или были сгенерированы вручную, они могут не включать некоторые обязательные поля, которые должны быть там.
В сообщении об ошибке ExtKeyUsage
относится к полю X509v3 Extended Key Usage
.
Вы можете проверить это, просмотрев свои сертификаты: задействованы 2 сертификата: apiserver-kubelet-client.crt
и front-proxy-client.crt
Они расположены на главных хостах в /etc/kubernetes/pki
.
Вы можете проверить их с помощью
# openssl x509 -in apiserver-kubelet-client.crt -text -noout
Если они не содержат следующего (ближе к концу), тогда kubeadm не сможет полностью обновить сертификат
(...)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Client Authentication
TL; DR;
Решение состоит в том, чтобы просто создать новые сертификаты с помощью следующей процедуры
######### Backup your certificates (just in case)
master01:/etc/kubernetes/pki# cp -a /etc/kubernetes/pki /root/backup_cert/
######### Delete incomplete certificates
master01:/etc/kubernetes/pki# rm apiserver-kubelet-client.*
master01:/etc/kubernetes/pki# rm front-proxy-client.*
######### Then recreate them
master01:/etc/kubernetes/pki# kubeadm init phase certs apiserver-kubelet-client
master01:/etc/kubernetes/pki# kubeadm init phase certs front-proxy-client
Теперь вы можете перезапустить процедуру обновления, которая должна быть в порядке.(Примечание: если ваш кластер был оставлен в состоянии, когда ваш первый мастер имеет состояние SchedulingDisabled, то не забудьте отменить привязку хоста, потому что kubespray playbook не исправит это)