Udostępnij przez


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. Należy okresowo wymieniać te certyfikaty ze względów bezpieczeństwa lub zasad. W tym artykule pokazano, jak działa rotacja certyfikatów w klastrze usługi AKS.

Wymagania wstępne

  • Ten artykuł wymaga interfejsu wiersza polecenia platformy Azure w wersji 2.0.77 lub nowszej. Sprawdź wersję przy użyciu polecenia az --version. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

  • Skonfiguruj kubectl do połączenia z klastrem usługi AKS przy użyciu polecenia az aks get-credentials.

    az aks get-credentials --resource-group <resource-group> --name <cluster-name>
    

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 urząd certyfikacji o nazwie Urząd certyfikacji klastra, który podpisuje certyfikaty dla jednokierunkowej komunikacji z serwera API do kubeleta.
  • 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ł agenta używa tokenu SA, który podpisuje urząd certyfikacji klastra.
  • 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.

Daty wygaśnięcia certyfikatu

Ważne

Data wygaśnięcia certyfikatów zależy od momentu utworzenia klastra usługi AKS:

  • 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 zweryfikować, kiedy klaster został utworzony, używając polecenia kubectl get nodes, które pokazuje węzły agenta Age.

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 agenta maszyny wirtualnej (VM)

  • Sprawdź datę wygaśnięcia certyfikatu węzła agenta VM przy użyciu az vm run-command invoke polecenia.

    Kluczowe parametry w tym poleceniu: - : --resource-group <node-resource-group>Grupa zasobów zawierająca węzeł agenta maszyny wirtualnej. - --name <vm-name>: nazwa węzła agenta maszyny wirtualnej. - --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate": skrypt, który pobiera datę wygaśnięcia certyfikatu serwera interfejsu API zlokalizowanego w lokalizacji /etc/kubernetes/certs/apiserver.crt.

    az vm run-command invoke --resource-group <node-resource-group> --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 w zestawie skalowania maszyn wirtualnych platformy Azure

  • Sprawdź datę wygaśnięcia certyfikatu agenta zestawu skalowania maszyn wirtualnych platformy Azure przy użyciu az vmss run-command invoke polecenia .

    Kluczowe parametry w tym poleceniu: - : --resource-group <node-resource-group>Grupa zasobów zawierająca węzeł agenta zestawu skalowania maszyn wirtualnych platformy Azure. - --name <vmss-name>: nazwa zestawu skalowania maszyn wirtualnych platformy Azure. - --instance-id 1: identyfikator instancji węzła agenta zestawu skalowania maszyn wirtualnych Azure. - --scripts "openssl x509 -in  /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate": Skrypt, który pobiera datę wygaśnięcia certyfikatu klienta kubelet umiejscowionego w /var/lib/kubelet/pki/kubelet-client-current.pem.

    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"
    

Ręczna rotacja certyfikatów klastra

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

    Ważne

    Polecenie az aks rotate-certs ponownie tworzy wszystkie węzły agenta, zestawy skalowania maszyn wirtualnych platformy Azure i dyski. To polecenie może również spowodować nawet 30 minut przestoju klastra AKS. Jeśli polecenie zakończy się niepowodzeniem przed ukończeniem, użyj polecenia [az aks show][az-aks-show], aby sprawdzić, czy stan klastra to Certificate Rotating. Jeśli klaster jest w stanie niepowodzenia, uruchom ponownie polecenie az aks rotate-certs, aby odnowić certyfikaty.

  2. Sprawdź, czy stare certyfikaty nie są już prawidłowe przy użyciu dowolnego kubectl polecenia. W poniższym przykładzie użyto polecenia 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")
    
  3. 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 <cluster-name> --overwrite-existing
    
  4. Sprawdź, czy certyfikaty są aktualizowane przy użyciu kubectl get polecenia .

    kubectl get nodes
    

Jeśli masz jakiekolwiek usługi, które działają na AKS, może być konieczne zaktualizowanie ich certyfikatów.

Rotacja certyfikatu generowanego przez kubelet

