Solución:
Creo que necesitas volver a generar el certificado de apiserver. /etc/kubernetes/pki/apiserver.crt
puede ver la fecha de vencimiento actual como esta.
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
Not Before: Dec 20 14:32:00 2017 GMT
Not After : Dec 20 14:32:00 2018 GMT
Estos son los pasos que utilicé para regenerar los certificados en el clúster v1.11.5. pasos compilados desde aquí https://github.com/kubernetes/kubeadm/issues/581
para comprobar la fecha de caducidad de todos los certificados:
find /etc/kubernetes/pki/ -type f -name "*.crt" -print|egrep -v 'ca.crt$'|xargs -L 1 -t -i bash -c 'openssl x509 -noout -text -in {}|grep After'
Renovar el certificado en el nodo principal.
*) Renovar certificado
mv /etc/kubernetes/pki/apiserver.key /etc/kubernetes/pki/apiserver.key.old
mv /etc/kubernetes/pki/apiserver.crt /etc/kubernetes/pki/apiserver.crt.old
mv /etc/kubernetes/pki/apiserver-kubelet-client.crt /etc/kubernetes/pki/apiserver-kubelet-client.crt.old
mv /etc/kubernetes/pki/apiserver-kubelet-client.key /etc/kubernetes/pki/apiserver-kubelet-client.key.old
mv /etc/kubernetes/pki/front-proxy-client.crt /etc/kubernetes/pki/front-proxy-client.crt.old
mv /etc/kubernetes/pki/front-proxy-client.key /etc/kubernetes/pki/front-proxy-client.key.old
kubeadm alpha phase certs apiserver --config /root/kubeadm-kubetest.yaml
kubeadm alpha phase certs apiserver-kubelet-client
kubeadm alpha phase certs front-proxy-client
mv /etc/kubernetes/pki/apiserver-etcd-client.crt /etc/kubernetes/pki/apiserver-etcd-client.crt.old
mv /etc/kubernetes/pki/apiserver-etcd-client.key /etc/kubernetes/pki/apiserver-etcd-client.key.old
kubeadm alpha phase certs apiserver-etcd-client
mv /etc/kubernetes/pki/etcd/server.crt /etc/kubernetes/pki/etcd/server.crt.old
mv /etc/kubernetes/pki/etcd/server.key /etc/kubernetes/pki/etcd/server.key.old
kubeadm alpha phase certs etcd-server --config /root/kubeadm-kubetest.yaml
mv /etc/kubernetes/pki/etcd/healthcheck-client.crt /etc/kubernetes/pki/etcd/healthcheck-client.crt.old
mv /etc/kubernetes/pki/etcd/healthcheck-client.key /etc/kubernetes/pki/etcd/healthcheck-client.key.old
kubeadm alpha phase certs etcd-healthcheck-client --config /root/kubeadm-kubetest.yaml
mv /etc/kubernetes/pki/etcd/peer.crt /etc/kubernetes/pki/etcd/peert.crt.old
mv /etc/kubernetes/pki/etcd/peer.key /etc/kubernetes/pki/etcd/peer.key.old
kubeadm alpha phase certs etcd-peer --config /root/kubeadm-kubetest.yaml
*) Backup old configuration files
mv /etc/kubernetes/admin.conf /etc/kubernetes/admin.conf.old
mv /etc/kubernetes/kubelet.conf /etc/kubernetes/kubelet.conf.old
mv /etc/kubernetes/controller-manager.conf /etc/kubernetes/controller-manager.conf.old
mv /etc/kubernetes/scheduler.conf /etc/kubernetes/scheduler.conf.old
kubeadm alpha phase kubeconfig all --config /root/kubeadm-kubetest.yaml
mv $HOME/.kube/config .$HOMEkube/config.old
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
chmod 777 $HOME/.kube/config
export KUBECONFIG=.kube/config
Reinicie el nodo y verifique los registros de etcd, kubeapi y kubelet.
Nota:
Recuerde actualizar su archivo kubeconfig de trabajo de CI / CD. Si está utilizando el comando helm, pruebe eso también.
Cada nodo dentro del clúster de Kubernetes contiene un archivo de configuración para ejecutar kubelet … /etc/kubernetes/kubelet.conf
… y este archivo es generado automáticamente por kubeadm. Durante esta autogeneración, kubeadm usos /etc/kubernetes/ca.key
para crear un archivo específico de nodo, /etc/kubernetes/kubelet.conf
, dentro de las cuales hay dos piezas muy importantes … datos-certificado-cliente y datos-clave-cliente. Mi proceso de pensamiento original me llevó a creer que necesitaba encontrar el archivo de certificado y el archivo de clave correspondientes, renovar esos archivos, convertir ambos a base64 y usar esos valores dentro de kubelet.conf
archivos en todo el clúster … este pensamiento no era correcto.
En cambio, la solución fue usar kubeadm para regenerar kubectl.conf
en todos los nodos, así como admin.conf
, controller-manager.conf
, y scheduler.conf
en el nodo principal del clúster. Necesitarás /etc/kubernetes/pki/ca.key
en cada nodo para que sus archivos de configuración incluyan datos válidos para datos-certificado-cliente y datos-clave-cliente.
Consejo profesional: utilice el --apiserver-advertise-address
parámetro para asegurarse de que sus nuevos archivos de configuración contienen la dirección IP correcta del nodo que aloja el kube-apiserver Servicio.
Este tema también se analiza en:
- https://github.com/kubernetes/kubeadm/issues/581
- después de 1.15, la actualización de kubeadm renovará automáticamente los certificados.
- también 1.15 agregó un comando para verificar la caducidad del certificado en kubeadm
- Renovar kubernetes pki después de caducado
Kubernetes v1.15 proporciona documentos para “Gestión de certificados con kubeadm”:
- https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/
- Verifique la caducidad del certificado:
kubeadm alpha certs check-expiration
- Renovación automática de certificados:
- kubeadm renueva todos los certificados durante la actualización del plano de control.
- Renovación manual del certificado:
- Puede renovar sus certificados manualmente en cualquier momento con el
kubeadm alpha certs renew
mando. - Este comando realiza la renovación usando el certificado CA (o front-proxy-CA) y la clave almacenada en / etc / kubernetes / pki.
- Puede renovar sus certificados manualmente en cualquier momento con el
Para Kubernetes v1.14 Encuentro este procedimiento el más útil:
- https://stackoverflow.com/a/56334732/1147487
- Haga una copia de seguridad y vuelva a generar todos los certificados:
$ cd /etc/kubernetes/pki/
$ mv {apiserver.crt,apiserver-etcd-client.key,apiserver-kubelet-client.crt,front-proxy-ca.crt,front-proxy-client.crt,front-proxy-client.key,front-proxy-ca.key,apiserver-kubelet-client.key,apiserver.key,apiserver-etcd-client.crt} ~/
$ kubeadm init phase certs all --apiserver-advertise-address <IP>
- Haga una copia de seguridad y vuelva a generar todos los archivos kubeconfig:
$ cd /etc/kubernetes/
$ mv {admin.conf,controller-manager.conf,kubelet.conf,scheduler.conf} ~/
$ kubeadm init phase kubeconfig all
$ reboot
- copiar nuevo admin.conf:
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config