Udostępnij za pośrednictwem


Ogólne rozwiązywanie problemów z dodatkiem siatki usługi Istio

W tym artykule omówiono ogólne strategie (które używają kubectlistioctl, i innych narzędzi) do rozwiązywania problemów związanych z dodatkiem siatki usługi Istio dla usługi Microsoft Azure Kubernetes Service (AKS). Ten artykuł zawiera również listę możliwych komunikatów o błędach, przyczyn wystąpienia błędów i zaleceń dotyczących rozwiązywania tych błędów.

Wymagania wstępne

Lista kontrolna rozwiązywania problemów: korzystanie z narzędzia kubectl

Poniższe kroki rozwiązywania problemów używają różnych kubectl poleceń, aby ułatwić debugowanie zablokowanych zasobników lub błędów w demonie Istio (Istiod).

Krok 1. Pobieranie dzienników zasobnika istiod

Pobierz dzienniki zasobnika Istiod, uruchamiając następujące polecenie kubectl logs :

kubectl logs --selector app=istiod --namespace aks-istio-system

Krok 2. Odbicie (usuwanie) zasobnika

Może być dobrym powodem ponownego uruchomienia zasobnika. Ponieważ istiod jest wdrożeniem, można bezpiecznie po prostu usunąć zasobnik, uruchamiając polecenie kubectl delete :

kubectl delete pods <istio-pod> --namespace aks-istio-system

Zasobnik Istio jest zarządzany przez wdrożenie. Zostanie ona automatycznie ponownie utworzona i ponownie wdrożona po jego bezpośrednim usunięciu. W związku z tym usunięcie zasobnika jest alternatywną metodą ponownego uruchamiania zasobnika.

Uwaga 16.

Alternatywnie możesz ponownie uruchomić wdrożenie bezpośrednio, uruchamiając następujące polecenie ponownego uruchomienia wdrożenia kubectl:

kubectl rollout restart deployment <istiod-asm-revision> --namespace aks-istio-system

Krok 3. Sprawdzanie stanu zasobów

Jeśli program Istiod nie jest zaplanowany lub zasobnik nie odpowiada, warto sprawdzić stan wdrożenia i zestawy replik. W tym celu uruchom polecenie kubectl get :

kubectl get <resource-type> [[--selector app=istiod] | [<resource-name>]]

Bieżący stan zasobu jest wyświetlany pod koniec danych wyjściowych. Dane wyjściowe mogą również wyświetlać zdarzenia skojarzone z pętlą kontrolera.

Krok 4. Pobieranie niestandardowych typów definicji zasobów

Aby wyświetlić typy niestandardowych definicji zasobów (CRD), których używa Istio, uruchom kubectl get polecenie:

kubectl get crd | grep istio

Aby wyświetlić listę wszystkich nazw zasobów opartych na określonym identyfikatorze CRD, uruchom następujące kubectl get polecenie:

kubectl get <crd-type> --all-namespaces

Krok 5. Wyświetlanie listy zasobników Istiod

Aby wyświetlić listę zasobników Istiod, uruchom następujące kubectl get polecenie:

kubectl get pod --namespace aks-istio-system --output yaml

Krok 6. Uzyskiwanie dodatkowych informacji o konfiguracji usługi Envoy

Jeśli masz problemy z łącznością między zasobnikami, uzyskaj więcej informacji na temat konfiguracji usługi Envoy, uruchamiając następujące polecenie narzędzia kubectl exec względem portu administracyjnego usługi Envoy:

kubectl exec --namespace <pod-namespace> \
    "$(kubectl get pods \
        --namespace <pod-namespace> \
        --selector app=sleep \
        --output jsonpath='{.items[0].metadata.name}')" \
    --container sleep \
-- curl -s localhost:15000/clusters

Krok 7. Pobieranie dzienników przyczepki dla przyczepek źródłowych i docelowych

Pobierz dzienniki przyczepki dla źródłowych i docelowych przyczepek, uruchamiając dwa razy następujące kubectl logs polecenie (po raz pierwszy dla zasobnika źródłowego i po raz drugi dla zasobnika docelowego):

kubectl logs <pod-name> --namespace <pod-namespace> --container istio-proxy

Lista kontrolna rozwiązywania problemów: Korzystanie z istioctl

Poniższe kroki rozwiązywania problemów opisują sposób zbierania informacji i debugowania środowiska siatki przez uruchomienie różnych istioctl poleceń.

Wszystkie istioctl polecenia muszą być uruchamiane razem z flagą --istioNamespace aks-istio-system , aby wskazać instalację dodatku usługi AKS w środowisku Istio.

Ostrzeżenie

Niektóre istioctl polecenia wysyłają żądania do wszystkich przyczepek.

Uwaga 16.

Przed rozpoczęciem zwróć uwagę, że większość istioctl poleceń wymaga znajomości poprawki płaszczyzny sterowania. Te informacje można uzyskać z sufiksu wdrożeń istiod lub zasobników lub można uruchomić następujące polecenie listy tagów istioctl:

istioctl tag list

Krok 1. Upewnij się, że istio jest poprawnie zainstalowane

Aby sprawdzić, czy masz poprawną instalację dodatku Istio, uruchom następujące polecenie istioctl verify-install :

istioctl verify-install --istioNamespace aks-istio-system --revision <tag>

Krok 2. Analizowanie przestrzeni nazw

Aby przeanalizować wszystkie przestrzenie nazw lub przeanalizować określoną przestrzeń nazw, uruchom następujące polecenie istioctl analyze :

istioctl analyze --istioNamespace aks-istio-system \
    --revision <tag> \
    [--all-namespaces | --namespace <namespace-name>] \
    [--failure-threshold {Info | Warning | Error}]

Krok 3. Pobieranie stanu serwera proxy

Aby pobrać stan serwera proxy, uruchom następujące polecenie istioctl proxy-status :

istioctl proxy-status pod/<pod-name> \
    --istioNamespace aks-istio-system \
    --revision <tag> \
    --namespace <pod-namespace>

Krok 4. Pobieranie konfiguracji serwera proxy

Aby pobrać konfigurację serwera proxy, uruchom następujące polecenie istioctl proxy-config all :

istioctl proxy-config all <pod-name> \
    --istioNamespace aks-istio-system \
    --namespace <pod-namespace> \
    --output json

Uwaga 16.

Zamiast używać all wariantu istioctl proxy-config polecenia, można użyć jednego z następujących wariantów:

Krok 5. Sprawdzanie stanu wstrzyknięcia

Aby sprawdzić stan wstrzykiwania zasobu, uruchom następujące polecenie istioctl eksperymentalne check-inject :

istioctl experimental check-inject --istioNamespace aks-istio-system \
    --namespace <pod-namespace> \
    --labels <label-selector> | <pod-name> | deployment/<deployment-name>

Krok 6. Uzyskiwanie pełnego raportu o usterce

Pełny raport o usterce zawiera najbardziej szczegółowe informacje. Jednak uruchomienie tego raportu może być czasochłonne w dużym klastrze, ponieważ zawiera wszystkie zasobniki. Raport o błędach można ograniczyć do niektórych przestrzeni nazw. Raport można również ograniczyć do niektórych wdrożeń, zasobników lub selektorów etykiet.

Aby pobrać raport o usterce, uruchom następujące polecenie istioctl bug-report :

istioctl bug-report --istioNamespace aks-istio-system \
    [--include <namespace-1>[, <namespace-2>[, ...]]]

Lista kontrolna rozwiązywania problemów: Różne problemy

Krok 1. Rozwiązywanie problemów z użyciem zasobów

Jeśli w usłudze Envoy wystąpi wysokie użycie pamięci, sprawdź ustawienia usługi Envoy pod kątem zbierania danych statystycznych. W przypadku dostosowywania metryk Istio za pomocą polecenia MeshConfig należy pamiętać, że niektóre metryki mogą mieć wysoką kardynalność i w związku z tym utworzyć większą ilość pamięci. Inne pola w narzędziu MeshConfig, takie jak współbieżność, wpływają na użycie procesora CPU i powinny być starannie skonfigurowane.

Domyślnie istio dodaje informacje o wszystkich usługach, które znajdują się w klastrze do każdej konfiguracji usługi Envoy. Przyczepka może ograniczyć zakres tego dodatku do obciążeń, które znajdują się tylko w określonych przestrzeniach nazw. Aby uzyskać więcej informacji, zobacz Watch out for this Istio proxy sidecar memory pitfall (Uważaj na to pułapki pamięci przyczepki serwera proxy Istio).

Na przykład następująca Sidecar definicja w aks-istio-system przestrzeni nazw ogranicza konfigurację usługi Envoy dla wszystkich serwerów proxy w obrębie siatki do aks-istio-system i innych obciążeń w tej samej przestrzeni nazw co ta konkretna aplikacja:

apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
  name: sidecar-restrict-egress
  namespace: aks-istio-system  # Needs to be deployed in the root namespace.
spec:
  egress:
  - hosts:
    - "./*"
    - "aks-istio-system/*"

Możesz również spróbować użyć opcji Istio discoverySelectors w narzędziu MeshConfig. Opcja discoverySelectors zawiera tablicę selektorów Kubernetes i może ograniczyć świadomość Istiod do określonych przestrzeni nazw (w przeciwieństwie do wszystkich przestrzeni nazw w klastrze). Aby uzyskać więcej informacji, zobacz Use discovery selectors to configure namespaces for your Istio service mesh (Używanie selektorów odnajdywania do konfigurowania przestrzeni nazw dla siatki usługi Istio).

Krok 2. Rozwiązywanie problemów z błędną konfiguracją ruchu i zabezpieczeń

Aby rozwiązać typowe problemy z zarządzaniem ruchem i błędami konfiguracji zabezpieczeń, które często napotykają użytkownicy istio, zobacz Problemy z zarządzaniem ruchem i problemy z zabezpieczeniami w witrynie internetowej Istio.

Linki do dyskusji na temat innych problemów, takich jak wstrzykiwanie przyczepki, możliwość obserwowania i uaktualnienia, zobacz Typowe problemy w witrynie dokumentacji Istio.

Krok 3. Unikanie przeciążenia sieci CoreDNS

Problemy związane z przeciążeniem CoreDNS mogą wymagać zmiany niektórych ustawień dns istio, takich jak dnsRefreshRate pole w definicji Istio MeshConfig.

Krok 4. Napraw warunki wyścigu zasobnika i przyczepki

Jeśli zasobnik aplikacji zostanie uruchomiony przed uruchomieniem przyczepki usługi Envoy, aplikacja może nie odpowiadać lub może zostać uruchomiona ponownie. Aby uzyskać instrukcje dotyczące sposobu uniknięcia tego problemu, zobacz Zasobnik lub kontenery zaczynają się od problemów z siecią, jeśli serwer istio-proxy nie jest gotowy. W szczególności ustawienie holdApplicationUntilProxyStarts pola defaultConfig MeshConfig w programie true może pomóc zapobiec tym warunkom wyścigu.

Krok 5. Konfigurowanie wpisu usługi podczas korzystania z serwera proxy HTTP dla ruchu wychodzącego

Jeśli klaster używa serwera proxy HTTP dla wychodzącego dostępu do Internetu, musisz skonfigurować wpis usługi. Aby uzyskać więcej informacji, zobacz Obsługa serwera proxy HTTP w usłudze Azure Kubernetes Service.

Komunikaty o błędach

Poniższa tabela zawiera listę możliwych komunikatów o błędach (w przypadku wdrażania dodatku, włączania bram ruchu przychodzącego i przeprowadzania uaktualnień), przyczyny wystąpienia błędu oraz zaleceń dotyczących rozwiązywania błędu.

