Udostępnij za pośrednictwem


Rotacja certyfikatów w usłudze Azure Kubernetes Service (AKS)

Usługa Azure Kubernetes Service (AKS) używa certyfikatów do uwierzytelniania w interakcji z wieloma składnikami. Klastry z kontrolą dostępu opartą na rolach platformy Azure (Azure RBAC), które zostały utworzone po marcu 2022 r., mają włączony automatyczny obrót certyfikatów. Może być konieczne okresowe obracanie tych certyfikatów ze względów bezpieczeństwa lub zasad. Na przykład możesz mieć zasady rotacji wszystkich certyfikatów co 90 dni.

Uwaga / Notatka

Automatyczna rotacja certyfikatów jest domyślnie włączona tylko dla klastrów AKS z włączoną RBAC.

W tym artykule pokazano, jak działa rotacja certyfikatów w klastrze usługi AKS.

Zanim rozpoczniesz

Ten artykuł wymaga interfejsu wiersza polecenia platformy Azure w wersji 2.0.77 lub nowszej. Uruchom az --version, aby znaleźć wersję. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

Certyfikaty AKS, Urzędy Certyfikacji i Konta Usługi

Usługa AKS generuje i używa następujących certyfikatów, Urzędów Certyfikacji (CA) i Kont Usług (SA):

  • Serwer API AKS tworzy certyfikat CA, zwany certyfikatem klastra.
  • Serwer interfejsu API ma CA klastra, który podpisuje certyfikaty dla komunikacji jednokierunkowej z serwera interfejsu API do kubeletów.
  • Każdy kubelet tworzy żądanie podpisania certyfikatu (CSR), które jest podpisywane przez urząd certyfikacji klastra, umożliwiając komunikację z kubeleta do serwera API.
  • Agregator interfejsów API używa Urzędu Certyfikacji (CA) klastra do wystawiania certyfikatów na potrzeby komunikacji z innymi interfejsami API. Agregator interfejsu API może również mieć własny urząd certyfikacji do wystawiania tych certyfikatów, ale obecnie używa urzędu certyfikacji klastra.
  • Każdy węzeł używa tokenu SA, który urząd certyfikacji bezpieczeństwa klastra podpisuje.
  • Klient kubectl ma certyfikat do komunikowania się z klastrem usługi AKS.

Firma Microsoft utrzymuje wszystkie certyfikaty wymienione w tej sekcji, z wyjątkiem certyfikatu klastra.

Uwaga / Notatka

  • Klastry usługi AKS utworzone przed majem 2019 r. mają certyfikaty, które wygasają po dwóch latach.
  • Klastry usługi AKS utworzone po maju 2019 r. mają certyfikaty CA klastra, które wygasają po 30-letnim okresie ważności.

Możesz sprawdzić, kiedy klaster został utworzony, korzystając z polecenia kubectl get nodes, które pokazuje Wiek pul węzłów.

Sprawdzanie dat wygaśnięcia certyfikatu

Sprawdzanie daty wygaśnięcia certyfikatu klastra

  • Sprawdź datę wygaśnięcia certyfikatu klastra przy użyciu kubectl config view polecenia .

    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
    

Sprawdź datę wygaśnięcia certyfikatu węzła agenta VMAS

  • Sprawdź datę wygaśnięcia certyfikatu dla węzła agenta programu VMAS używając polecenia 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"
    

Sprawdź wygaśnięcie certyfikatu dla węzła agenta skalowania maszyn wirtualnych

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

Automatyczna rotacja certyfikatu

Aby AKS automatycznie obracało certyfikaty niezwiązane z urzędami certyfikacji, klaster musi mieć funkcję rozruch TLS, która jest domyślnie włączona we wszystkich regionach Azure.

Uwaga / Notatka

  • Jeśli masz istniejący klaster, musisz uaktualnić ten klaster, aby włączyć automatyczne obracanie certyfikatów.
  • Nie wyłączaj uruchamiania, aby zachować włączoną automatyczną rotację.
  • Jeśli klaster jest w stanie zatrzymanym podczas automatycznego obracania certyfikatów, obracane są tylko certyfikaty płaszczyzny sterowania. W takim przypadku należy ponownie utworzyć pulę węzłów po odnowieniu certyfikatów, aby zainicjować proces odnowienia certyfikatów puli węzłów.

W przypadku wszystkich klastrów usługi AKS utworzonych lub uaktualnionych po marcu 2022 r. usługa Azure Kubernetes Service automatycznie obraca certyfikaty inne niż urzędy certyfikacji na węzłach płaszczyzny sterowania i agenta w ciągu 80% certyfikatu klienta ważnego czasu przed wygaśnięciem bez przestoju dla klastra.

Jak sprawdzić, czy bieżąca pula węzłów agenta jest włączona podczas uruchamiania protokołu TLS?

  1. Sprawdź, czy klaster ma włączoną funkcję bootstrapping protokołu TLS, przechodząc do jednej z następujących ścieżek:

    • W węźle systemu Linux: /var/lib/kubelet/bootstrap-kubeconfig lub /host/var/lib/kubelet/bootstrap-kubeconfig
    • W węźle systemu Windows: C:\k\bootstrap-config

    Aby uzyskać więcej informacji, zobacz Connect to Azure Kubernetes Service cluster nodes for maintenance or troubleshooting (Nawiązywanie połączenia z węzłami klastra usługi Azure Kubernetes Service w celu konserwacji lub rozwiązywania problemów).

    Uwaga / Notatka

    Ścieżka pliku może ulec zmianie w miarę rozwoju wersji platformy Kubernetes.

  2. Po skonfigurowaniu regionu utwórz nowy klaster lub uaktualnij istniejący klaster, aby ustawić automatyczną rotację certyfikatu klastra. Aby włączyć tę funkcję, należy uaktualnić płaszczyznę sterowania i pulę węzłów.

