Dela via


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?

  1. 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.

  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, vm-skalningsuppsättningar och diskar och kan orsaka upp till 30 minuters stilleståndstid för AKS-klustret.

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

    az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
    
  2. 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ända az aks show för att kontrollera att statusen för klustret ä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 --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --overwrite-existing
    
  5. 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).