Certifikatrotation i Azure Kubernetes Service (AKS)

Azure Kubernetes Service (AKS) använder certifikat för autentisering med många av dess komponenter. RBAC-aktiverade kluster som skapats efter mars 2022 aktiveras med automatisk rotation av certifikat. Du kan behöva rotera certifikaten regelbundet av säkerhets- eller principskäl. Du kan till exempel ha en princip för att rotera alla dina certifikat var 90:e dag.

Anteckning

Automatisk rotation av certifikat är endast aktiverat som standard för RBAC-aktiverade AKS-kluster.

Den här artikeln visar hur certifikatrotation fungerar i AKS-klustret.

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:n.
  • API-servern har en kluster-CA som signerar certifikat för enkelriktad kommunikation från API-servern till kubelets.
  • Varje kubelet skapar en begäran om certifikatsignering (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.

Anteckning

  • AKS-kluster som skapades 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 kommandot kubectl get nodes som visar ålder för dina nodpooler.

Kontrollera certifikatets förfallodatum

Kontrollera förfallodatum för klustercertifikat

  • Kontrollera förfallodatumet för klustercertifikatet med kommandot kubectl config view .

    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 -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örfallodatum för agentnodcertifikat för vm-skalningsuppsättning

  • Kontrollera förfallodatumet för vm-skalningsuppsättningens agentnodcertifikat med kommandot az vm 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 /etc/kubernetes/certs/apiserver.crt -noout -enddate" --query "value[0].message"
    

Automatisk rotation av certifikat

För att AKS ska kunna rotera icke-CA-certifikat automatiskt måste klustret ha TLS Bootstrapping, vilket är aktiverat som standard i alla Azure-regioner.

Anteckning

  • 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 starta roteringen 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.

Så här kontrollerar du om den aktuella agentnodpoolen är TLS Bootstrapping aktiverad?

  1. Kontrollera om TLS Bootstrapping är aktiverat i klustret genom att bläddra till en av 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.

    Anteckning

    Filsökvägen kan ändras allt eftersom Kubernetes-versioner utvecklas.

  2. 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, Virtual Machine Scale Sets och diskar och kan orsaka upp till 30 minuters stilleståndstid för AKS-klustret.

  1. Anslut till klustret med az aks get-credentials kommandot .

    az aks get-credentials -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME
    
  2. Rotera alla certifikat, certifikatutfärdare och SA:er i klustret med kommandot az aks rotate-certs .

    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 det kan du använda az aks show för att kontrollera att klustrets status är Certifikatrotering. Om klustret är i ett feltillstånd kör az aks rotate-certs du igen för att rotera certifikaten igen.

  3. Kontrollera att de gamla certifikaten inte längre är giltiga med något kubectl kommando, till exempel kubectl get nodes.

    kubectl get nodes
    

    Om du inte har uppdaterat de certifikat som används av kubectlvisas 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")
    
  4. Uppdatera certifikatet som används kubectl med kommandot az aks get-credentials med --overwrite-existing flaggan .

    az aks get-credentials -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME --overwrite-existing
    
  5. Kontrollera att certifikaten har uppdaterats med kommandot kubectl get .

    kubectl get nodes
    

    Anteckning

    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 automatiskt roterar klustercertifikat, certifikatutfärdare och certifikatutfärdare. Mer information finns i Metodtips för klustersäkerhet och uppgraderingar i Azure Kubernetes Service (AKS).