Ręczna rotacja certyfikatów klastra

Ostrzeżenie

Rotacja certyfikatów przy użyciu az aks rotate-certs powoduje ponowne utworzenie wszystkich węzłów, zestawów skalowalnych maszyn wirtualnych i dysków oraz może spowodować do 30 minut przestoju klastra usługi AKS.

  1. Połącz się z klastrem az aks get-credentials przy użyciu polecenia .

    az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --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 --name $CLUSTER_NAME
    

    Ważne

    Ukończenie tego procesu może potrwać do 30 minut az aks rotate-certs . Jeśli polecenie zakończy się niepowodzeniem przed ukończeniem, użyj polecenia az aks show , aby sprawdzić, czy stan klastra to Rotacja certyfikatów. Jeśli klaster jest w stanie niepowodzenia, uruchom az aks rotate-certs ponownie, aby ponownie obrócić certyfikaty.

  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 zostały zaktualizowane, 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")
    
  4. Zaktualizuj certyfikat używany przez kubectl, korzystając z polecenia az aks get-credentials z flagą --overwrite-existing.

    az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --overwrite-existing
    
  5. Sprawdź, czy certyfikaty zostały zaktualizowane przy użyciu kubectl get polecenia .

    kubectl get nodes
    

    Uwaga / Notatka

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

Rotacja certyfikatów serwera Kubelet

Usługa rotacji certyfikatów obsługowych Kubelet umożliwia AKS korzystanie z uruchamiania protokołu TLS kubeleta zarówno do uruchamiania, jak i rotacji certyfikatów obsługowych podpisanych przez urząd certyfikacji klastra.

Ograniczenia

  • Obsługiwane na platformie Kubernetes w wersji 1.27 lub nowszej.
  • Nie jest obsługiwane, gdy pula węzłów używa migawki puli węzłów na podstawie dowolnego obrazu węzła starszego niż 202501.12.0.
  • Tej funkcji nie można włączyć ręcznie. Istniejące pule węzłów mają domyślnie włączoną rotację certyfikatów usługi kubelet, gdy przeprowadzają pierwsze uaktualnienie do dowolnego rozwiązania Kubernetes w wersji 1.27 lub nowszej. Nowe pule węzłów na platformie Kubernetes w wersji 1.27 lub nowszej będą mieć domyślnie włączoną rotację certyfikatów obsługujących usługę kubelet. Aby sprawdzić, czy rotacja certyfikatów usługi Kubelet została włączona w Twoim regionie, zobacz Wydania usługi AKS.

Sprawdź, czy włączono rotację certyfikatów obsługujących usługę kubelet

Każdy węzeł z włączoną funkcją automatycznie otrzymuje etykietę kubernetes.azure.com/kubelet-serving-ca=cluster. Sprawdź, czy etykiety zostały 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 uruchomiony na węzłach powinien przejść przez proces inicjowania TLS.

Sprawdź, czy proces bootstrappingu ma miejsce, używając polecenia kubectl get do pobrania bieżących obiektów CSR w klastrze.

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

Wszyscy obsługujący CSR-y powinni znajdować się w Approved,Issued stanie, który wskazuje, że CSR został zatwierdzony, oraz wystawiono podpisany certyfikat. Konsultanci działu obsługi klienta mają nazwę sygnatariusza kubernetes.io/kubelet-serving.

   NAME        AGE    SIGNERNAME                                    REQUESTOR                    REQUESTEDDURATION   CONDITION
csr-8mx4w   113s   kubernetes.io/kube-apiserver-client-kubelet   system:bootstrap:uoxr9r      none              Approved,Issued
csr-bchlj   111s   kubernetes.io/kubelet-serving                 system:node:akswinp7000000   none              Approved,Issued
csr-sb4wz   46m    kubernetes.io/kubelet-serving                 system:node:akswinp6000000   none              Approved,Issued
csr-zc4wt   46m    kubernetes.io/kube-apiserver-client-kubelet   system:bootstrap:ho7zyu      none              Approved,Issued

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

Aby potwierdzić, czy węzeł kubelet używa certyfikatu serwera podpisanego przez CA klastra, użyj polecenia [kubectl debug][kubectl-debug], aby przejrzeć zawartość 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 symlink, kubelet skonfigurował/odnowił swój certyfikat serwera poprzez proces uruchamiania TLS i został on podpisany przez urząd certyfikacji klastra.

Wyłącz rotację certyfikatów serwera kubelet

Można wyłączyć rotację certyfikatów kubelet, aktualizując pulę węzłów przy użyciu polecenia az aks nodepool update, aby określić tag aks-disable-kubelet-serving-certificate-rotation=true, a następnie ponownie obrazując węzły. Reimage węzła można wykonać za pomocą uaktualnienia obrazu węzła lub przez skalowanie puli do 0 wystąpień, a następnie wykonanie kopii zapasowej do żądanej wartości.

az aks nodepool update --cluster-name myCluster --resource-group myResourceGroup --name mynodepool --tags aks-disable-kubelet-serving-certificate-rotation=true

Dalsze kroki

W tym artykule pokazano, jak ręcznie i automatycznie odnawiać certyfikaty klastra, urzędy certyfikacji (CA) oraz kontrolery dostępów (SA). Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania dotyczące zabezpieczeń i uaktualnień klastra w usłudze Azure Kubernetes Service (AKS).