Certifikatrotation i Azure Kubernetes Service (AKS)
Azure Kubernetes Service (AKS) använder certifikat för autentisering med många av dess komponenter. Kluster med rollbaserad åtkomstkontroll i Azure (Azure RBAC) som skapades efter mars 2022 aktiveras med automatisk rotation av certifikat. Du kan behöva rotera certifikaten regelbundet av säkerhetsskäl eller av principskäl. Du kan till exempel ha en princip för att rotera alla dina certifikat var 90:e dag.
Kommentar
Automatisk rotation av certifikat aktiveras som standard endast för RBAC-aktiverade AKS-kluster.
Den här artikeln visar hur certifikatrotation fungerar i ditt AKS-kluster.
Innan du börjar
Den här artikeln kräver 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 (CA) och tjänstkonton (SA):
- AKS API-servern skapar en ca som kallas kluster-CA.
- API-servern har en kluster-CA som signerar certifikat för enkelriktad kommunikation från API-servern till kubelets.
- Varje kubelet skapar en certifikatsigneringsbegäran (CSR), som klustercertifikatutfärdaren signerar, 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 klustercertifikatutfärdaren.
- Varje nod använder en SA-token som kluster-CA:en signerar.
- Klienten
kubectl
har ett certifikat för kommunikation med AKS-klustret.
Microsoft underhåller alla certifikat som nämns i det här avsnittet, förutom klustercertifikatet.
Kommentar
- AKS-kluster som skapats före maj 2019 har certifikat som upphör att gälla efter två år.
- AKS-kluster som skapats efter maj 2019 har klustercertifikatutfärdarcertifikat som upphör att gälla efter 30 år.
Du kan kontrollera när klustret skapades med hjälp av kubectl get nodes
kommandot som visar ålder för dina nodpooler.
Kontrollera certifikatets förfallodatum
Kontrollera förfallodatum för klustercertifikat
Kontrollera förfallodatumet för klustercertifikatet med hjälp av
kubectl config view
kommandot .kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
Kontrollera förfallodatum för API-servercertifikat
Kontrollera förfallodatumet för API-servercertifikatet med hjälp av följande
curl
kommando.curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire
Kontrollera förfallodatum för VMAS-agentnodcertifikat
Kontrollera förfallodatumet för VMAS-agentnodcertifikatet med kommandot
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"
Kontrollera certifikatets giltighetstid för agentnoden för vm-skalningsuppsättningen
Kontrollera förfallodatumet för agentnodcertifikatet för vm-skalningsuppsättningen med kommandot
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"
Automatisk rotation av certifikat
För att AKS automatiskt ska rotera icke-CA-certifikat måste klustret ha TLS Bootstrapping, vilket är aktiverat som standard i alla Azure-regioner.
Kommentar
- Om du har ett befintligt kluster måste du uppgradera klustret för att aktivera automatisk rotation av certifikat.
- Inaktivera inte Bootstrap för att aktivera automatisk rotation.
- Om klustret är i ett stoppat tillstånd under den automatiska certifikatrotationen roteras endast kontrollplanscertifikaten. I det här fallet bör du återskapa nodpoolen efter certifikatrotationen för att initiera rotering av nodpoolens certifikat.
För aks-kluster som skapats eller uppgraderats efter mars 2022 roterar Azure Kubernetes Service automatiskt icke-CA-certifikat på både kontrollplanet och agentnoderna inom 80 % av klientcertifikatets giltiga tid innan de upphör att gälla utan avbrottstid för klustret.
Hur kontrollerar du om den aktuella agentnodpoolen är TLS Bootstrapping aktiverad?
Kontrollera om TLS Bootstrapping är aktiverat i klustret genom att bläddra till en till följande sökvägar:
- På en Linux-nod: /var/lib/kubelet/bootstrap-kubeconfig eller /host/var/lib/kubelet/bootstrap-kubeconfig
- På en Windows-nod: C:\k\bootstrap-config
Mer information finns i Ansluta till Azure Kubernetes Service-klusternoder för underhåll eller felsökning.
Kommentar
Filsökvägen kan ändras när Kubernetes-versioner utvecklas.
När en region har konfigurerats skapar du ett nytt kluster eller uppgraderar ett befintligt kluster för att ange automatisk rotation för klustercertifikatet. Du måste uppgradera kontrollplanet och nodpoolen för att aktivera den här funktionen.
Rotera klustercertifikaten manuellt
Varning
Om du roterar dina certifikat med hjälp az aks rotate-certs
av återskapas alla noder, vm-skalningsuppsättningar och diskar och kan orsaka upp till 30 minuters stilleståndstid för AKS-klustret.
Anslut till klustret med kommandot
az aks get-credentials
.az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Rotera alla certifikat, certifikatutfärdare och serviceavtal i klustret med hjälp av
az aks rotate-certs
kommandot .az aks rotate-certs --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Viktigt!
Det kan ta upp till 30 minuter att
az aks rotate-certs
slutföra. Om kommandot misslyckas innan du slutför det kan du användaaz aks show
för att kontrollera att statusen för klustret är Certifikatrotering. Om klustret är i ett feltillstånd köraz aks rotate-certs
du igen för att rotera certifikaten igen.Kontrollera att de gamla certifikaten inte längre är giltiga med något
kubectl
kommando, till exempelkubectl get nodes
.kubectl get nodes
Om du inte har uppdaterat de certifikat som används av
kubectl
visas ett fel som liknar följande exempelutdata: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
kubectl
med kommandotaz aks get-credentials
med--overwrite-existing
flaggan .az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --overwrite-existing
Kontrollera att certifikaten har uppdaterats med kommandot
kubectl get
.kubectl get nodes
Kommentar
Om du har tjänster som körs ovanpå AKS kan du behöva uppdatera deras certifikat.
Nästa steg
Den här artikeln visar hur du manuellt och automatiskt roterar klustercertifikat, certifikatutfärdare och serviceavtal. Mer information finns i Metodtips för klustersäkerhet och uppgraderingar i Azure Kubernetes Service (AKS).
Azure Kubernetes Service