Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure Kubernetes Service (AKS) usa certificados para la autenticación con muchos de sus componentes. Debe rotar periódicamente esos certificados por motivos de seguridad o directiva. En este artículo, se muestra cómo funciona la rotación de certificados en el clúster de AKS.
Prerrequisitos
En este artículo se necesita la CLI de Azure versión 2.0.77 o posterior. Compruebe la versión con el comando
az --version. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.Configure
kubectlpara conectarse al clúster de AKS mediante elaz aks get-credentialscomando :az aks get-credentials --resource-group <resource-group> --name <cluster-name>
Certificados de AKS, entidades de certificación y cuentas de servicio
AKS genera y usa los siguientes certificados, entidades de certificación (CA) y cuentas de servicio (SA):
- El servidor de API de AKS crea una ENTIDAD de certificación denominada CA de clúster, que firma certificados para la comunicación unidireccional desde el servidor de API a kubelet.
- Cada kubelet crea una solicitud de firma de certificado (CSR), que firma la CA del clúster, para la comunicación del kubelet con el servidor de API.
- El agregador de API usa la CA del clúster para emitir certificados para la comunicación con otras API. El agregador de API también puede tener su propia CA para emitir esos certificados, pero actualmente usa la CA del clúster.
- Cada nodo de agente utiliza un token de SA, que la autoridad de certificación del clúster firma.
- El cliente
kubectltiene un certificado para comunicarse con el clúster de AKS.
Microsoft mantiene todos los certificados mencionados en esta sección, excepto el certificado de clúster.
Fechas de expiración del certificado
Importante
La fecha de expiración de los certificados depende de cuándo se creó el clúster de AKS:
- Los clústeres de AKS creados antes de mayo de 2019 tienen certificados que caducan a los dos años.
- Los clústeres de AKS creados después de mayo de 2019 tienen certificados de entidad de certificación de clúster que caducan a los 30 años.
Puede comprobar cuándo se creó el clúster mediante el comando kubectl get nodes, que muestra el estado de los nodos del agente Age.
Comprobar la fecha de expiración del certificado del clúster
Compruebe la fecha de expiración del certificado de clúster mediante el comando
kubectl config view.kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
Comprobar la fecha de expiración del certificado del servidor API
Compruebe la fecha de expiración del certificado del servidor de API mediante el comando siguiente
curl:curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire
Comprobación de la fecha de expiración del certificado del nodo del agente (VM) de la máquina virtual
Compruebe la fecha de expiración del certificado de nodo del agente de máquina virtual mediante el
az vm run-command invokecomando .Parámetros clave en este comando:
--resource-group <node-resource-group>: el grupo de recursos que contiene el nodo del agente de máquina virtual. ---name <vm-name>: el nombre del nodo del agente de máquina virtual. ---scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate": script que recupera la fecha de expiración del certificado de servidor de API ubicado en/etc/kubernetes/certs/apiserver.crt.az vm run-command invoke --resource-group <node-resource-group> --name <vm-name> --command-id RunShellScript --query 'value[0].message' -otsv --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate"
Comprobación de la expiración del certificado para el nodo del agente del conjunto de escalado de máquinas virtuales de Azure
Compruebe la fecha de expiración del certificado del nodo del agente del conjunto de escalado de máquinas virtuales de Azure mediante el
az vmss run-command invokecomando .Parámetros clave en este comando:
--resource-group <node-resource-group>: el grupo de recursos que contiene el nodo del agente del conjunto de escalado de máquinas virtuales de Azure. ---name <vmss-name>: nombre del conjunto de escalado de máquinas virtuales de Azure. ---instance-id 1: el identificador de instancia del nodo del agente del conjunto de escalado de máquinas virtuales de Azure. ---scripts "openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate": script que recupera la fecha de expiración del certificado de cliente kubelet ubicado en/var/lib/kubelet/pki/kubelet-client-current.pem.az vmss run-command invoke --resource-group <node-resource-group> --name <vmss-name> --command-id RunShellScript --instance-id 1 --scripts "openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate" --query "value[0].message"
Rotación manual de los certificados del clúster
Rote todos los certificados, CA y SA de su clúster usando el comando
az aks rotate-certs.az aks rotate-certs --resource-group <resource-group> --name <cluster-name>Importante
El comando
az aks rotate-certsvuelve a crear todos sus nodos de agente, Virtual Machine Scale Sets de Azure y discos. Este comando también puede provocar hasta 30 minutos de tiempo de inactividad para el clúster de AKS. Si se produce un error en el comando antes de completarse, use el comando [az aks show][az-aks-show] para comprobar que el estado del clúster esCertificate Rotating. Si el clúster está en estado de error, vuelva a ejecutar elaz aks rotate-certscomando para volver a rotar los certificados.Compruebe que los certificados antiguos ya no son válidos mediante ningún
kubectlcomando. En el ejemplo siguiente se usa elkubectl get nodescomando :kubectl get nodesSi no actualizó los certificados usados por
kubectl, verá un error similar al siguiente resultado de ejemplo:Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "ca")Actualice el certificado usado por
kubectlusando el comandoaz aks get-credentialscon la marca--overwrite-existing.az aks get-credentials --resource-group <resource-group> --name <cluster-name> --overwrite-existingCompruebe que los certificados se actualizan mediante el
kubectl getcomando .kubectl get nodes
Si tiene algún servicio que se ejecute sobre AKS, es posible que tenga que actualizar también sus certificados.
Rotar el certificado de servicio del kubelet
Cuando se rota el certificado de servicio del kubelet, AKS permite el arranque de seguridad de la capa de transporte (TLS) del servidor kubelet tanto para el arranque inicial como para la rotación de certificados de servicio firmados por la CA del clúster.
Limitaciones de la rotación de certificados de servicio de kubelet
- Se admite en la versión 1.27 y posteriores de Kubernetes.
- No se admite cuando el grupo de nodos usa una instantánea del grupo de nodos basada en cualquier imagen de nodo anterior a
202501.12.0. - Esta característica no se puede habilitar manualmente. La rotación de certificados de servicio de Kubelet está habilitada de forma predeterminada en los grupos de nodos existentes cuando realizan su primera actualización a cualquier versión 1.27 o posterior de Kubernetes. La rotación de certificados de servicio de Kubelet está habilitada de forma predeterminada en nuevos grupos de nodos mediante kubernetes versión 1.27 o posterior. Para ver si la rotación de certificados de servicio de kubelet está habilitada en su región, compruebe las versiones de AKS.
Comprobación de que la rotación de certificados de servicio de kubelet está habilitada
A cada nodo con la característica habilitada se le asigna automáticamente la etiqueta kubernetes.azure.com/kubelet-serving-ca=cluster.
Compruebe que las etiquetas se establecen mediante el
kubectl get nodes -L kubernetes.azure.com/kubelet-serving-cacomando .kubectl get nodes -L kubernetes.azure.com/kubelet-serving-caLa salida debe mostrar la etiqueta
kubernetes.azure.com/kubelet-serving-cacon el valorclusterde cada nodo del agente.
Verifique que la inicialización TLS de kubelet está funcionando
Compruebe que el proceso de arranque se está llevando a cabo mediante el
kubectl getcomando .kubectl get csr --field-selector=spec.signerName=kubernetes.io/kubelet-servingEn la salida, todos los CSR de servicio deben estar en el estado
Approved,Issued, lo que indica que el CSR fue aprobado y se le emitió un certificado firmado. Los CSR activos tienen un nombre de firmante dekubernetes.io/kubelet-serving. Por ejemplo:NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION csr-1ab2c 113s kubernetes.io/kube-apiserver-client-kubelet system:bootstrap:uoxr9r none Approved,Issued csr-defgh 111s kubernetes.io/kubelet-serving system:node:akswinp7000000 none Approved,Issued csr-ij3kl 46m kubernetes.io/kubelet-serving system:node:akswinp6000000 none Approved,Issued csr-mn4op 46m kubernetes.io/kube-apiserver-client-kubelet system:bootstrap:ho7zyu none Approved,Issued
Comprobación de que kubelet usa un certificado obtenido del arranque TLS del servidor
Confirme que kubelet utiliza un certificado de servicio firmado por la CA del clúster mediante el comando
kubectl debug.kubectl debug node/<node> -ti --image=mcr.microsoft.com/azurelinux/base/core:3.0 -- ls -l /host/var/lib/kubelet/kubelet-server-current.pemSi un vínculo simbólico
kubelet-server-current.pemexiste, entonces el kubelet arrancó/rotó su propio certificado de servicio, y la CA del clúster lo firmó.
Deshabilitación de la rotación de certificados de servicio de kubelet
Deshabilite la rotación de certificados de kubelet al actualizar el grupo de nodos con el comando
az aks nodepool updatecon la etiquetaaks-disable-kubelet-serving-certificate-rotation=true.az aks nodepool update --cluster-name <cluster-name> --resource-group <resource-group> --name <node-pool-name> --tags aks-disable-kubelet-serving-certificate-rotation=true
- Restablezca la imagen inicial de sus nodos utilizando una actualización de imagen de nodo o escalando el grupo a cero instancias y luego nuevamente al valor deseado.
Autorotación de los certificados
Tenga en cuenta las siguientes consideraciones al usar la autorotación de certificados:
- Si tiene un clúster existente, debe actualizar ese clúster para habilitar la rotación automática de certificados.
- No deshabilite TLS Bootstrap para mantener habilitada la habilitación automática de certificados.
- Si el clúster se encuentra en estado detenido durante la rotación automática de certificados, solo se rotan los certificados del plano de control. En este caso, debe volver a crear el grupo de nodos después de la rotación de certificados para iniciar la rotación de certificados del grupo de nodos.
- En el caso de los clústeres de AKS creados o actualizados después de marzo de 2022, AKS rota automáticamente los certificados que no son de CA en el plano de control y en los nodos del agente dentro de 80% del tiempo válido del certificado de cliente antes de que expiren sin tiempo de inactividad para el clúster.
Verificar que el arranque TLS esté habilitado en el grupo de nodos del agente actual
Compruebe que el clúster tiene habilitado TLS Bootstrapping; para ello, navegue a una de las siguientes rutas de acceso:
-
En un nodo de Linux:
/var/lib/kubelet/bootstrap-kubeconfigo/host/var/lib/kubelet/bootstrap-kubeconfig -
En un nodo de Windows:
C:\k\bootstrap-config
para más información, consulte Conexión a los nodos de clúster de Azure Kubernetes Service (AKS) para mantenimiento o solución de problemas.
Nota
La ruta de acceso del archivo puede cambiar a medida que evolucionan las versiones de Kubernetes.
-
En un nodo de Linux:
Una vez configurada una región, cree un nuevo clúster o actualice un clúster existente para configurar la rotación automática de certificados para el certificado del clúster. Debe actualizar el plano de control y el grupo de nodos para habilitar esta característica.