Udostępnij przez


Skonfiguruj dodatek na bazie Istio dla siatki usług dla Azure Kubernetes Service

Open-source'owa Istio używa MeshConfig do definiowania ustawień dla całej siatki w ramach usługi Istio. Dodatek do siatki usług opartej na Istio dla AKS opiera się na MeshConfig i klasyfikuje różne właściwości jako obsługiwane, dozwolone i zablokowane.

Ten artykuł objaśnia, jak skonfigurować dodatek dla siatki serwisowej opartej na Istio dla usługi Azure Kubernetes oraz politykę wsparcia obowiązującą dla takiej konfiguracji.

Wymagania wstępne

Przewodnik zakłada, że postępowałeś zgodnie z dokumentacją, aby włączyć dodatek Istio na klastrze AKS.

Skonfiguruj klaster

  1. Dowiedz się, która wersja Istio jest wdrożona na klastrze:

    export RANDOM_SUFFIX=$(head -c 3 /dev/urandom | xxd -p)
    export CLUSTER="my-aks-cluster"
    export RESOURCE_GROUP="my-aks-rg$RANDOM_SUFFIX"
    az aks show --name $CLUSTER --resource-group $RESOURCE_GROUP --query 'serviceMeshProfile' --output json
    

    Wyniki:

    {
      "istio": {
        "certificateAuthority": null,
        "components": {
          "egressGateways": null,
          "ingressGateways": null
        },
        "revisions": [
          "asm-1-24"
        ]
      },
      "mode": "Istio"
    }
    

    To polecenie pokazuje profil siatki usługi Istio, w tym poprawki aktualnie wdrożone w klastrze usługi AKS.

  2. Utwórz ConfigMap o nazwie istio-shared-configmap-<asm-revision> w przestrzeni nazw aks-istio-system. Na przykład, jeśli twój klaster działa na wersji asm-1-24 sieci, to ConfigMap musi być nazwany jako istio-shared-configmap-asm-1-24. Konfiguracja siatki musi być dostarczona w sekcji danych pod siatką.

    Przykład:

    cat <<EOF > istio-shared-configmap-asm-1-24.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: istio-shared-configmap-asm-1-24
      namespace: aks-istio-system
    data:
      mesh: |-
        accessLogFile: /dev/stdout
        defaultConfig:
          holdApplicationUntilProxyStarts: true
    EOF
    kubectl apply -f istio-shared-configmap-asm-1-24.yaml
    

    Wyniki:

    configmap/istio-shared-configmap-asm-1-24 created
    

    Wartości pod defaultConfig są ustawieniami dotyczącymi całej siatki, stosowanymi dla proxy Envoy sidecar.

Ostrzeżenie

Domyślny ConfigMap (na przykład istio-asm-1-24 dla wersji asm-1-24) jest tworzony w przestrzeni nazw aks-istio-system na klastrze, kiedy włączony jest dodatek Istio. Domyślna mapa ConfigMap jest uzgadniana przez zarządzany dodatek Istio, dlatego użytkownicy nie powinni bezpośrednio jej edytować. Zamiast tego użytkownicy powinni utworzyć współdzielony ConfigMap Istio specyficzny dla rewizji (na przykład istio-shared-configmap-asm-1-24 dla rewizji asm-1-24) w przestrzeni nazw aks-istio-system, a następnie płaszczyzna kontrolna Istio połączy go z domyślnym ConfigMap, przy czym domyślne ustawienia będą miały pierwszeństwo.

Konfiguracja i modernizacje sieci mesh

Podczas wykonywania aktualizacji kanarkowej dla Istio musisz utworzyć oddzielny ConfigMap dla nowej wersji w przestrzeni nazw aks-istio-systemprzed rozpoczęciem aktualizacji kanarkowej. W ten sposób konfiguracja jest dostępna, gdy płaszczyzna kontrolna nowej wersji jest wdrażana w klastrze. Na przykład, jeśli dokonujesz uaktualnienia sieci z asm-1-24 do asm-1-25, musisz skopiować zmiany z istio-shared-configmap-asm-1-24, aby utworzyć nowy ConfigMap o nazwie istio-shared-configmap-asm-1-25 w przestrzeni nazw aks-istio-system.

Po zakończeniu lub wycofaniu aktualizacji można usunąć ConfigMap wersji, która została usunięta z klastra.

Dopuszczone, obsługiwane i zablokowane wartości MeshConfig

Pola w MeshConfig są klasyfikowane jako allowed, supported, lub blocked. Aby dowiedzieć się więcej o tych kategoriach, zapoznaj się z polityką wsparcia dotyczącą funkcji dodatkowych i opcji konfiguracji Istio.

Konfiguracja siatki oraz lista dozwolonych/wspieranych pól są specyficzne dla danej wersji, aby uwzględniać dodawanie/usuwanie pól w kolejnych wersjach. Pełna lista dozwolonych pól oraz tych, które są obsługiwane/nieobsługiwane w ramach dozwolonej listy, jest przedstawiona w poniższej tabeli. Gdy dostępna jest nowa wersja siatki, wszelkie zmiany w dozwolonej i obsługiwanej klasyfikacji pól są odnotowywane w tej tabeli.

MeshConfig

Pola obecne w dokumentacji referencyjnej open source MeshConfig, które nie są uwzględnione w poniższej tabeli, są zablokowane. Na przykład, configSources jest zablokowany.

Pole Obsługiwane/Dozwolone Notatki
proxyListenPort Dozwolone -
proxyInboundListenPort Dozwolone -
proxyHttpPort Dozwolone -
limitCzasuPołączenia (connectTimeout) Dozwolone Możliwe do skonfigurowania w DestinationRule
tcpKeepalive Dozwolone Możliwe do skonfigurowania w DestinationRule
domyślnaKonfiguracja Wspierany Używane do konfiguracji ProxyConfig
polityka ruchu wychodzącego Wspierany Również konfigurowalne w Sidecar CR
dostawcy rozszerzeń Dozwolone -
domyślni dostawcy Dozwolone -
plik dziennika dostępu Wspierany To pole dotyczy generowania dzienników dostępu. Aby uzyskać zarządzane doświadczenie w zakresie zbierania i zapytań logów, zapoznaj się z Azure Monitor Container Insights na AKS. Zaleca się skonfigurowanie logowania dostępu za pomocą interfejsu API Telemetrii.
accessLogFormat Wspierany To pole dotyczy generowania dzienników dostępu. Aby uzyskać zarządzane doświadczenia w zakresie zbierania i odpytywania dzienników, zapoznaj się z Azure Monitor Container Insights na AKS.
KodowanieDziennikaDostępu Wspierany To pole dotyczy generowania dzienników dostępu. Aby uzyskać zarządzane doświadczenia w zakresie zbierania i odpytywania dzienników, zapoznaj się z Azure Monitor Container Insights na AKS.
włączanie śledzenia Dozwolone Zaleca się konfigurowanie śledzenia za pomocą API telemetrii.
włączEnvoyDziennikDostępuUsługi Wspierany To pole dotyczy generowania dzienników dostępu. Aby uzyskać zarządzane doświadczenia w zakresie zbierania i odpytywania dzienników, zapoznaj się z Azure Monitor Container Insights na AKS.
wyłączEnvoyListenerLog Wspierany To pole dotyczy generowania dzienników dostępu. Aby uzyskać zarządzane doświadczenia w zakresie zbierania i odpytywania dzienników, zapoznaj się z Azure Monitor Container Insights na AKS.
domena zaufania Dozwolone -
aliasy domen zaufania Dozwolone -
certyfikaty CA Dozwolone Możliwe do skonfigurowania w DestinationRule
domyślnaUsługaEksportDo Dozwolone Konfigurowalne w ServiceEntry
defaultVirtualServiceExportTo Dozwolone Konfigurowalne w VirtualService
domyślnaRegułaEksportuDoCelowegoMiejsca Dozwolone Możliwe do skonfigurowania w DestinationRule
localityLbSetting Dozwolone Możliwe do skonfigurowania w DestinationRule
częstotliwość odświeżania DNS Dozwolone -
PolitykaAktualizacji Dozwolone Możliwe do skonfigurowania w DestinationRule
enablePrometheusMerge Dozwolone -
discoverySelectors Wspierany -
normalizacja ścieżki Dozwolone -
domyślnaPolitykaPonawianiaHttp Dozwolone Konfigurowalne w VirtualService
ustawienia serwisu Dozwolone -
meshMTLS Dozwolone -
tlsDefaults Dozwolone -
ingressService Dozwolone Nazwa usługi Kubernetes używanej dla kontrolera ruchu przychodzącego Istio.
ingressSelector Dozwolone Określa, które wdrożenie bramy ma być używane jako kontroler ruchu przychodzącego. To pole odpowiada polu Gateway.selector i zostanie ustawione jako istio: INGRESS_SELECTOR.

ProxyConfig (meshConfig.defaultConfig)

Pola obecne w dokumentacji referencyjnej open source MeshConfig, które nie są uwzględnione w poniższej tabeli, są zablokowane.

Pole Obsługiwane/Dozwolone Notatki
tracingServiceName Dozwolone Zaleca się konfigurowanie śledzenia za pomocą API telemetrii.
czas osuszania Wspierany -
statsUdpAddress Dozwolone -
proxyAdminPort Dozwolone -
śledzenie Dozwolone Zaleca się konfigurowanie śledzenia za pomocą API telemetrii.
współbieżność Wspierany -
usługa dziennika dostępu envoy Dozwolone Zaleca się konfigurowanie śledzenia za pomocą API telemetrii.
envoyMetricsService Dozwolone Zaleca się skonfigurowanie zbierania metryk za pomocą interfejsu API Telemetrii.
metadane serwera proxy Dozwolone -
statusPort Dozwolone -
extraStatTags Dozwolone -
gatewayTopology Dozwolone -
proxyStatsMatcher Dozwolone -
czasOpróżnianiaPoZakończeniu Wspierany -
meshId Dozwolone -
wstrzymajAplikacjęDoCzasuUruchomieniaProxy Wspierany -
certyfikatyCaPem Dozwolone -
dostawcaKluczaPrywatnego Dozwolone -
proxyHeaders Dozwolone -

Ostrzeżenie

Zakres wsparcia konfiguracji: Konfiguracja siatki umożliwia dostawcom rozszerzeń, takim jak zarządzane samodzielnie instance Zipkin lub Apache Skywalking, konfigurację za pomocą dodatku Istio. Jednakże, ci dostawcy rozszerzeń nie są objęci zakresem wsparcia dodatku Istio. Wszelkie problemy związane z narzędziami rozszerzającymi znajdują się poza zakresem wsparcia dodatku Istio.

Typowe błędy i porady dotyczące rozwiązywania problemów

  • Upewnij się, że MeshConfig jest wcięty za pomocą spacji zamiast tabulatorów.
  • Upewnij się, że edytujesz tylko współdzielony ConfigMap specyficzny dla danej rewizji (na przykład istio-shared-configmap-asm-1-24), a nie próbujesz edytować domyślnego ConfigMap (na przykład istio-asm-1-24).
  • ConfigMap musi mieć nazwę istio-shared-configmap-<asm-revision> i znajdować się w przestrzeni nazw aks-istio-system.
  • Upewnij się, że wszystkie pola MeshConfig są prawidłowo napisane. Jeśli są nierozpoznane lub nie są częścią dozwolonej listy, kontrola dostępu odrzuca takie konfiguracje.
  • Podczas wykonywania uaktualnień kanarkowych, sprawdź specyficzne dla rewizji ConfigMapy, aby upewnić się, że konfiguracje istnieją dla rewizji wdrożonych na twoim klastrze.
  • Niektóre opcje MeshConfig, takie jak accessLogging, mogą zwiększać zużycie zasobów przez Envoy, a wyłączenie niektórych z tych ustawień może zmniejszyć wykorzystanie zasobów płaszczyzny danych w Istio. Zaleca się również użycie pola discoverySelectors w MeshConfig, aby pomóc zmniejszyć zużycie pamięci przez Istiod i Envoy.
  • Jeśli pole concurrency w MeshConfig jest błędnie skonfigurowane i ustawione na zero, powoduje, że Envoy zużywa wszystkie rdzenie procesora. Zamiast tego, jeśli to pole nie jest ustawione, liczba wątków roboczych do uruchomienia jest automatycznie określana na podstawie żądań/limitów CPU.
  • Warunki wyścigu dla poda i sidecara, w których aplikacja uruchamia się przed Envoyem, można złagodzić, używając pola holdApplicationUntilProxyStarts w MeshConfig.