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
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" }
Creare un oggetto ConfigMap con il nome
istio-shared-configmap-<asm-revision>
nello spazio dei nomiaks-istio-system
. Ad esempio, se il cluster esegue la revisione di mesh asm-1-18, il ConfigMap deve essere denominato comeistio-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
, supported
o 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.
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 (comeistio-asm-1-18
). - ConfigMap deve seguire il nome
istio-shared-configmap-<asm-revision>
e trovarsi nello spazio dei nomiaks-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 campodiscoverySelectors
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.
Azure Kubernetes Service