Podczas rotacji certyfikatu obsługującego kubelet, AKS zezwala na proces bootstrappingu Transport Layer Security (TLS) na potrzeby inicjalizacji i rotacji certyfikatów serwisowych podpisanych przez nadrzędny urząd certyfikacji klastra.

Ograniczenia dotyczące rotacji certyfikatów serwisowych kubeleta

  • 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.
  • Nie można ręcznie włączyć tej funkcji. Rotacja certyfikatów obsługi Kubelet jest domyślnie włączona w istniejących pulach węzłów przy pierwszym uaktualnieniu do dowolnej wersji Kubernetes 1.27 lub nowszej. Rotacja certyfikatów obsługujących usługę Kubelet jest domyślnie włączona w nowych pulach węzłów przy użyciu platformy Kubernetes w wersji 1.27 lub nowszej. Aby sprawdzić, czy rotacja certyfikatów usługi Kubelet jest włączona w Twoim regionie, sprawdź wersje usługi AKS.

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

    Dane wyjściowe powinny zawierać etykietę kubernetes.azure.com/kubelet-serving-ca z wartością cluster dla każdego węzła agenta.

Sprawdź, czy TLS Bootstrap kubeleta działa

  • Sprawdź, czy proces bootstrapping odbywa się przy użyciu polecenia kubectl get.

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

    W danych wyjściowych wszystkie obsługujące żądania CSR powinny znajdować się w Approved,Issued stanie, co wskazuje, że CSR został zatwierdzony i wystawiono 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:uoxr9r      none              Approved,Issued
    csr-defgh   111s   kubernetes.io/kubelet-serving                 system:node:akswinp7000000   none              Approved,Issued
    csr-ij3kl   46m    kubernetes.io/kubelet-serving                 system:node:akswinp6000000   none              Approved,Issued
    csr-mn4op   46m    kubernetes.io/kube-apiserver-client-kubelet   system:bootstrap:ho7zyu      none              Approved,Issued
    

Sprawdź, czy narzędzie kubelet używa certyfikatu uzyskanego z serwera tls bootstrapping

  • Upewnij się, że kubelet używa certyfikatu usługowego podpisanego przez urząd certyfikacji klastra, przy użyciu polecenia kubectl debug.

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

    kubelet-server-current.pem Jeśli istnieje symlink, to kubelet zainicjował/odnowił własny certyfikat usługowy, a Urząd CA klastra go podpisał.

Wyłącz rotację certyfikatów serwera kubelet

  • Aby wyłączyć rotację certyfikatów obsługujących kubelet, zaktualizuj pulę węzłów, używając polecenia az aks nodepool update z tagiem 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
    
  1. 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.

Autorotacja certyfikatu

Podczas korzystania z automatycznej rotacji certyfikatów należy pamiętać o następujących kwestiach:

  • Jeśli masz istniejący klaster, musisz uaktualnić ten klaster, aby włączyć autorotytację certyfikatu.
  • Nie wyłączaj Bootstrap TLS, aby zachować włączoną autorotację certyfikatu.
  • Jeśli klaster jest w stanie zatrzymanym podczas autoryzacji certyfikatów, obracane są tylko certyfikaty warstwy kontrolnej. 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 AKS utworzonych lub zaktualizowanych po marcu 2022 r. usługa AKS automatycznie rotuje certyfikaty inne niż CA zarówno na płaszczyźnie kontrolnej, jak i na węzłach agenta, w okresie do 80% ważności certyfikatu klienta przed ich wygaśnięciem, nie powodując przestojów w klastrze.

Sprawdź, czy Bootstrapping TLS jest włączony w bieżącej puli zasobów węzłów agenta

  1. Sprawdź, czy klaster ma włączoną funkcję bootstrapping TLS, przechodząc do jednej z poniższych ścieżek:

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

    Aby uzyskać więcej informacji, zobacz Nawiązywanie połączenia przy użyciu protokołu SSH 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ć autorotytację certyfikatu dla certyfikatu klastra. Aby włączyć tę funkcję, należy uaktualnić płaszczyznę sterowania i pulę węzłów.