Rotazione dei certificati nel servizio Azure Kubernetes
Il servizio Azure Kubernetes usa i certificati per l'autenticazione con molti dei rispettivi componenti. I cluster con il controllo degli accessi in base al ruolo di Azure creati dopo marzo 2022 sono abilitati con la rotazione automatica dei certificati. È possibile che si debbano ruotare periodicamente tali certificati per motivi di sicurezza o criteri. Ad esempio, è possibile avere un criterio per ruotare tutti i certificati ogni 90 giorni.
Nota
La rotazione automatica dei certificati è abilitata per impostazione predefinita per i cluster del servizio Azure Kubernetes abilitati solo per il controllo degli accessi in base al ruolo.
Questo articolo illustra il funzionamento della rotazione dei certificati nel cluster del servizio Azure Kubernetes.
Operazioni preliminari
Questo articolo richiede l'interfaccia della riga di comando di Azure 2.0.77 o versione successiva. Eseguire az --version
per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.
Certificati del servizio Azure Kubernetes, autorità di certificazione e account di servizio
Il servizio Azure Kubernetes genera e usa i certificati, le autorità di certificazione (CA) e gli account del servizio seguenti (SA):
- Il server API del servizio Azure Kubernetes crea una CA denominata CA del cluster.
- Il server API ha una CA del cluster, che firma i certificati per la comunicazione unidirezionale dal server API ai kubelet.
- Ogni kubelet crea una richiesta di firma del certificato (CSR), firmata dalla CA del cluster, per la comunicazione dal kubelet al server API.
- L'aggregatore API usa la CA del cluster per rilasciare certificati per la comunicazione con altre API. L'aggregatore API inoltre può avere la propria CA per il rilascio di tali certificati, ma attualmente usa la CA del cluster.
- Ogni nodo usa un token Software Assurance, firmato dalla CA del cluster.
- Il client
kubectl
ha un certificato per la comunicazione con il cluster del servizio Azure Kubernetes.
Microsoft gestisce tutti i certificati indicati in questa sezione, ad eccezione del certificato del cluster.
Nota
- I cluster del servizio Azure Kubernetes creati prima di maggio 2019 hanno certificati che scadono dopo due anni.
- I cluster del servizio Azure Kubernetes creati dopo maggio 2019 hanno certificati di CA cluster che scadono dopo 30 anni.
È possibile verificare quando il cluster è stato creato usando il comando kubectl get nodes
, che mostra l'età dei pool di nodi.
Controllare le date di scadenza del certificato
Controllare la data di scadenza del certificato del cluster
Controllare la data di scadenza del certificato del cluster usando il comando
kubectl config view
.kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
Controllare la data di scadenza del certificato del server API
Controllare la data di scadenza del certificato del server API usando il comando seguente
curl
.curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire
Controllare la data di scadenza del certificato del nodo dell'agente VMAS
Controllare la data di scadenza del certificato del nodo dell’agente VMAS usando il comando
az vm run-command invoke
.az vm run-command invoke --resource-group MC_rg_myAKSCluster_region --name vm-name --command-id RunShellScript --query 'value[0].message' -otsv --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate"
Controllare la scadenza del certificato per il nodo agente del set di scalabilità di macchine virtuali
Controllare la data di scadenza del certificato del nodo dell’agente del set di scalabilità di macchine virtuali usando il comando
az vmss run-command invoke
.az vmss run-command invoke --resource-group "MC_rg_myAKSCluster_region" --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"
Rotazione automatica dei certificati
Affinché il servizio Azure Kubernetes ruoti automaticamente i certificati non CA, il cluster deve avere Bootstrap TLS, che è abilitato per impostazione predefinita in tutte le aree di Azure.
Nota
- Se si dispone di un cluster esistente, è necessario aggiornare tale cluster per abilitare la rotazione automatica dei certificati.
- Non disabilitare Bootstrap per mantenere la rotazione automatica abilitata.
- Se il cluster si trova in uno stato arrestato durante la rotazione automatica del certificato, vengono ruotati solo i certificati del piano di controllo. In questo caso, è necessario ricreare il pool di nodi dopo la rotazione del certificato per avviare la rotazione del certificato del pool di nodi.
Per tutti i cluster del servizio Azure Kubernetes creati o aggiornati dopo marzo 2022, il servizio Azure Kubernetes ruota automaticamente i certificati non CA nel piano di controllo e nei nodi agente entro l'80% del tempo valido del certificato client prima che scadano senza tempi di inattività per il cluster.
Come verificare se il pool di nodi dell'agente corrente è abilitato per il Bootstrap TLS?
Verificare se il Bootstrap TLS del cluster è abilitato passando a uno dei percorsi seguenti:
- In un nodo Linux: /var/lib/kubelet/bootstrap-kubeconfig o /host/var/lib/kubelet/bootstrap-kubeconfig
- In un nodo Windows: C:\k\bootstrap-config
Per altre informazioni, vedere Connettersi ai nodi del cluster del servizio Azure Kubernetes per la risoluzione dei problemi e le attività di manutenzione.
Nota
Il percorso del file può cambiare man mano che le versioni di Kubernetes si evolvono.
Dopo aver configurato un'area, creare un nuovo cluster o aggiornare un cluster esistente per impostare la rotazione automatica per il certificato del cluster. È necessario aggiornare il piano di controllo e il pool di nodi per abilitare questa funzionalità.
Ruotare manualmente i certificati del cluster
Avviso
La rotazione dei certificati tramite az aks rotate-certs
ricrea tutti i nodi, i set di scalabilità di macchine virtuali e i dischi e può causare fino a 30 minuti di inattività per il cluster del servizio Azure Kubernetes.
Connettersi al cluster usando il comando
az aks get-credentials
.az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Ruotare tutti i certificati, CA e autorità di certificazione nel cluster usando il comando
az aks rotate-certs
.az aks rotate-certs --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Importante
Il completamento di
az aks rotate-certs
può richiedere fino a 30 minuti. Se il comando ha esito negativo prima del completamento, usareaz aks show
per verificare che lo stato del cluster sia Rotazione del certificato. Se il cluster si trova in uno stato di errore, eseguire di nuovoaz aks rotate-certs
per ruotare nuovamente i certificati.Verificare che i certificati precedenti non siano più validi usando un comando
kubectl
qualsiasi, ad esempiokubectl get nodes
.kubectl get nodes
Se i certificati usati da
kubectl
non sono stati aggiornati, viene visualizzato un errore simile all'output di esempio seguente: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")
Aggiornare il certificato usato da
kubectl
con il comandoaz aks get-credentials
con il flag--overwrite-existing
.az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --overwrite-existing
Verificare che i certificati siano stati aggiornati usando il comando
kubectl get
.kubectl get nodes
Nota
Se si dispone di servizi eseguiti sul servizio Azure Kubernetes, potrebbe essere necessario aggiornare i certificati.
Passaggi successivi
Questo articolo ha illustrato come ruotare manualmente e automaticamente i certificati del cluster, le CA e le autorità di certificazione. Per altre informazioni, vedere Procedure consigliate per la sicurezza e gli aggiornamenti dei cluster nel servizio Azure Kubernetes.
Azure Kubernetes Service