Skip to content

Adminitración de Certificados


Introducción

La gestión de certificados es un aspecto crucial en la administración de cualquier clúster de Kubernetes, incluyendo RKE2, ya que garantiza la seguridad, autenticidad y confiabilidad de las comunicaciones dentro del entorno. Los certificados permiten proteger la comunicación entre los diferentes componentes del clúster, como el servidor de la API, los nodos Worker y los servicios internos, a través de mecanismos de autenticación y cifrado.

En RKE2, la renovación y rotación de certificados son procesos clave que ayudan a mantener la seguridad a largo plazo y asegurar el correcto funcionamiento del clúster. Conocer los diferentes tipos de certificados, su función específica y cómo gestionar su ciclo de vida contribuye a mitigar riesgos de seguridad y simplificar la operación diaria del clúster. Este tema se enfocará en explicar los certificados utilizados por RKE2, sus propósitos, y las mejores prácticas para su manejo.


Objetivo

Objetivo General:

  • El objetivo de este tema es proporcionar a los administradores y usuarios de RKE2 una comprensión integral de la gestión de certificados dentro del clúster. Esto incluye conocer los diferentes tipos de certificados utilizados, su propósito y función en la seguridad de las comunicaciones, así como las mejores prácticas para su rotación y renovación. Al final de este tema, los participantes estarán capacitados para garantizar la integridad y seguridad de los certificados, contribuyendo a un clúster seguro, confiable y bien administrado.

Certificados Cliente / Servidor

Los certificados de cliente y servidor de RKE2 son válidos durante 365 días a partir de su fecha de emisión. Cualquier certificado que haya expirado, o que esté dentro de los 90 días previos a su fecha de vencimiento, se renueva automáticamente cada vez que se inicia RKE2.

Certificado Uso en RKE2
admin Utilizado para la autenticación de clientes administrativos hacia el clúster.
api-server Certificado para asegurar las comunicaciones del servidor de la API de Kubernetes.
controller-manager Usado por el Controller Manager para gestionar los controladores del clúster.
scheduler Utilizado por el Scheduler para asignar pods a los nodos en el clúster.
rke2-controller Certificado para el controlador interno de RKE2.
rke2-server Utilizado para la comunicación segura del servidor RKE2.
cloud-controller Usado para la integración con controladores en la nube en entornos híbridos.
etcd Certificado que asegura la comunicación del clúster de etcd, el almacenamiento de datos clave-valor.
auth-proxy Utilizado para autenticar y reenviar solicitudes a través de proxies de autenticación.
kubelet Certificado para asegurar la comunicación del kubelet (agente en cada nodo) con el servidor.
kube-proxy Usado por kube-proxy para gestionar el reenvío de tráfico en el clúster de Kubernetes.

Rotación de Certificados de forma Manual

Para rotar todos los certificados cliente/servidor utilice el comando rke2 certificate rotate subcommand:

   # Detenet RKE2
   systemctl stop rke2-server

   # Rotar Certificados
   rke2 certificate rotate

   # Start RKE2
   systemctl start rke2-server
   ```
   Se pueden rotar de forma individual o por listado ejecutando:
   ```bash
   rke2 certificate rotate --service <SERVICE> --service <SERVICE>

Laboratorio para el Estudiante

Indicaciones:

En esta gúia el estudiante explorará el comportamiento del cluster de RKE2, relacionado a certificados cliente/servidor y rotará de forma manual cerfificados individuales, por lista y completos.

Rotación de Certificados Cliente/Servidor

