Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come gestire e ruotare i certificati nei cluster Servizio Azure Kubernetes (AKS) per mantenere la comunicazione sicura tra i componenti e garantire la conformità.
Prerequisiti
- interfaccia della riga di comando di Azure versione 2.0.77 o successiva. Controlla la versione usando il comando
az --version. Per installare o aggiornare, vedere Installare interfaccia della riga di comando di Azure.
Controllare la data di scadenza del certificato dell'autorità di certificazione del cluster
Controllare la data di scadenza del certificato della CA del cluster usando il kubectl config view comando .
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 agente VMSS
Controllare la data di scadenza del certificato del nodo dell’agente del set di scalabilità di macchine virtuali utilizzando il 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"
Controllare la data di scadenza del certificato della macchina virtuale autonoma
Controllare la data di scadenza di una macchina virtuale autonoma usando il 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"
Ruotare manualmente i certificati CA del cluster
Quando si ruota il certificato ca del cluster, vengono aggiornati anche i certificati figlio seguenti:
- Token dell'account di servizio (SA)
- Certificati del server API
- Certificati client di Kubelet
- Certificati del server Kubelet (se la rotazione del certificato kubelet è abilitata nel cluster)
Avvertimento
La rotazione dei certificati tramite az aks rotate-certs ricrea tutti i nodi, i set di scalabilità di macchine virtuali e i dischi. Questo processo può causare fino a 30 minuti di inattività per il cluster del servizio Azure Kubernetes. Se il comando non riesce prima del completamento, usare il comando az aks show per verificare che lo stato del cluster mostri Certificate Rotating. Se il cluster si trova in uno stato di errore, eseguire di nuovo az aks rotate-certs per ruotare nuovamente i certificati.
Connettersi al cluster utilizzando il comando
az aks get-credentials.az aks get-credentials --resource-group <resource-group> --name <cluster-name>Ruotare tutti i certificati, le autorità di certificazione e gli account di servizio nel cluster utilizzando il comando
az aks rotate-certs.az aks rotate-certs --resource-group <resource-group> --name <cluster-name>Verificare che i certificati precedenti non siano più validi usando un comando
kubectlqualsiasi, ad esempiokubectl get nodes.kubectl get nodesSe i certificati usati da
kubectlnon 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 kubectl i certificati client
Aggiornare il certificato client
kubectlutilizzando il comandoaz aks get-credentialscon l'opzione--overwrite-existing.az aks get-credentials --resource-group <resource-group> --name <cluster-name> --overwrite-existingVerificare che i certificati vengano aggiornati usando il
kubectl getcomando .kubectl get nodesNote
Se si dispone di servizi eseguiti sul servizio Azure Kubernetes, potrebbe essere necessario aggiornare i certificati.
Verificare che la rotazione del certificato kubelet sia abilitata
A ogni nodo con la funzionalità abilitata viene assegnata automaticamente l'etichetta kubernetes.azure.com/kubelet-serving-ca=cluster. Verificare che le etichette siano impostate usando il kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca comando .
kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca
Verificare che kubelet esegua il processo di bootstrap TLS
Quando si abilita questa funzionalità, ogni kubelet che esegue i nodi passa attraverso il processo di bootstrap TLS.
Verifica che il processo di bootstrap sia effettivamente in esecuzione usando il comando kubectl get per ottenere gli oggetti CSR attualmente presenti nel cluster.
kubectl get csr --field-selector=spec.signerName=kubernetes.io/kubelet-serving
Tutti i CSR attivi si trovano nello stato Approved,Issued, il che indica che la richiesta di firma del certificato è stata approvata e che è stato rilasciato un certificato firmato. I CSR attivi hanno un nome firmatario kubernetes.io/kubelet-serving. Per esempio:
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
Verificare che kubelet usi un certificato ottenuto dal bootstrap TLS del server
Verificare se il kubelet del nodo usa un certificato di servizio firmato dalla CA del cluster usando il comando [kubectl debug][kubectl-debug] per esaminare il contenuto della directory PKI di 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
Se esiste un kubelet-server-current.pem collegamento simbolico, il kubelet inizializza tramite bootstrap e ruota il proprio certificato server attraverso il processo di bootstrap TLS, che è firmato dalla CA del cluster.
Disabilitare la rotazione dei certificati di servizio in kubelet
Disabilitare la rotazione del certificato in kubelet aggiornando il pool di nodi usando il
az aks nodepool updatecomando e specificando il tagaks-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=trueRiformatta i nodi usando un aggiornamento dell'immagine del nodo o ridimensionando il pool a zero istanze e poi ridimensionandolo di nuovo al valore desiderato.
Contenuti correlati
Per altre informazioni sulla sicurezza del servizio Azure Kubernetes, vedere gli articoli seguenti:
- Migliori pratiche per la sicurezza e gli aggiornamenti del cluster in Servizio Azure Kubernetes (AKS)
- Concetti di sicurezza per applicazioni e cluster in Servizio Azure Kubernetes (AKS)