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.
En este artículo se explica cómo administrar y rotar certificados en clústeres de Azure Kubernetes Service (AKS) para mantener una comunicación segura entre los componentes y garantizar el cumplimiento.
Prerequisites
- CLI de Azure versión 2.0.77 o posterior. Compruebe la versión mediante el
az --versioncomando . Para la instalación o la actualización, consulte Instalación de la CLI de Azure.
Comprobación de la fecha de expiración del certificado de la entidad de certificación (CA) del clúster
Compruebe la fecha de expiración del certificado de entidad de certificación del clúster mediante el kubectl config view comando .
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 de VMSS
Compruebe la fecha de expiración del certificado del nodo del agente del conjunto de escalado de máquinas virtuales usando el comando az vmss run-command invoke.
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"
Comprobación de la fecha de expiración del certificado de máquina virtual independiente
Compruebe la fecha de expiración de una máquina virtual independiente mediante el az vm run-command invoke comando .
az vm run-command invoke \
--resource-group <resource-group> \
--name <vm-name> \
--command-id RunShellScript \
--scripts "openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate" \
--query "value[0].message"
Rotar manualmente los certificados de la CA del clúster
Al rotar el certificado de entidad de certificación del clúster, también se actualizan los siguientes certificados secundarios:
- Tokens de cuenta de servicio (SA)
- Certificados de servidor de API
- Certificados de cliente de Kubelet
- Certificados de servidor kubelet (si la rotación de certificados de servicio de kubelet está habilitada en el clúster)
Warning
Al rotar los certificados con az aks rotate-certs, se vuelven a crear todos los nodos, conjuntos de escalado de máquinas virtuales y discos. Este proceso puede provocar hasta 30 minutos de tiempo de inactividad para el clúster de AKS. Si el comando falla antes de completarse, use el comando az aks show para verificar que el estado del clúster muestre Rotación de certificados. Si el clúster se encuentra en un estado de error, vuelva a ejecutar az aks rotate-certs para rotar los certificados otra vez.
Conéctese a su clúster usando el comando
az aks get-credentials.az aks get-credentials --resource-group <resource-group> --name <cluster-name>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>Compruebe que los certificados antiguos ya no son válidos usando cualquier comando
kubectl, comokubectl get nodes.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")
Actualización de kubectl certificados de cliente
Actualice el certificado de cliente
kubectlmediante el comandoaz aks get-credentialscon el indicador--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 nodesNote
Si tiene algún servicio que se ejecute sobre AKS, es posible que también tenga que actualizar los certificados.
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-ca comando .
kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca
Comprobación de que kubelet pasa por el proceso de arranque de TLS
Al habilitar esta característica, cada kubelet que ejecuta los nodos pasa por el proceso de arranque de TLS de servicio.
Compruebe que el proceso de arranque se está llevando a cabo mediante el kubectl get comando para obtener los objetos CSR actuales dentro del clúster.
kubectl get csr --field-selector=spec.signerName=kubernetes.io/kubelet-serving
Todas las CSR en servicio están en estado Approved,Issued, lo que indica que la solicitud de firma de certificado fue aprobada y que se emitió un certificado firmado. Los CSR activos tienen un nombre de firmante de kubernetes.io/kubelet-serving. Por ejemplo:
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
csr-1ab2c 113s kubernetes.io/kube-apiserver-client-kubelet system:bootstrap:abcd1e none Approved,Issued
csr-defgh 111s kubernetes.io/kubelet-serving system:node:akswinp1000000 none Approved,Issued
csr-ij3kl 46m kubernetes.io/kubelet-serving system:node:akswinp2000000 none Approved,Issued
csr-mn4op 46m kubernetes.io/kube-apiserver-client-kubelet system:bootstrap:ab1cde none Approved,Issued
Comprobación de que kubelet usa un certificado obtenido del arranque TLS del servidor
Confirme si el kubelet del nodo usa un certificado de servicio firmado por la ENTIDAD de certificación del clúster mediante el comando [kubectl debug][kubectl-debug] para examinar el contenido del directorio PKI de kubelet.
kubectl debug node/<node> -ti --image=mcr.microsoft.com/azurelinux/base/core:3.0 -- ls -l /host/var/lib/kubelet/kubelet-server-current.pem
Si existe un enlace simbólico kubelet-server-current.pem, el kubelet inicia y rota su propio certificado de servidor mediante el proceso de arranque de TLS, y está firmado por la autoridad de certificación del clúster.
Deshabilitación de la rotación de certificados de servicio de kubelet
Deshabilite la rotación del certificado de servicio de kubelet actualizando el grupo de nodos mediante el comando
az aks nodepool updatey especifique 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=trueRestablezca 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.
Contenido relacionado
Para más información sobre la seguridad de AKS, consulte los siguientes artículos: