Certificaten beheren en roteren in Azure Kubernetes Service (AKS)

In dit artikel wordt uitgelegd hoe u certificaten in Azure Kubernetes Service (AKS) clusters beheert en roteert om veilige communicatie tussen onderdelen te behouden en naleving te garanderen.

Prerequisites

  • Azure CLI versie 2.0.77 of hoger. Controleer uw versie met behulp van de az --version opdracht. Voor het installeren of upgraden, zie Azure CLI installeren.

De vervaldatum van het certificaat van de clustercertificeringsinstantie (CA) controleren

Controleer de vervaldatum van het ca-certificaat van het cluster met behulp van de kubectl config view opdracht.

kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity

Vervaldatum van API-servercertificaat controleren

Controleer de vervaldatum van het API-servercertificaat met behulp van de volgende curl opdracht:

curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire

Vervaldatum van vmSS-agentknooppuntcertificaat controleren

Controleer de vervaldatum van het knooppuntcertificaat van de virtuele-machineschaalset met behulp van de az vmss run-command invoke opdracht.

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"

Vervaldatum van zelfstandig VM-certificaat controleren

Controleer de vervaldatum van een zelfstandige VM met behulp van de az vm run-command invoke opdracht.

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"

Cluster-CA-certificaten handmatig roteren

Wanneer u het CA-certificaat van het cluster roteert, worden ook de volgende onderliggende certificaten vernieuwd:

  • Tokens voor serviceaccounts (SA)
  • API-servercertificaten
  • Kubelet-clientcertificaten
  • Servercertificaten van Kubelet (als certificaatrotatie voor Kubelet-servercertificaten is ingeschakeld op het cluster)

Warning

Als u uw certificaten vernieuwt met az aks rotate-certs, worden al uw knooppunten, schaalsets voor virtuele machines en schijven opnieuw gemaakt. Dit proces kan tot 30 minuten downtime veroorzaken voor uw AKS-cluster. Als de opdracht mislukt voordat deze is voltooid, gebruikt u de opdracht az aks show om te controleren of de clusterstatus Certificate Rotating aangeeft. Als het cluster zich in een mislukte staat bevindt, voert u az aks rotate-certs opnieuw uit om uw certificaten te vernieuwen.

  1. Maak verbinding met uw cluster met behulp van de az aks get-credentials opdracht.

    az aks get-credentials --resource-group <resource-group> --name <cluster-name>
    
  2. Roteren alle certificaten, CA's en SA's in uw cluster met behulp van de az aks rotate-certs opdracht.

    az aks rotate-certs --resource-group <resource-group> --name <cluster-name>
    
  3. Controleer of de oude certificaten niet meer geldig zijn met behulp van een kubectl opdracht, zoals kubectl get nodes.

    kubectl get nodes
    

    Als u de gebruikte certificaten van kubectl niet hebt bijgewerkt, ziet u een fout zoals in de volgende voorbeelduitvoer:

    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")
    

Clientcertificaten bijwerken kubectl

  1. Werk het kubectl clientcertificaat bij met behulp van de az aks get-credentials opdracht met de --overwrite-existing vlag.

    az aks get-credentials --resource-group <resource-group> --name <cluster-name> --overwrite-existing
    
  2. Controleer of de certificaten zijn bijgewerkt met behulp van de kubectl get opdracht.

    kubectl get nodes
    

    Note

    Als u services hebt die boven op AKS worden uitgevoerd, moet u mogelijk hun certificaten bijwerken.

Controleren of kubelet-certificaatrotatie is ingeschakeld

Elk knooppunt waarvoor de functie is ingeschakeld, krijgt automatisch het label kubernetes.azure.com/kubelet-serving-ca=cluster. Controleer of de labels zijn ingesteld met behulp van de kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca opdracht.

kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca

Controleren of kubelet het TLS-opstartstrappingsproces doorloopt

Wanneer u deze functie inschakelt, doorloopt elke kubelet die op uw knooppunten wordt uitgevoerd het serving TLS-bootstrapproces.

Controleer of het opstartproces plaatsvindt met behulp van de kubectl get opdracht om de huidige CSR-objecten in uw cluster op te halen.

kubectl get csr --field-selector=spec.signerName=kubernetes.io/kubelet-serving

Alle actieve CSR's bevinden zich in de Approved,Issued-status, wat aangeeft dat de CSR is goedgekeurd en dat er een ondertekend certificaat is uitgegeven. De dienende CSRs hebben een ondertekenaarsnaam van kubernetes.io/kubelet-serving. Voorbeeld:

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

Controleer of kubelet gebruikmaakt van een certificaat dat is verkregen van tls-bootstrapping van de server

Controleer of de kubelet van het knooppunt gebruikmaakt van een servicecertificaat dat is ondertekend door de cluster-CA met behulp van de opdracht [kubectl debug][kubectl-debug] om de inhoud van de PKI-map van de kubelet te onderzoeken.

kubectl debug node/<node> -ti --image=mcr.microsoft.com/azurelinux/base/core:3.0 -- ls -l /host/var/lib/kubelet/kubelet-server-current.pem

Als er een kubelet-server-current.pem symlink bestaat, initialiseert de kubelet zijn eigen servercertificaat en rouleert dit via het TLS-bootstrapproces; dit certificaat wordt ondertekend door de cluster-CA.

Kubelet-certificaatrotatie uitschakelen

  1. Schakel kubelet-certificaatrotatie uit door de knooppuntgroep bij te werken met behulp van de az aks nodepool update opdracht en geef de tag aks-disable-kubelet-serving-certificate-rotation=trueop.

    az aks nodepool update \
        --cluster-name <cluster-name> \
        --resource-group <resource-group> \
        --name <node-pool-name> \
        --tags aks-disable-kubelet-serving-certificate-rotation=true
    
  2. Stel uw knooppunten opnieuw in met behulp van een upgrade van een knooppuntinstallatiekopie of door de pool te schalen naar nul exemplaren en vervolgens een back-up te maken van de gewenste waarde.

Zie de volgende artikelen voor meer informatie over AKS-beveiliging: