Configurare il componente aggiuntivo mesh di servizi basato su Istio per il servizio Azure Kubernetes

Istio open source usa MeshConfig per definire le impostazioni di mesh per la mesh del servizio Istio. Il componente aggiuntivo mesh del servizio basato su Istio per il servizio Azure Kubernetes si basa su MeshConfig e classifica diverse proprietà come supportate, consentite e bloccate.

Questo articolo illustra come configurare il componente aggiuntivo mesh di servizi basato su Istio per il servizio Azure Kubernetes e i criteri di supporto applicabili per la configurazione.

Prerequisiti

Questa guida presuppone che sia stata seguita la documentazione per abilitare il componente aggiuntivo Istio in un cluster del servizio Azure Kubernetes.

Impostare la configurazione nel cluster

  1. Individuare quale versione di Istio è implementata nel cluster:

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

    Output:

    {
      "istio": {
          "certificateAuthority": null,
          "components": {
          "egressGateways": null,
          "ingressGateways": null
          },
          "revisions": [
          "asm-1-18"
          ]
      },
      "mode": "Istio"
    }
    
  2. Creare un oggetto ConfigMap con il nome istio-shared-configmap-<asm-revision> nello spazio dei nomi aks-istio-system. Ad esempio, se il cluster esegue la revisione di mesh asm-1-18, il ConfigMap deve essere denominato come istio-shared-configmap-asm-1-18. La configurazione mesh deve essere fornita nella sezione dati della mesh.

    Esempio:

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

    I valori in defaultConfig sono impostazioni di mesh applicate al proxy sidecar Envoy.

Attenzione

Quando il componente aggiuntivo Istio è abilitato, un oggetto ConfigMap predefinito (ad esempio, istio-asm-1-18 per la revisione asm-1-18) viene creato nello spazio dei nomi aks-istio-system del cluster. Tuttavia, le differenze di questo ConfigMap predefinito vengono risolte dal componente aggiuntivo gestito di Istio; pertanto, gli utenti devono astenersi dal modificare direttamente il ConfigMap. Gli utenti devono invece creare un ConfigMap condiviso di Istio specifico alla revisione (come istio-shared-configmap-asm-1-18 per la revisione asm-1-18) nello spazio dei nomi aks-istio-system. Il piano di controllo di Istio procederà quindi a combinarlo con il ConfigMap predefinito, dando la precedenza alle impostazioni predefinite.

Configurazione e aggiornamenti mesh

Quando si esegue l’aggiornamento canary per Istio, è necessario creare un ConfigMap a parte per la nuova revisione nello spazio dei nomi aks-istio-system prima di avviare l'aggiornamento canary. In questo modo, la configurazione sarà disponibile quando il piano di controllo della nuova revisione viene implementato nel cluster. Ad esempio, per aggiornare la mesh da asm-1-18 a asm-1-19, è necessario copiare le modifiche da istio-shared-configmap-asm-1-18 per creare un nuovo ConfigMap denominato istio-shared-configmap-asm-1-19 nello spazio dei nomi aks-istio-system.

Dopo aver completato l’aggiornamento o averne eseguito il rollback, il ConfigMap della revisione rimossa dal cluster può essere eliminato.

Valori MeshConfig consentiti, supportati e bloccati

I campi in MeshConfig sono classificati come allowed, supportedo blocked. Per altre informazioni su queste categorie, vedere i criteri di supporto per le funzionalità e le opzioni di configurazione dei componenti aggiuntivi Istio.

La configurazione mesh e l'elenco dei campi consentiti/supportati sono revisioni specifiche volte a tenere conto dei campi aggiunti/rimossi nelle revisioni. L'elenco completo dei campi consentiti e quelli supportati/non supportati all'interno dell'elenco consentito è disponibile nella seguente tabella. Quando una nuova revisione del mesh viene resa disponibile, tutte le modifiche apportate alla classificazione dei campi consentita e supportata sono indicate in questa tabella.

MeshConfig

I campi presenti nella documentazione di riferimento open source MeshConfig non trattati nella tabella seguente sono bloccati. Ad esempio, configSources è bloccato.

