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
Narzędzie Kubernetes kubectl lub podobne narzędzie do nawiązywania połączenia z klastrem. Aby zainstalować narzędzie kubectl przy użyciu interfejsu wiersza polecenia platformy Azure, uruchom polecenie az aks install-cli .
Następujące standardowe narzędzia powłoki w stylu systemu Linux:
grep
sort
tail
awk
xargs
Narzędzie jq do wykonywania zapytań dotyczących danych JSON.
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 waks-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 waks-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 waks-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 waks-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 kluczucacerts
tajnym Kubernetes, nie jest zgodny z mapąistio-ca-root-cert
konfiguracji waks-istio-system
przestrzeni nazw, uruchomiistiod-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
Ogólne rozwiązywanie problemów z dodatkiem siatki usługi Istio
Rozwiązywanie problemów z dodatkiem siatki usługi Istio MeshConfig
Rozwiązywanie problemów z dodawaniem bramy ruchu przychodzącego w usłudze Istio service mesh
Rozwiązywanie problemów z dodatkiem usługi Istio service mesh w wersji pomocniczej
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.