Błąd Przyczyna Zalecenia
Azure service mesh is not supported in this region Funkcja nie jest dostępna w regionie w wersji zapoznawczej (jest dostępna w chmurze publicznej, ale nie w suwerennej chmurze). Zapoznaj się z publiczną dokumentacją dotyczącą funkcji obsługiwanych regionów.
Missing service mesh mode: {} Nie ustawiono właściwości trybu w profilu usługi service mesh żądania klastra zarządzanego. W polu ServiceMeshProfile żądania interfejsu managedCluster API ustaw mode właściwość na Istio.
Invalid istio ingress mode: {} Ustawiasz nieprawidłową wartość trybu ruchu przychodzącego podczas dodawania ruchu przychodzącego w profilu usługi Service Mesh. Ustaw tryb ruchu przychodzącego w żądaniu interfejsu API na External wartość lub Internal.
Too many ingresses for type: {}. Only {} ingress gateway are allowed Próbowano utworzyć zbyt wiele ruchu przychodzącego w klastrze. Utwórz co najwyżej jeden zewnętrzny ruch przychodzący i jeden wewnętrzny ruch przychodzący w klastrze.
Istio profile is missing even though Service Mesh mode is Istio Dodatek Istio został włączony bez podawania profilu Istio. Po włączeniu dodatku Istio określ informacje specyficzne dla składnika (brama ruchu przychodzącego, urząd certyfikacji wtyczki) dla profilu Istio i określoną poprawkę.
Istio based Azure service mesh is incompatible with feature %s Próbowano użyć innego rozszerzenia, dodatku lub funkcji, która jest obecnie niezgodna z dodatkiem Istio (na przykład Open Service Mesh). Przed włączeniem dodatku Istio najpierw wyłącz drugą funkcję i wyczyść wszystkie odpowiednie zasoby.
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority Nie podawaliśmy wszystkich wymaganych parametrów dla wtyczki urzędu certyfikacji. Podaj wszystkie wymagane parametry funkcji urzędu certyfikacji wtyczki (CA) (aby uzyskać więcej informacji, zobacz Konfigurowanie dodatku siatki usług opartej na istio z certyfikatami urzędu certyfikacji wtyczki).
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature Dodatek AKS Secrets-Store CSI Driver nie został włączony przed rozpoczęciem korzystania z urzędu certyfikacji wtyczki. Skonfiguruj usługę Azure Key Vault przed użyciem funkcji wtyczki urzędu certyfikacji.
'KeyVaultId': '%s' is not a valid Azure keyvault resource identifier. Please make sure that the format matches '/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/' Użyto nieprawidłowego identyfikatora zasobu usługi AKS. Zobacz format wymieniony w komunikacie o błędzie, aby ustawić prawidłowy identyfikator usługi Azure Key Vault dla funkcji urzędu certyfikacji wtyczki.
Kubernetes version is missing in orchestrator profile W żądaniu brakuje wersji rozwiązania Kubernetes. W związku z tym nie może przeprowadzić sprawdzania zgodności wersji. Upewnij się, że udostępniasz wersję platformy Kubernetes w operacjach uaktualniania dodatku Istio.
Service mesh revision %s is not compatible with cluster version %s. To find information about mesh-cluster compatibility, use 'az aks mesh get-upgrades' Podjęto próbę włączenia poprawki dodatku Istio niezgodnej z bieżącą wersją klastra Kubernetes. Użyj polecenia az aks mesh get-upgrades interfejsu wiersza polecenia platformy Azure, aby dowiedzieć się, które poprawki dodatku Istio są dostępne dla bieżącego klastra.
Kubernetes version %s not supported. Please upgrade to a supported cluster version first. To find compatibility information, use 'az aks mesh get-upgrades' Używasz nieobsługiwanej wersji platformy Kubernetes. Uaktualnij do obsługiwanej wersji rozwiązania Kubernetes.
ServiceMeshProfile revision field must not be empty Podjęto próbę uaktualnienia dodatku Istio bez określania poprawki. Określ poprawkę i wszystkie inne parametry (aby uzyskać więcej informacji, zobacz Drobne uaktualnianie poprawek).
Request exceeds maximum allowed number of revisions (%d) Próbowano wykonać operację uaktualniania, mimo że są już (%d) zainstalowane poprawki. Ukończ lub wycofaj operację uaktualniania przed uaktualnieniem do innej wersji.
Mesh upgrade is in progress. Please complete or roll back the current upgrade before attempting to retrieve versioning and compatibility information Próbowano uzyskać dostęp do informacji o poprawkach i zgodności przed ukończeniem lub wycofywaniem bieżącej operacji uaktualniania. Ukończ lub wycofaj bieżącą operację uaktualniania przed pobraniem informacji o poprawkach i zgodności.

Informacje

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.

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.