Campo Supportato/Consentito Note
proxyListenPort Consentito -
proxyInboundListenPort Consentito -
proxyHttpPort Consentito -
connectTimeout Consentito Configurabile in DestinationRule
tcpKeepAlive Consentito Configurabile in DestinationRule
defaultConfig Supportata Usato per configurare ProxyConfig
outboundTrafficPolicy Supportata Configurabile anche in Sidecar CR
extensionProviders Consentito -
defaultProviders Consentito -
accessLogFile Supportata Questo campo riguarda la generazione dei log di accesso. Per un'esperienza gestita sulla raccolta e l'esecuzione di query sui log, vedere Informazioni dettagliate sui contenitori di Monitoraggio di Azure nel servizio Azure Kubernetes. È consigliabile configurare la registrazione dell'accesso tramite l'API telemetria.
accessLogFormat Supportata Questo campo riguarda la generazione dei log di accesso. Per un'esperienza gestita sulla raccolta e l'esecuzione di query sui log, vedere Informazioni dettagliate sui contenitori di Monitoraggio di Azure nel servizio Azure Kubernetes
accessLogEncoding Supportata Questo campo riguarda la generazione dei log di accesso. Per un'esperienza gestita sulla raccolta e l'esecuzione di query sui log, vedere Informazioni dettagliate sui contenitori di Monitoraggio di Azure nel servizio Azure Kubernetes
enableTracing Consentito È consigliabile configurare la traccia tramite l'API telemetria.
enableEnvoyAccessLogService Supportata Questo campo riguarda la generazione dei log di accesso. Per un'esperienza gestita sulla raccolta e l'esecuzione di query sui log, vedere Informazioni dettagliate sui contenitori di Monitoraggio di Azure nel servizio Azure Kubernetes
disableEnvoyListenerLog Supportata Questo campo riguarda la generazione dei log di accesso. Per un'esperienza gestita sulla raccolta e l'esecuzione di query sui log, vedere Informazioni dettagliate sui contenitori di Monitoraggio di Azure nel servizio Azure Kubernetes
trustDomain Consentito -
trustDomainAliases Consentito -
caCertificates Consentito Configurabile in DestinationRule
defaultServiceExportTo Consentito Configurabile in ServiceEntry
defaultVirtualServiceExportTo Consentito Configurabile in VirtualService
defaultDestinationRuleExportTo Consentito Configurabile in DestinationRule
localityLbSetting Consentito Configurabile in DestinationRule
dnsRefreshRate Consentito -
h2UpgradePolicy Consentito Configurabile in DestinationRule
enablePrometheusMerge Consentito -
discoverySelectors Supportata -
pathNormalization Consentito -
defaultHttpRetryPolicy Consentito Configurabile in VirtualService
serviceSettings Consentito -
meshMTLS Consentito -
tlsDefaults Consentito -
ingressService Consentito Nome del servizio Kubernetes usato per il controller di ingresso istio.
ingressSelector Consentito Definisce la distribuzione del gateway da usare come controller di ingresso. Questo campo corrisponde al campo Gateway.selector e verrà impostato come istio: INGRESS_SELECTOR.

ProxyConfig (meshConfig.defaultConfig)

I campi presenti nella documentazione di riferimento open source MeshConfig non trattati nella tabella seguente sono bloccati.

Campo Supportato/Consentito Note
tracingServiceName Consentito È consigliabile configurare la traccia tramite l'API telemetria.
drainDuration Supportata -
statsUdpAddress Consentito -
proxyAdminPort Consentito -
tracing Consentito È consigliabile configurare la traccia tramite l'API telemetria.
concurrency Supportata -
envoyAccessLogService Consentito È consigliabile configurare la traccia tramite l'API telemetria.
envoyMetricsService Consentito È consigliabile configurare la raccolta di metriche tramite l'API telemetria.
proxyMetadata Consentito -
statusPort Consentito -
extraStatTags Consentito -
proxyStatsMatcher Consentito -
terminationDrainDuration Supportata -
meshId Consentito -
holdApplicationUntilProxyStarts Supportata -
caCertificatesPem Consentito -
privateKeyProvider Consentito -

Attenzione

Ambito di supporto delle configurazioni: la configurazione mesh consente ai provider di estensioni, come istanze autogestite di Zipkin o Apache Skycker, di essere configurati con il componente aggiuntivo Istio. Tuttavia, questi provider di estensioni non rientrano nell'ambito di supporto del componente aggiuntivo Istio. Eventuali problemi associati agli strumenti di estensione non rientrano nel limite del supporto del componente aggiuntivo Istio.

Errori frequenti e suggerimenti per la risoluzione dei problemi

  • Assicurarsi che MeshConfig sia rientrato con spazi anziché tab.
  • Assicurarsi di modificare solo il ConfigMap condiviso relativo alla revisione (come istio-shared-configmap-asm-1-18) e non tentare di modificare il ConfigMap predefinito (come istio-asm-1-18).
  • ConfigMap deve seguire il nome istio-shared-configmap-<asm-revision> e trovarsi nello spazio dei nomi aks-istio-system.
  • Assicurarsi che tutti i campi MeshConfig siano digitati correttamente. Se non sono riconosciute o se non fanno parte dell'elenco autorizzato, il controllo di ammissione rifiuta le configurazioni.
  • Quando si eseguono aggiornamenti canary, controllare i ConfigMap relativi alla revisione per assicurarsi che le configurazioni per le revisioni implementate nel cluster siano esistenti.
  • Alcune opzioni MeshConfig, come accessLogging, possono aumentare l'utilizzo delle risorse di Envoy. Disabilitare alcune di queste impostazioni può ridurre l'utilizzo delle risorse del piano dati Istio. È anche consigliabile usare il campo discoverySelectors in MeshConfig per ridurre il consumo di memoria per Istiod ed Envoy.
  • Se il campo concurrency in MeshConfig non è configurato correttamente ed è impostato su zero, Envoy utilizzerà tutti i core CPU. Se invece il campo non è impostato, il numero di thread di lavoro da eseguire verrà determinato automaticamente in base alle richieste/limiti della CPU.
  • Race condition di pod e sidecar in cui l'applicazione è avviata prima che Envoy possa essere mitigato usando il campo holdApplicationUntilProxyStarts nel MeshConfig.