Saltar al contenido

Kubernetes: certificado caducado

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.

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
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *