Zarządzanie certyfikatami i obracanie ich w Azure Kubernetes Service (AKS)

W tym artykule wyjaśniono, jak zarządzać certyfikatami i wymieniać je w klastrach Azure Kubernetes Service (AKS) w celu zapewnienia bezpiecznej komunikacji między składnikami i zapewnienia zgodności.

Wymagania wstępne

  • Azure CLI w wersji 2.0.77 lub nowszej. Sprawdź swoją wersję za pomocą polecenia az --version. Aby zainstalować lub uaktualnić, zobacz Install Azure CLI.

Sprawdzanie daty wygaśnięcia certyfikatu urzędu certyfikacji klastra

Sprawdź datę wygaśnięcia certyfikatu CA klastra za pomocą polecenia kubectl config view.

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

Sprawdzanie daty wygaśnięcia certyfikatu serwera interfejsu API

Sprawdź datę wygaśnięcia certyfikatu serwera interfejsu API przy użyciu następującego curl polecenia:

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

Sprawdzanie daty wygaśnięcia certyfikatu węzła agenta usługi VMSS

Sprawdź datę wygaśnięcia certyfikatu węzła agenta zestawu skalowania maszyn wirtualnych przy użyciu az vmss run-command invoke polecenia .

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"

Sprawdzanie daty wygaśnięcia certyfikatu autonomicznej maszyny wirtualnej

Sprawdź datę wygaśnięcia autonomicznej maszyny wirtualnej przy użyciu az vm run-command invoke polecenia .

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"

Ręcznie rotuj certyfikaty CA klastra

Po obróceniu certyfikatu CA klastra następujące certyfikaty podrzędne również zostają odnowione:

  • Tokeny konta usługi (SA)
  • Certyfikaty serwera interfejsu API
  • Certyfikaty klienta kubelet
  • Certyfikaty serwera Kubelet (jeśli rotacja certyfikatów usługi Kubelet jest włączona w klastrze)

Warning

Rotacja certyfikatów przy użyciu az aks rotate-certs powoduje ponowne utworzenie wszystkich węzłów, zestawów skalowania maszyn wirtualnych i dysków. Ten proces może spowodować do 30 minut przestoju klastra usługi AKS. Jeśli polecenie zakończy się niepowodzeniem przed ukończeniem, użyj az aks show polecenia , aby sprawdzić stan klastra wyświetla rotację certyfikatów. Jeśli klaster jest w stanie niepowodzenia, uruchom az aks rotate-certs ponownie, aby ponownie obrócić certyfikaty.

  1. Połącz się z klastrem za pomocą polecenia az aks get-credentials.

    az aks get-credentials --resource-group <resource-group> --name <cluster-name>
    
  2. Przeprowadź rotację wszystkich certyfikatów, urzędów certyfikacji i kont usługowych w klastrze, używając polecenia az aks rotate-certs.

    az aks rotate-certs --resource-group <resource-group> --name <cluster-name>
    
  3. Sprawdź, czy stare certyfikaty nie są już prawidłowe przy użyciu dowolnego kubectl polecenia, takiego jak kubectl get nodes.

    kubectl get nodes
    

    Jeśli certyfikaty używane przez kubectlprogram nie zaktualizowano, zostanie wyświetlony błąd podobny do następujących przykładowych danych wyjściowych:

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

Aktualizowanie kubectl certyfikatów klienta

  1. Zaktualizuj certyfikat klienta za pomocą polecenia az aks get-credentials z flagą --overwrite-existing.

    az aks get-credentials --resource-group <resource-group> --name <cluster-name> --overwrite-existing
    
  2. Sprawdź, czy certyfikaty są aktualizowane przy użyciu kubectl get polecenia .

    kubectl get nodes
    

    Note

    Jeśli masz jakiekolwiek usługi uruchomione na platformie AKS, może być konieczne dokonanie aktualizacji ich certyfikatów.

Sprawdź, czy włączono rotację certyfikatów używanych przez kubelet

Każdy węzeł z włączoną funkcją automatycznie otrzymuje etykietę kubernetes.azure.com/kubelet-serving-ca=cluster. Sprawdź, czy etykiety są ustawione przy użyciu kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca polecenia .

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

Zweryfikuj, czy narzędzie kubelet przechodzi przez proces inicjalizacji protokołu TLS

Po włączeniu tej funkcji każdy kubelet działający na Twoich węzłach przechodzi przez proces bootstrapowania TLS.

Sprawdź, czy trwa proces inicjalizacji, używając polecenia kubectl get, aby wyświetlić bieżące obiekty CSR w Twoim klastrze.

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

Wszystkie obsługiwane żądania CSR mają stan Approved,Issued, co oznacza, że żądanie CSR zostało zatwierdzone i wydano podpisany certyfikat. Konsultanci działu obsługi klienta mają nazwę sygnatariusza kubernetes.io/kubelet-serving. Przykład:

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

Sprawdź, czy narzędzie kubelet używa certyfikatu uzyskanego z uruchamiania protokołu TLS serwera

Sprawdź, czy kubelet węzła używa certyfikatu serwera podpisanego przez klastrowy urząd certyfikacji, używając polecenia [kubectl debug][kubectl-debug] do zbadania zawartości katalogu PKI kubeleta.

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

Jeśli istnieje dowiązanie symboliczne kubelet-server-current.pem, kubelet inicjuje i odnawia własny certyfikat serwera w procesie bootstrapu TLS, a certyfikat jest podpisywany przez CA klastra.

Wyłącz rotację certyfikatów serwera kubelet

  1. Wyłącz rotację certyfikatów serwera kubelet, aktualizując pulę węzłów za pomocą polecenia az aks nodepool update i podając tag aks-disable-kubelet-serving-certificate-rotation=true.

    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. Utwórz ponownie obraz węzłów przy użyciu uaktualnienia obrazu węzła lub skalując pulę do zera wystąpień, a następnie wykonaj kopię zapasową żądanej wartości.

Aby uzyskać więcej informacji na temat zabezpieczeń usługi AKS, zobacz następujące artykuły: