Udostępnij za pośrednictwem


Rozwiązywanie problemów z certyfikatem dodatku usługi Istio service mesh

W tym artykule omówiono typowe problemy z rozwiązywaniem problemów z funkcją certyfikatów urzędu certyfikacji dodatku Istio i oferuje rozwiązania tych problemów. W tym artykule omówiono również ogólny proces konfigurowania certyfikatów urzędu certyfikacji wtyczek dla dodatku usługi Service Mesh.

Uwaga 16.

W tym artykule przyjęto założenie, że poprawka asm-1-21 istio jest wdrażana w klastrze.

Wymagania wstępne

Ogólny proces instalacji

  • Przed włączeniem dodatku Istio w celu korzystania z funkcji certyfikatów urzędu certyfikacji wtyczki należy włączyć dostawcę usługi Azure Key Vault dla dodatku Magazynu wpisów tajnych w klastrze. Upewnij się, że usługa Azure Key Vault i klaster znajdują się w tej samej dzierżawie platformy Azure.

  • Po włączeniu dodatku dostawcy wpisów tajnych usługi Azure Key Vault należy skonfigurować dostęp do usługi Azure Key Vault dla tożsamości zarządzanej przypisanej przez użytkownika utworzonej przez dodatek.

  • Po udzieleniu uprawnień tożsamości zarządzanej przypisanej przez użytkownika w celu uzyskania dostępu do usługi Azure Key Vault możesz użyć funkcji certyfikatów urzędu certyfikacji wtyczki wraz z dodatkiem Istio. Aby uzyskać więcej informacji, zobacz sekcję Enable the Istio add-on to use a plug-in CA certificate (Włączanie dodatku Istio do korzystania z certyfikatu urzędu certyfikacji wtyczki).

  • Aby klaster automatycznie wykrywał zmiany w wpisach tajnych usługi Azure Key Vault, musisz włączyć automatyczną rotację dla dodatku dostawcy wpisów tajnych usługi Azure Key Vault.

  • Mimo że zmiany certyfikatu pośredniego są stosowane automatycznie, zmiany certyfikatu głównego są pobierane tylko przez płaszczyznę sterowania po istiod ponownym uruchomieniu wdrożenia przez obiekt cronjob, który jest wdrażany przez dodatek, zgodnie z wyjaśnieniem w sekcji Wdrożone zasoby . To cronjob jest uruchamiane w 10-minutowym interwale.

Włączanie dodatku Istio w celu korzystania z certyfikatu urzędu certyfikacji wtyczki

Funkcja certyfikatów urzędu certyfikacji dodatku Istio umożliwia konfigurowanie certyfikatów głównych i pośrednich wtyczek dla siatki. Aby podać informacje o certyfikacie wtyczki po włączeniu dodatku, określ następujące parametry dla polecenia az aks mesh enable w interfejsie wiersza polecenia platformy Azure.

Parametr Opis
--key-vault-id<identyfikator zasobu> Identyfikator zasobu usługi Azure Key Vault. Ten zasób powinien znajdować się w tej samej dzierżawie co klaster zarządzany. Ten identyfikator zasobu musi być w formacie identyfikatora zasobu szablonu usługi Azure Resource Manager (szablonu usługi ARM).
--root-cert-object-name<root-cert-obj-name> Nazwa obiektu certyfikatu głównego w usłudze Azure Key Vault.
--ca-cert-object-name<inter-cert-obj-name> Nazwa obiektu certyfikatu pośredniego w usłudze Azure Key Vault.
--ca-key-object-name<inter-key-obj-name> Nazwa obiektu klucza prywatnego certyfikatu pośredniego w usłudze Azure Key Vault.
--cert-chain-object-name<cert-chain-obj-name> Nazwa obiektu łańcucha certyfikatów w usłudze Azure Key Vault.

Jeśli chcesz użyć funkcji certyfikatów urzędu certyfikacji wtyczki, musisz określić wszystkie pięć parametrów. Oczekuje się, że wszystkie obiekty usługi Azure Key Vault będą typu Wpis tajny.

Aby uzyskać więcej informacji, zobacz Plug in CA certificates for Istio-based service mesh add-on on on Azure Kubernetes Service (Podłącz certyfikaty urzędu certyfikacji dla dodatku siatki usługi opartej na technologii Istio w usłudze Azure Kubernetes Service).

Wdrożone zasoby

W ramach wdrożenia dodatku dla funkcji certyfikatów wtyczek następujące zasoby są wdrażane w klastrze:

  • Wpis cacerts tajny kubernetes jest tworzony w aks-istio-system przestrzeni nazw w momencie wdrożenia dodatku. Ten wpis tajny zawiera zsynchronizowane wpisy tajne usługi Azure Key Vault:

    kubectl describe secret cacerts --namespace aks-istio-system
    
    Name:         cacerts
    Namespace:    aks-istio-system
    Labels:       secrets-store.csi.k8s.io/managed=true
    Annotations:  <none>
    
    Type:  opaque
    
    Data
    ====
    ca-cert.pem:     1968 bytes
    ca-key.pem:      3272 bytes
    cert-chain.pem:  3786 bytes
    root-cert.pem:   3636 bytes
    
  • Obiekt istio-spc-asm-1-21 SecretProviderClass jest tworzony w aks-istio-system przestrzeni nazw w momencie wdrożenia dodatku. Ten zasób zawiera parametry specyficzne dla platformy Azure dla sterownika interfejsu MAGAZYNU kontenerów magazynu wpisów tajnych (CSI):

    kubectl get secretproviderclass --namespace aks-istio-system
    
    NAME                 AGE
    istio-spc-asm-1-21   14h
    
  • Mapa istio-ca-root-cert konfiguracji jest tworzona w aks-istio-system przestrzeni nazw i wszystkich przestrzeniach nazw zarządzanych przez użytkownika. Ta mapa konfiguracji zawiera certyfikat główny używany przez urząd certyfikacji i jest używany przez obciążenia w przestrzeniach nazw do weryfikowania komunikacji między obciążeniami w następujący sposób:

    kubectl describe configmap istio-ca-root-cert --namespace aks-istio-system
    
    Name:         istio-ca-root-cert
    Namespace:    aks-istio-system
    Labels:       istio.io/config=true
    Annotations:  <none>
    
    Data
    ====
    root-cert.pem:
    ----
    -----BEGIN CERTIFICATE-----
    <certificate data>
    -----END CERTIFICATE-----
    
  • Obiekt istio-cert-validator-cronjob-asm-1-21 cronjob jest tworzony w aks-istio-system przestrzeni nazw. To zadanie cronjob ma być uruchamiane co 10 minut, aby sprawdzić dostępność aktualizacji certyfikatu głównego. Jeśli certyfikat główny, który znajduje się w kluczu cacerts tajnym Kubernetes, nie jest zgodny z mapą istio-ca-root-cert konfiguracji w aks-istio-system przestrzeni nazw, uruchomi istiod-asm-1-21 ponownie wdrożenie:

    kubectl get cronjob --namespace aks-istio-system
    
    NAME                                    SCHEDULE       SUSPEND   ACTIVE
    istio-cert-validator-cronjob-asm-1-21   */10 * * * *   False     0     
    

    Możesz uruchomić następujące polecenie, aby sprawdzić dzienniki cronjob dla ostatniego uruchomienia:

    kubectl logs --namespace aks-istio-system $(kubectl get pods --namespace aks-istio-system | grep 'istio-cert-validator-cronjob-' | sort -k8 | tail -n 1 | awk '{print $1}')
    

    To polecenie generuje jeden z następujących komunikatów wyjściowych w zależności od tego, czy wykryto aktualizację certyfikatu głównego:

    Root certificate update not detected.
    
    Root certificate update detected. Restarting deployment...
    deployment.apps/istiod-asm-1-21 restarted
    Deployment istiod-asm-1-21 restarted.
    

Określanie typu certyfikatu w dziennikach wdrażania

Dzienniki wdrażania można wyświetlić istiod , aby określić, czy masz certyfikat urzędu certyfikacji z podpisem własnym, czy certyfikat urzędu certyfikacji wtyczki. Aby wyświetlić dzienniki, uruchom następujące polecenie:

kubectl logs deploy/istiod-asm-1-21 --container discovery --namespace aks-istio-system | grep -v validationController