Pasos:

  1. Establecer una sesión como el usuario student a lab-#-master
    export LAB=X
    
    ssh student@lab-${LAB}-master 
    
  2. Cambiar al usuario root
    sudo -i
    
  3. Habilitar PATH y KUBECONFIG para administrar el cluster.
    export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
    
    export PATH=$PATH:/var/lib/rancher/rke2/bin
    
  4. Para validar el estado de los certificados del cluster, podemos ejecutar el comando:
    rke2 certificate check
    
    Podemos obtener información de un cerificado o de un listado modifcando el comando de la siguiente forma:
    rke2 certificate check --service etcd --service kubelet
    
  5. Ejecute el comando para obtener información del componente etcd:
    rke2 certificate check --service etcd
    
    Note los certificados involucrados en el componentes. Exiten certificados para cliente, servidor y entidad certificadora. Los certificados cliente/servidor tiene una duración de 1 años, mientras que los certificados de la entidad certificadora son válidos por 10 años.
  6. Tomaremos nota de la fecha de expiración del certificado CN=etcd-client.
    EXPIRATION_OLD=$(rke2 certificate check --service etcd 2>&1 |grep -E --color -o "CN=etcd-client.*expires at.*")
    echo ${EXPIRATION_OLD}
    
  7. Rotaremos únicamente los certificados relacionados al coponente etcd.
    rke2 certificate rotate --service etcd
    
    Se mostrará una salida similar a:
    INFO[0000] Rotating certificates for etcd
    INFO[0000] Successfully backed up certificates to /var/lib/rancher/rke2/server/tls-XXXXX, please restart rke2 server or agent to rotate certificates
    
    Al ejecutar nuevamente el comando:
    rke2 certificate check --service etcd
    
    La salida del comando únicamente mostrará:
    INFO[0000] Checking certificates for etcd
    
  8. Procederemos a reiniciar el servicio de rke2-server, esto puede demorar unos minutos.
    systemctl restart rke2-server
    
  9. Tomaremos nuevamente nota de la fecha de expiración del certificado CN=etcd-client.
    EXPIRATION_NEW=$(rke2 certificate check --service etcd 2>&1 |grep -E --color -o "CN=etcd-client.*expires at.*")
    echo ${EXPIRATION_NEW}
    
    Al ejecutar nuevamnete el comando:
    rke2 certificate check --service etcd
    
    Se mostrarán todos los certificados cliente/servidor del componente con las nuevas fechas de expiración.
  10. Compararemos la fecha anterior con la fecha actualizada para el certificado de CN=etcd-client.
    echo "Rotación del certificado CN=etcd-client (como muestra)"
    echo ${EXPIRATION_OLD}
    echo ${EXPIRATION_NEW}
    
  11. Rotaremos los certificados relacionados al coponente etcd y kubelet. Para el ejemplo exploraremos la fecha de expiración del certificado CN=system:node:$(hostname -f).
    EXPIRATION_OLD_KUBELET=$(rke2 certificate check --service kubelet 2>&1 |grep -E --color -o "CN=system:node:$(hostname -f).*expires at.*")
    echo ${EXPIRATION_OLD_KUBELET}
    
  12. Ejecutaremos el comando para rotar estos certificados:
    rke2 certificate rotate --service etcd --service kubelet
    
    Se mostrará una salida similar a:
    INFO[0000] Rotating certificates for etcd
    INFO[0000] Rotating certificates for kubelet
    INFO[0000] Successfully backed up certificates to /var/lib/rancher/rke2/server/tls-XXXX, please restart rke2 server or agent to rotate certificates
    
  13. Procederemos a reiniciar el servicio de rke2-server, esto puede demorar unos minutos.
    systemctl restart rke2-server
    
  14. Tomaremos nuevamente la fecha de expiración del certificado CN=system:node:$(hostname -f).
    EXPIRATION_NEW_KUBELET=$(rke2 certificate check --service kubelet 2>&1 |grep -E --color -o "CN=system:node:$(hostname -f).*expires at.*")
    echo ${EXPIRATION_NEW_KUBELET}
    
  15. Compararemos la fecha anterior con la fecha actualizada para el certificado de CN=system:node:$(hostname -f).
    echo "Rotación del certificado CN=etcd-client (como muestra)"
    echo ${EXPIRATION_OLD_KUBELET}
    echo ${EXPIRATION_NEW_KUBELET}
    
  16. Rotaremos todos los certificados del nodo:
    rke2 certificate rotate
    
    Se mostrará una salida similar a:
    INFO[0000] Server detected, rotating agent and server certificates
    INFO[0000] Rotating dynamic listener certificate
    INFO[0000] Rotating certificates for cloud-controller
    INFO[0000] Rotating certificates for controller-manager
    INFO[0000] Rotating certificates for supervisor
    INFO[0000] Rotating certificates for kubelet
    INFO[0000] Rotating certificates for api-server
    INFO[0000] Rotating certificates for admin
    INFO[0000] Rotating certificates for auth-proxy
    INFO[0000] Rotating certificates for etcd
    INFO[0000] Rotating certificates for scheduler
    INFO[0000] Rotating certificates for kube-proxy
    INFO[0000] Rotating certificates for rke2-controller
    INFO[0000] Successfully backed up certificates to /var/lib/rancher/rke2/server/tls-XXXX, please restart rke2 server or agent to rotate certificates
    
  17. Procederemos a reiniciar el servicio de rke2-server, esto puede demorar unos minutos.
    systemctl restart rke2-server
    
  18. Puede validar las nuevas fechas de expiración ejecutando:
    rke2 certificate check
    
  19. Compruebe el funcionamiento de cluster:
    kubectl version
    kubectl get nodes
    

Recursos Adicionales


Conclusión

La gestión y rotación de certificados es un proceso fundamental para mantener la seguridad y el correcto funcionamiento de un clúster RKE2. En este tema, hemos explorado los certificados de cliente y servidor, destacando su importancia para proteger las comunicaciones dentro del clúster. Además, aprendimos a realizar la rotación de certificados de manera manual, permitiendo una mayor flexibilidad y control en escenarios específicos.

El laboratorio proporcionó una experiencia práctica para que los estudiantes comprendan cómo ejecutar la rotación de certificados, asegurando la continuidad y confiabilidad del clúster a medida que cambian los certificados en uso. Esto prepara a los administradores para enfrentar desafíos en la seguridad del clúster con confianza y eficacia.

Para obtener más información y continuar mejorando tus habilidades, te invitamos a explorar los recursos adicionales proporcionados.