Konfigurowanie dodatku siatki usług opartej na technologii Istio dla usługi Azure Kubernetes Service

Istio typu open source używa narzędzia MeshConfig do definiowania ustawień dotyczących całej siatki usługi Istio. Dodatek siatki usług oparty na systemie Istio dla usługi AKS jest oparty na kompilacji MeshConfig i klasyfikuje różne właściwości jako obsługiwane, dozwolone i zablokowane.

W tym artykule opisano sposób konfigurowania dodatku siatki usług opartej na systemie Istio dla usługi Azure Kubernetes Service i zasad pomocy technicznej mających zastosowanie do takiej konfiguracji.

Wymagania wstępne

W tym przewodniku założono, że wykonano czynności opisane w dokumentacji , aby włączyć dodatek Istio w klastrze usługi AKS.

Konfigurowanie konfiguracji w klastrze

  1. Dowiedz się, która wersja rozwiązania Istio jest wdrażana w klastrze:

    az aks show --name $CLUSTER --resource-group $RESOURCE_GROUP --query 'serviceMeshProfile'
    

    Dane wyjściowe:

    {
      "istio": {
          "certificateAuthority": null,
          "components": {
          "egressGateways": null,
          "ingressGateways": null
          },
          "revisions": [
          "asm-1-18"
          ]
      },
      "mode": "Istio"
    }
    
  2. Utwórz ConfigMap z nazwą istio-shared-configmap-<asm-revision> w aks-istio-system przestrzeni nazw. Jeśli na przykład klaster działa w wersji asm-1-18 siatki, element ConfigMap musi mieć nazwę .istio-shared-configmap-asm-1-18 Konfiguracja siatki musi być podana w sekcji danych pod siatką.

    Przykład:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: istio-shared-configmap-asm-1-18
      namespace: aks-istio-system
    data:
      mesh: |-
        accessLogFile: /dev/stdout
        defaultConfig:
          holdApplicationUntilProxyStarts: true
    

    Wartości w obszarze defaultConfig to ustawienia całego siatki stosowane dla serwera proxy przyczepki usługi Envoy.

Uwaga

Domyślna ConfigMap (na przykład istio-asm-1-18 dla poprawki asm-1-18) jest tworzona w aks-istio-system przestrzeni nazw w klastrze po włączeniu dodatku Istio. Jednak ten domyślny element ConfigMap jest uzgadniany przez zarządzany dodatek Istio, dlatego użytkownicy nie powinni bezpośrednio edytować tej mapy konfiguracji. Zamiast tego użytkownicy powinni utworzyć przestrzeń nazw aks-istio shared ConfigMap (na przykład istio-shared-configmap-asm-1-18 w przypadku poprawki asm-1-18) w przestrzeni nazw aks-istio-system, a następnie płaszczyzna sterowania Istio scali to z domyślnym ConfigMap, z ustawieniami domyślnymi, które mają pierwszeństwo.

Konfiguracja i uaktualnienia usługi Mesh

W przypadku przeprowadzania uaktualnienia kanarkowego dla środowiska Istio należy utworzyć oddzielną ConfigMap dla nowej poprawki w aks-istio-system przestrzeni nazw przed zainicjowaniem uaktualnienia kanary. Dzięki temu konfiguracja jest dostępna po wdrożeniu płaszczyzny sterowania nowej poprawki w klastrze. Jeśli na przykład uaktualniasz siatkę z asm-1-18 do asm-1-19, musisz skopiować zmiany z istio-shared-configmap-asm-1-18 , aby utworzyć nową ConfigMap o nazwie istio-shared-configmap-asm-1-19 w aks-istio-system przestrzeni nazw.

Po zakończeniu uaktualnienia lub wycofaniu można usunąć ConfigMap poprawki usuniętej z klastra.

Dozwolone, obsługiwane i zablokowane wartości

Pola w tabeli MeshConfig są klasyfikowane w trzech kategoriach:

  • Zablokowane: niedozwolone pola są blokowane za pośrednictwem elementów webhook dostępu zarządzanego przez dodatek. Serwer interfejsu API natychmiast publikuje użytkownikowi komunikat o błędzie, którego pole jest niedozwolone.
  • Obsługiwane: Obsługiwane pola (na przykład pola związane z rejestrowaniem dostępu) otrzymują pomoc techniczną od pomoc techniczna platformy Azure.
  • Dozwolone: te pola (takie jak proxyListenPort lub proxyInboundListenPort) są dozwolone, ale nie są objęte pomoc techniczna platformy Azure.

Konfiguracja siatki i lista dozwolonych/obsługiwanych pól są poprawkami specyficznymi dla pól dodawanych/usuwanych w poprawkach. Pełna lista dozwolonych pól i obsługiwanych/nieobsługiwanych na liście dozwolonych znajduje się w poniższej tabeli. Po udostępnieniu nowej poprawki siatki wszelkie zmiany dozwolonej i obsługiwanej klasyfikacji pól są zanotowywane w tej tabeli.

MeshConfig

Pole Obsługiwane Uwagi
proxyListenPort fałsz -
proxyInboundListenPort fałsz -
proxyHttpPort fałsz -
Connecttimeout fałsz Możliwość konfigurowania w elemecie DestinationRule
tcpKeepAlive fałsz Możliwość konfigurowania w elemecie DestinationRule
defaultConfig prawda Służy do konfigurowania konfiguracji serwera proxy
outboundTrafficPolicy prawda Można również konfigurować w przyczepce CR
extensionProviders fałsz -
defaultProviders fałsz -
accessLogFile prawda -
accessLogFormat prawda -
accessLogEncoding prawda -
enableTracing prawda -
enableEnvoyAccessLogService prawda -
disableEnvoyListenerLog prawda -
trustDomain fałsz -
trustDomainAliases fałsz -
caCertificates fałsz Możliwość konfigurowania w elemecie DestinationRule
defaultServiceExportTo fałsz Konfigurowalne w usłudze ServiceEntry
defaultVirtualServiceExportTo fałsz Możliwość konfigurowania w usłudze wirtualnej
defaultDestinationRuleExportTo fałsz Możliwość konfigurowania w elemecie DestinationRule
localityLbSetting fałsz Możliwość konfigurowania w elemecie DestinationRule
dnsRefreshRate fałsz -
h2UpgradePolicy fałsz Możliwość konfigurowania w elemecie DestinationRule
enablePrometheusMerge prawda -
discoverySelectors prawda -
pathNormalization fałsz -
defaultHttpRetryPolicy fałsz Możliwość konfigurowania w usłudze wirtualnej
usługa Ustawienia fałsz -
meshMTLS fałsz -
tlsDefaults fałsz -

ProxyConfig (meshConfig.defaultConfig)

Pole Obsługiwane
tracingServiceName prawda
opróżnianie prawda
statsUdpAddress fałsz
proxy Administracja Port fałsz
Śledzenia prawda
współbieżność prawda
envoyAccessLogService prawda
envoyMetricsService prawda
proxyMetadata fałsz
statusPort fałsz
extraStatTags fałsz
proxyStatsMatcher fałsz
terminationDrainDuration prawda
meshId fałsz
holdApplicationUntilProxyStarts prawda
caCertificatesPem fałsz
privateKeyProvider fałsz

Pola obecne w dokumentacji referencyjnej usługi MeshConfig typu open source, ale nie w powyższej tabeli są blokowane. Na przykład configSources jest zablokowany.

Uwaga

Zakres konfiguracji pomocy technicznej: Konfiguracja usługi Mesh umożliwia dostawcom rozszerzeń, takim jak wystąpienia własne zipkin lub apache Skywalking, które mają być skonfigurowane za pomocą dodatku Istio. Jednak ci dostawcy rozszerzeń znajdują się poza zakresem pomocy technicznej dodatku Istio. Wszelkie problemy związane z narzędziami rozszerzenia znajdują się poza granicą pomocy technicznej dodatku Istio.

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

  • Upewnij się, że właściwość MeshConfig jest wcięta ze spacjami zamiast kart.
  • Upewnij się, że edytujesz tylko udostępnioną ConfigMap poprawkę (na przykład istio-shared-configmap-asm-1-18) i nie próbujesz edytować domyślnej ConfigMap (na przykład istio-asm-1-18).
  • ConfigMap musi być zgodna z nazwą istio-shared-configmap-<asm-revision> i znajdować się w aks-istio-system przestrzeni nazw.
  • Upewnij się, że wszystkie pola MeshConfig są poprawnie napisane. Jeśli są nierozpoznane lub jeśli nie są częścią listy dozwolonych, kontrola dostępu odrzuca takie konfiguracje.
  • Podczas przeprowadzania uaktualnień kanarowych sprawdź poprawek określoną konfigurację Mapy aby upewnić się, że konfiguracje istnieją dla wersji wdrożonych w klastrze.
  • Niektóre MeshConfig opcje, takie jak accessLogging, mogą zwiększyć użycie zasobów usługi Envoy, a wyłączenie niektórych z tych ustawień może ograniczyć wykorzystanie zasobów płaszczyzny danych Istio. Zaleca się również użycie discoverySelectors pola w elemecie MeshConfig w celu złagodzenia zużycia pamięci dla istiod i wysłannika.
  • concurrency Jeśli pole w usłudze MeshConfig jest nieprawidłowo skonfigurowane i ustawione na zero, spowoduje to, że usługa Envoy będzie używać wszystkich rdzeni procesora CPU. Zamiast tego, jeśli to pole jest niezastawione, liczba wątków roboczych do uruchomienia jest automatycznie określana na podstawie żądań/limitów procesora CPU.
  • Warunki wyścigu pod i przyczepki, w których aplikacja rozpoczyna się przed Envoy można złagodzić przy użyciu holdApplicationUntilProxyStarts pola w MeshConfig.