Rotera certifikat i Azure Kubernetes Service (AKS)
Azure Kubernetes Service (AKS) använder certifikat för autentisering med många av dess komponenter. Med jämna mellanrum kan du behöva rotera dessa certifikat av säkerhets- eller principskäl. Du kan till exempel ha en princip för att rotera alla certifikat var 90:e dag.
Den här artikeln visar hur du roterar certifikaten i ditt AKS-kluster.
Innan du börjar
Den här artikeln kräver att du kör Azure CLI version 2.0.77 eller senare. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
AKS-certifikat, certifikatutfärdare och tjänstkonton
AKS genererar och använder följande certifikat, certifikatutfärdare och tjänstkonton:
- AKS API-servern skapar en certifikatutfärdare (CA) som kallas klustercertifikatutfärdaren.
- API-servern har en kluster-CA som signerar certifikat för envägskommunikation från API-servern till kubelets.
- Varje kubelet skapar också en certifikatsigneringsförfrågan (CSR), som signeras av klustercertifikatutfärdaren, för kommunikation från kubelet till API-servern.
- API-aggregatorn använder klustercertifikatutfärdaren för att utfärda certifikat för kommunikation med andra API:er. API-aggregatorn kan också ha en egen certifikatutfärdare för att utfärda dessa certifikat, men den använder för närvarande kluster-CA:n.
- Varje nod använder en SA-token (tjänstkonto) som signeras av kluster-CA:n.
- Klienten
kubectlhar ett certifikat för att kommunicera med AKS-klustret.
Anteckning
AKS-kluster som skapats före maj 2019 har certifikat som upphör att gälla efter två år. Alla kluster som skapats efter maj 2019 eller ett kluster som har sina certifikat roterade har kluster-CA-certifikat som upphör att gälla efter 30 år. Alla andra AKS-certifikat, som använder klustercertifikatutfärdaren till för signering, upphör att gälla efter två år och roteras automatiskt under uppgraderingen av AKS-versionen. Använd för att se nodpoolens ålder för kubectl get nodes att kontrollera när klustret skapades.
Dessutom kan du kontrollera utgångsdatumet för klustrets certifikat. Följande bash-kommando visar till exempel information om klientcertifikatet för myAKSCluster-klustret i resursgruppen rg
kubectl config view --raw -o jsonpath="{.users[?(@.name == 'clusterUser_rg_myAKSCluster')].user.client-certificate-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
- Kontrollera förfallodatumet för apiservercertifikatet
curl https://{apiserver-fqdn} -k -v 2>&1 |grep expire
- Kontrollera förfallodatumet för certifikatet på VMAS-agentnoden
az vm run-command invoke -g MC_rg_myAKSCluster_region -n vm-name --command-id RunShellScript --query 'value[0].message' -otsv --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate"
- Kontrollera förfallodatumet för certifikatet på en VMSS-agentnod
az vmss run-command invoke -g MC_rg_myAKSCluster_region -n vmss-name --instance-id 0 --command-id RunShellScript --query 'value[0].message' -otsv --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate"
Automatisk rotering av certifikat
Azure Kubernetes Service automatiskt icke-ca-certifikat på både kontrollplanet och agentnoderna innan de upphör att gälla utan driftavbrott för klustret.
För att AKS ska rotera icke-CA-certifikat automatiskt måste klustret ha TLS-start. TLS-start är för närvarande tillgängligt i följande regioner:
- eastus2euap
- centraluseuap
- USA, västra centrala
- södrastorbritannien
- USA, östra
- australien, centrala
- australiensiskaste
Hur kontrollerar jag om den aktuella agentnodpoolen är TLS-start aktiverad?
Kontrollera om TLS Bootstrapping är aktiverat i klustret genom att bläddra till följande sökvägar. På en Linux-nod: /var/lib/kubelet/bootstrap-kubeconfig på en Windows-nod är det c:\k\bootstrap-config.
[Obs] Filsökvägen kan ändras i takt med att k8s-versionen utvecklas i framtiden.
Viktigt
När en region har konfigurerats skapar du antingen ett nytt kluster eller uppgraderar "az aks upgrade -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME" till ett befintligt kluster för rotation av automatiskt certifikat.
Begränsning
Automatisk certifikatrotation aktiveras inte i icke-rbac-kluster.
Rotera klustercertifikaten
Varning
Om du roterar certifikaten med återskapas alla noder och deras OS-diskar, vilket kan orsaka upp till az aks rotate-certs 30 minuters driftstopp för ditt AKS-kluster.
Använd az aks get-credentials för att logga in på ditt AKS-kluster. Det här kommandot laddar även ned och konfigurerar kubectl klientcertifikatet på den lokala datorn.
az aks get-credentials -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME
Använd az aks rotate-certs för att rotera alla certifikat, CERTIFIKAT och SAs i klustret.
az aks rotate-certs -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME
Viktigt
Det kan ta upp till 30 minuter att az aks rotate-certs slutföra. Om kommandot misslyckas innan du slutför använder du az aks show för att kontrollera att klustrets status är Certifikatroterande. Om klustret är i ett misslyckat tillstånd kör du om för az aks rotate-certs att rotera dina certifikat igen.
Kontrollera att de gamla certifikaten inte längre är giltiga genom att köra ett kubectl kommando. Eftersom du inte har uppdaterat de certifikat som kubectl används av visas ett fel. Ett exempel:
$ kubectl get no
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")
Uppdatera certifikatet som används av kubectl genom att köra az aks get-credentials .
az aks get-credentials -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME --overwrite-existing
Kontrollera att certifikaten har uppdaterats genom att köra kubectl ett kommando som nu kommer att lyckas. Ett exempel:
kubectl get no
Anteckning
Om du har några tjänster som körs ovanpå AKS kan du behöva uppdatera certifikat som är relaterade till dessa tjänster också.
Nästa steg
Den här artikeln visade hur du automatiskt roterar klustrets certifikat, CERTIFIKAT och SA: er. Du kan läsa Metodtips för klustersäkerhet och uppgraderingar i Azure Kubernetes Service (AKS) för mer information om metodtips för AKS-säkerhet.