Bezpośrednio przed każdym wpisem dziennika certyfikatu jest inny wpis dziennika, który opisuje ten rodzaj certyfikatu. W przypadku certyfikatu urzędu certyfikacji z podpisem własnym wpis stwierdza "Brak wtyczki certyfikatu w etc/cacerts/ca-key.pem; Używany jest certyfikat z podpisem własnym". W przypadku certyfikatu wtyczki wpis określa wartość "Use plugged-in cert at etc/cacerts/ca-key.pem". Przykładowe wpisy dziennika dotyczące certyfikatów są wyświetlane w poniższych tabelach.

  • Wpisy dziennika dla certyfikatu urzędu certyfikacji z podpisem własnym

    Sygnatura czasowa Poziom dziennika Komunikat
    2023-11-20T23:27:36.649019Z informacje o Używanie formatu pliku istiod do podpisywania plików ca
    2023-11-20T23:27:36.649032Z informacje o Brak wtyczki certyfikatu etc/cacerts/ca-key.pem; Używany jest certyfikat z podpisem własnym
    2023-11-20T23:27:36.649536Z informacje o certyfikat x509 — <szczegóły certyfikatu>
    2023-11-20T23:27:36.649552Z informacje o Certyfikaty istiod są ładowane ponownie
    2023-11-20T23:27:36.649613Z informacje o spiffe Dodano 1 certyfikaty do zaufania klastra domeny.local w weryfikatorze certyfikatów równorzędnych
  • Wpisy dziennika dla certyfikatu urzędu certyfikacji wtyczki

    Sygnatura czasowa Poziom dziennika Komunikat
    2023-11-21T00:20:25.808396Z informacje o Używanie formatu pliku istiod do podpisywania plików ca
    2023-11-21T00:20:25.808412Z informacje o Użyj certyfikatu plugged-in w pliku etc/cacerts/ca-key.pem
    2023-11-21T00:20:25.808731Z informacje o certyfikat x509 — <szczegóły certyfikatu>
    2023-11-21T00:20:25.808764Z informacje o certyfikat x509 — <szczegóły certyfikatu>
    2023-11-21T00:20:25.808799Z informacje o certyfikat x509 — <szczegóły certyfikatu>
    2023-11-21T00:20:25.808803Z informacje o Certyfikaty istiod są ładowane ponownie
    2023-11-21T00:20:25.808873Z informacje o spiffe Dodano 1 certyfikaty do zaufania klastra domeny.local w weryfikatorze certyfikatów równorzędnych

Szczegóły certyfikatu we wpisie dziennika są wyświetlane jako wartości rozdzielane przecinkami dla wystawcy, podmiotu, numeru seryjnego (SN — długiego ciągu szesnastkowego) oraz początkowych i końcowych wartości znacznika czasu, które określają, kiedy certyfikat jest prawidłowy.

W przypadku certyfikatu urzędu certyfikacji z podpisem własnym istnieje jeden wpis szczegółów. Przykładowe wartości dla tego certyfikatu są wyświetlane w poniższej tabeli.

Wystawca Temat SN Nie wcześniej niż Nie później niż
"O=cluster.local" "" <32-cyfrowy-wartość-szesnastkowy> "2023-11-20T23:25:36Z" "2033-11-17T23:27:36Z"

W przypadku certyfikatu urzędu certyfikacji wtyczki istnieją trzy szczegółowe wpisy. Pozostałe dwa wpisy dotyczą aktualizacji certyfikatu głównego i zmiany certyfikatu pośredniego. Przykładowe wartości tych wpisów przedstawiono w poniższej tabeli.

Wystawca Temat SN Nie wcześniej niż Nie później niż
CN=Intermediate CA - A1,O=Istio,L=cluster-A1" "" <32-cyfrowy-wartość-szesnastkowy> "2023-11-21T00:18:25Z" "2033-11-18T00:20:25Z"
CN=Root A,O=Istio" "CN=Intermediate CA - A1,O=Istio,L=cluster-A1" <40-cyfrowy-wartość-szesnastkowy> "2023-11-04T01:40:22Z" "2033-11-01T01:40:22Z"
CN=Root A,O=Istio" "CN=Root A,O=Istio" <40-cyfrowy-wartość-szesnastkowy> "2023-11-04T01:38:27Z" "2033-11-01T01:38:27Z"

Rozwiązywanie typowych problemów

Problem 1: Niepoprawne konfigurowanie dostępu do usługi Azure Key Vault

Po włączeniu dodatku dostawcy wpisów tajnych usługi Azure Key Vault musisz udzielić dostępu dla tożsamości zarządzanej przypisanej przez użytkownika dodatku do usługi Azure Key Vault. Skonfigurowanie dostępu do usługi Azure Key Vault niepoprawnie powoduje zatrzymanie instalacji dodatku.

kubectl get pods --namespace aks-istio-system

Na liście zasobników widać, że istiod-asm-1-21 zasobniki są zablokowane w Init:0/2 stanie.

NAZWA GOTOWY STAN PONOWNE URUCHOMIENIA AGE
istiod-asm-1-21-6fcfd88478-2x95b 0/1 Kończące 0 5m55s
istiod-asm-1-21-6fcfd88478-6x5hh 0/1 Kończące 0 5m40s
istiod-asm-1-21-6fcfd88478-c48f9 0/1 Init:0/2 0 54s
istiod-asm-1-21-6fcfd88478-wl8mw 0/1 Init:0/2 0 39s

Aby sprawdzić problem z dostępem do usługi Azure Key Vault, uruchom kubectl get pods polecenie , aby zlokalizować zasobniki z etykietą kube-system secrets-store-provider-azure w przestrzeni nazw:

kubectl get pods --selector app=secrets-store-provider-azure --namespace kube-system --output name | xargs -I {} kubectl logs --namespace kube-system {}

Następujące przykładowe dane wyjściowe pokazują, że wystąpił błąd "403 Zabronione", ponieważ nie masz uprawnień "get" dla wpisów tajnych w usłudze Key Vault:

"Nie można przetworzyć żądania instalacji" err="nie można pobrać objectType:secret, objectName:<secret-object-name>, objectVersion:: keyvault. BaseClient#GetSecret: Błąd odpowiedzi na żądanie: StatusCode=403 -- Oryginalny błąd: autorest/azure: Usługa zwróciła błąd. Status=403 Code=\"Forbidden\" Message="Użytkownik, grupa lub aplikacja 'appid=<appid>; oid=<oid>; iss=<iss>" nie ma uprawnień do pobierania wpisów tajnych w magazynie kluczy "MyAzureKeyVault; location=eastus'. Aby uzyskać pomoc dotyczącą rozwiązywania tego problemu, zobacz https://go.microsoft.com/fwlink/?linkid=2125287\" InnerError={\"code\":\"AccessDenied\"}"

Aby rozwiązać ten problem, skonfiguruj dostęp do tożsamości zarządzanej przypisanej przez użytkownika dla dodatku dostawcy wpisów tajnych usługi Azure Key Vault, uzyskując uprawnienia Get and List w wpisach tajnych usługi Azure Key Vault i ponownie zainstaluj dodatek Istio. Najpierw pobierz identyfikator obiektu tożsamości zarządzanej przypisanej przez użytkownika dla dodatku dostawcy wpisów tajnych usługi Azure Key Vault, uruchamiając polecenie az aks show :

OBJECT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.objectId')

Aby ustawić zasady dostępu, uruchom następujące polecenie az keyvault set-policy , określając uzyskany identyfikator obiektu:

az keyvault set-policy --name $AKV_NAME --object-id $OBJECT_ID --secret-permissions get list

Uwaga 16.

Czy utworzono usługę Key Vault przy użyciu autoryzacji RBAC platformy Azure dla modelu uprawnień zamiast zasad dostępu magazynu? W takim przypadku zobacz Zapewnianie dostępu do kluczy, certyfikatów i wpisów tajnych usługi Key Vault za pomocą kontroli dostępu opartej na rolach platformy Azure, aby utworzyć uprawnienia dla tożsamości zarządzanej. Dodaj przypisanie roli platformy Azure dla czytelnika usługi Key Vault dla tożsamości zarządzanej przypisanej przez użytkownika dodatku.

Problem 2. Automatyczne wykrywanie zmian wpisów tajnych usługi Key Vault nie jest skonfigurowane

Aby klaster automatycznie wykrywał zmiany w wpisach tajnych usługi Azure Key Vault, musisz włączyć automatyczną rotację dodatku dostawcy usługi Azure Key Vault. Automatyczne obracanie może automatycznie wykrywać zmiany w certyfikatach pośrednich i głównych. W przypadku klastra, który włącza dodatek dostawcy usługi Azure Key Vault, uruchom następujące az aks show polecenie, aby sprawdzić, czy jest włączona automatyczna rotacja:

az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER | jq -r '.addonProfiles.azureKeyvaultSecretsProvider.config.enableSecretRotation'

Jeśli klaster włączył dodatek dostawcy usługi Azure Key Vault, uruchom następujące az aks show polecenie, aby określić interwał sondowania rotacji:

az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER | jq -r '.addonProfiles.azureKeyvaultSecretsProvider.config.rotationPollInterval'

Wpisy tajne usługi Azure Key Vault są synchronizowane z klastrem, gdy czas interwału sondowania upłynie po poprzedniej synchronizacji. Domyślna wartość interwału to dwie minuty.

Problem 3. Brak wartości certyfikatu lub są niepoprawnie skonfigurowane

Jeśli w usłudze Azure Key Vault brakuje obiektów tajnych lub jeśli te obiekty są niepoprawnie skonfigurowane, istiod-asm-1-21 zasobniki mogą utknąć w Init:0/2 stanie, opóźniając instalację dodatku. Aby znaleźć podstawową przyczynę tego problemu, uruchom następujące kubectl describe polecenie względem istiod wdrożenia i wyświetl dane wyjściowe:

kubectl describe deploy/istiod-asm-1-21 --namespace aks-istio-system

Polecenie wyświetla zdarzenia, które mogą przypominać poniższą tabelę danych wyjściowych. W tym przykładzie brak wpisu tajnego jest przyczyną problemu.

Typ Przyczyna Wiek Źródło Komunikat
Normalna Zaplanowane 3m9s harmonogram domyślny Pomyślnie przypisano aks-istio-system/istiod-asm-1-21-6fcfd88478-hqdjj do aks-userpool-24672518-vmss000000
Ostrzeżenie Nie można odinstalować 66s kubelet Nie można dołączyć lub zainstalować woluminów: woluminy niezainstalowane=[cacerts], nieprzyłączone woluminy=[], nie można przetworzyć woluminów=[]: przekroczono limit czasu oczekiwania na warunek
Ostrzeżenie Nie można odinstalować 61s (x9 ponad 3m9s) kubelet MountVolume.SetUp nie powiodło się dla woluminu "cacerts": błąd rpc: kod = Unknown desc = failed to mount secrets store objects for pod aks-istio-system/istiod-asm-1-21-6fcfd88478-hqdjj, err: błąd rpc: kod = Nieznany desc = nie można zainstalować obiektów, błąd: nie można pobrać objectType:secret, objectName:test-cert-chain, objectVersion:: keyvault. BaseClient#GetSecret: Błąd odpowiedzi na żądanie: StatusCode=404 -- Oryginalny błąd: autorest/azure: Usługa zwróciła błąd. Status=404 Code="SecretNotFound" Message="Wpis tajny z (name/id) test-cert-chain nie został znaleziony w tym magazynie kluczy. Jeśli ostatnio usunięto ten wpis tajny, możesz go odzyskać przy użyciu poprawnego polecenia odzyskiwania. Aby uzyskać pomoc dotyczącą rozwiązywania tego problemu, zobacz https://go.microsoft.com/fwlink/?linkid=2125182"

Zasoby

Zastrzeżenie dotyczące innych firm

Produkty innych firm omówione w tym artykule są wytwarzane przez producentów niezależnych od firmy Microsoft. Firma Microsoft nie udziela żadnych gwarancji, dorozumianych ani żadnego innego rodzaju, w odniesieniu do wydajności lub niezawodności tych produktów.

Wyłączenie odpowiedzialności za kontakty z osobami trzecimi

Firma Microsoft udostępnia informacje kontaktowe innych firm, aby uzyskać dodatkowe informacje na temat tego tematu. Informacje te mogą zostać zmienione bez powiadomienia. Firma Microsoft nie gwarantuje dokładności informacji kontaktowych innych firm.

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.