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 rotatesubcommand:# 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:
- Establecer una sesión como el usuario student a
lab-#-masterexport LAB=Xssh student@lab-${LAB}-master - Cambiar al usuario
rootsudo -i - Habilitar PATH y KUBECONFIG para administrar el cluster.
export KUBECONFIG=/etc/rancher/rke2/rke2.yamlexport PATH=$PATH:/var/lib/rancher/rke2/bin - Para validar el estado de los certificados del cluster, podemos ejecutar el comando:
Podemos obtener información de un cerificado o de un listado modifcando el comando de la siguiente forma:
rke2 certificate checkrke2 certificate check --service etcd --service kubelet - Ejecute el comando para obtener información del componente 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.
rke2 certificate check --service etcd - 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} - Rotaremos únicamente los certificados relacionados al coponente etcd.
Se mostrará una salida similar a:
rke2 certificate rotate --service etcdAl ejecutar nuevamente el comando: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 certificatesLa salida del comando únicamente mostrará:rke2 certificate check --service etcdINFO[0000] Checking certificates for etcd - Procederemos a reiniciar el servicio de
rke2-server, esto puede demorar unos minutos.systemctl restart rke2-server - Tomaremos nuevamente nota de la fecha de expiración del certificado
CN=etcd-client.Al ejecutar nuevamnete el comando:EXPIRATION_NEW=$(rke2 certificate check --service etcd 2>&1 |grep -E --color -o "CN=etcd-client.*expires at.*") echo ${EXPIRATION_NEW}Se mostrarán todos los certificados cliente/servidor del componente con las nuevas fechas de expiración.rke2 certificate check --service etcd - 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} - 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} - Ejecutaremos el comando para rotar estos certificados:
Se mostrará una salida similar a:
rke2 certificate rotate --service etcd --service kubeletINFO[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 - Procederemos a reiniciar el servicio de
rke2-server, esto puede demorar unos minutos.systemctl restart rke2-server - 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} - 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} - Rotaremos todos los certificados del nodo:
Se mostrará una salida similar a:
rke2 certificate rotateINFO[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 - Procederemos a reiniciar el servicio de
rke2-server, esto puede demorar unos minutos.systemctl restart rke2-server - Puede validar las nuevas fechas de expiración ejecutando:
rke2 certificate check - 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.