設定適用於 Azure Kubernetes Service 的 Istio 型服務網格附加元件
開放原始碼 Istio 會使用 MeshConfig 來定義 Istio 服務網格的全網格設定。 適用於 AKS 的 Istio 型服務網格附加元件是根據 MeshConfig 所進行建置,並將不同的屬性分類為已支援、已允許和已封鎖。
本文逐步解說如何設定適用於 Azure Kubernetes Service 的 Istio 型服務網格附加元件,以及這類設定適用的支援原則。
必要條件
此指南假設您已遵循本文件的說明,在 AKS 叢集上啟用 Istio 附加元件。
設定叢集上的設定
找出叢集上所部署的 Istio 修訂:
az aks show --name $CLUSTER --resource-group $RESOURCE_GROUP --query 'serviceMeshProfile'
輸出:
{ "istio": { "certificateAuthority": null, "components": { "egressGateways": null, "ingressGateways": null }, "revisions": [ "asm-1-18" ] }, "mode": "Istio" }
在
aks-istio-system
命名空間中,建立名稱為istio-shared-configmap-<asm-revision>
的 ConfigMap。 例如,如果您的叢集正在執行網格的 asm-1-18 修訂,則 ConfigMap 需要命名為istio-shared-configmap-asm-1-18
。 網格設定必須在網格下方的資料區段內提供。範例:
apiVersion: v1 kind: ConfigMap metadata: name: istio-shared-configmap-asm-1-18 namespace: aks-istio-system data: mesh: |- accessLogFile: /dev/stdout defaultConfig: holdApplicationUntilProxyStarts: true
defaultConfig
下方的值是針對 Envoy Sidecar Proxy 套用的全網格設定。
警告
啟用 Istio 附加元件時,會在叢集的 aks-istio-system
命名空間中建立預設 ConfigMap (例如,針對修訂版本 asm-1-18,即為 istio-asm-1-18
)。 不過,此預設 ConfigMap 是由受控 Istio 附加元件所協調,因此使用者「不」應該直接編輯此 ConfigMap。 相反地,使用者應該在 aks-istio-system 命名空間中建立修訂特定 Istio 共用 ConfigMap (例如 istio-shared-configmap-asm-1-18
適用於修訂 asm-1-18),然後 Istio 控制平面會將此與預設 ConfigMap 合併,而且會優先使用預設設定。
網格設定和升級
針對 Istio 執行 Canary 升級時,必須先為 aks-istio-system
命名空間中的新修訂版本建立個別的 ConfigMap,才能起始 Canary 升級。 因此,在叢集上部署新修訂的控制平面時,可以使用此設定。 例如,如果您要將網格從 asm-1-18 升級為 asm-1-19,則需要從 istio-shared-configmap-asm-1-18
複製變更,以在 aks-istio-system
命名空間中建立稱為 istio-shared-configmap-asm-1-19
的新 ConfigMap。
升級完成或復原之後,您可以刪除已從叢集移除的修訂的 ConfigMap。
允許、支持和封鎖的 MeshConfig 值
中 MeshConfig
列分類為 allowed
、 supported
或 blocked
。 若要深入瞭解這些類別,請參閱 Istio 附加元件功能和組態選項的支持 原則。
網格設定和已允許/已支援欄位清單是跨修訂新增/移除的帳戶特定修訂。 下表提供完整的已允許欄位清單,以及已允許清單內支援/不支援的欄位清單。 有新的網格修訂可供使用時,此表格中會指出欄位已允許和已支援分類的任何變更。
MeshConfig
存在於開放原始碼 MeshConfig 參考文件中,但未包含於下表的欄位將會遭到封鎖。 例如,封鎖 configSources
。
欄位 | 支援/允許 | 注意事項 |
---|---|---|
proxyListenPort | 允許 | - |
proxyInboundListenPort | 允許 | - |
proxyHttpPort | 允許 | - |
connectTimeout | 允許 | 可在 DestinationRule 中設定 |
tcpKeepAlive | 允許 | 可在 DestinationRule 中設定 |
defaultConfig | 支援 | 用於設定 ProxyConfig |
outboundTrafficPolicy | 支援 | 也可在 Sidecar CR 中設定 |
extensionProviders | 允許 | - |
defaultProviders | 允許 | - |
accessLogFile | 支援 | 此欄位可解決存取記錄的產生。 如需收集及查詢記錄的受控體驗,請參閱 AKS 上的 Azure 監視器 Container Insights。 建議您透過 遙測 API 設定存取記錄。 |
accessLogFormat | 支援 | 此欄位可解決存取記錄的產生。 針對收集與查詢紀錄的受控經驗,請參閱 AKS 上的 Azure 監視器容器深入解析 |
accessLogEncoding | 支援 | 此欄位可解決存取記錄的產生。 針對收集與查詢紀錄的受控經驗,請參閱 AKS 上的 Azure 監視器容器深入解析 |
enableTracing | 允許 | 建議您透過 遙測 API 設定追蹤。 |
enableEnvoyAccessLogService | 支援 | 此欄位可解決存取記錄的產生。 針對收集與查詢紀錄的受控經驗,請參閱 AKS 上的 Azure 監視器容器深入解析 |
disableEnvoyListenerLog | 支援 | 此欄位可解決存取記錄的產生。 針對收集與查詢紀錄的受控經驗,請參閱 AKS 上的 Azure 監視器容器深入解析 |
trustDomain | 允許 | - |
trustDomainAliases | 允許 | - |
caCertificates | 允許 | 可在 DestinationRule 中設定 |
defaultServiceExportTo | 允許 | 可在 ServiceEntry 中設定 |
defaultVirtualServiceExportTo | 允許 | 可在 VirtualService 中設定 |
defaultDestinationRuleExportTo | 允許 | 可在 DestinationRule 中設定 |
localityLbSetting | 允許 | 可在 DestinationRule 中設定 |
dnsRefreshRate | 允許 | - |
h2UpgradePolicy | 允許 | 可在 DestinationRule 中設定 |
enablePrometheusMerge | 允許 | - |
discoverySelectors | 支援 | - |
pathNormalization | 允許 | - |
defaultHttpRetryPolicy | 允許 | 可在 VirtualService 中設定 |
serviceSettings | 允許 | - |
meshMTLS | 允許 | - |
tlsDefaults | 允許 | - |
ingressService | 允許 | 用於 istio 輸入控制器的 Kubernetes 服務名稱。 |
ingressSelector | 允許 | 定義要作為輸入控制器使用的閘道部署。 此欄位對應至 Gateway.selector 字段,並將設定為 istio:INGRESS_SELECTOR。 |
ProxyConfig (meshConfig.defaultConfig)
存在於開放原始碼 MeshConfig 參考文件中,但未包含於下表的欄位將會遭到封鎖。
欄位 | 支援/允許 | 注意事項 |
---|---|---|
tracingServiceName | 允許 | 建議您透過 遙測 API 設定追蹤。 |
drainDuration | 支援 | - |
statsUdpAddress | 允許 | - |
proxyAdminPort | 允許 | - |
tracing | 允許 | 建議您透過 遙測 API 設定追蹤。 |
concurrency | 支援 | - |
envoyAccessLogService | 允許 | 建議您透過 遙測 API 設定追蹤。 |
envoyMetricsService | 允許 | 建議您透過 遙測 API 來設定計量收集。 |
proxyMetadata | 允許 | - |
statusPort | 允許 | - |
extraStatTags | 允許 | - |
proxyStatsMatcher | 允許 | - |
terminationDrainDuration | 支援 | - |
meshId | 允許 | - |
holdApplicationUntilProxyStarts | 支援 | - |
caCertificatesPem | 允許 | - |
privateKeyProvider | 允許 | - |
警告
設定支援範圍:網格設定允許使用 Istio 附加元件來設定延伸模組提供者,例如 Zipkin 或 Apache Skywalking 的自我管理執行個體。 不過,這些延伸模組提供者並不屬於 Istio 附加元件的支援範圍。 任何與延伸工具相關的問題均不屬於 Istio 附加元件的支援範圍。
常見錯誤和疑難排解提示
- 請確定 MeshConfig 是縮排空格,而不是定位字元。
- 請確定您只編輯修訂特定共用 ConfigMap (例如
istio-shared-configmap-asm-1-18
),而不會嘗試編輯預設 ConfigMap (例如istio-asm-1-18
)。 - ConfigMap 必須遵循名稱
istio-shared-configmap-<asm-revision>
,而且位於aks-istio-system
命名空間中。 - 請確定所有 MeshConfig 欄位拼寫正確。 如果無法辨識或不是已允許清單的一部分,則許可控制會拒絕這類設定。
- 執行 Canary 升級時,請檢查修訂特定 ConfigMap,以確保具有叢集上所部署修訂的設定。
- accessLogging 這類特定
MeshConfig
選項可能會增加 Envoy 的資源耗用量,而停用其中一些設定可能會降低 Istio 資料平面資源使用率。 也建議您使用 MeshConfig 中的discoverySelectors
欄位,以協助減輕 Istiod 和 Envoy 的記憶體耗用量。 - 如果 MeshConfig 中的
concurrency
欄位設定錯誤且設定為零,則會導致 Envoy 用完所有 CPU 核心。 相反地,如果未設定此欄位,則會根據 CPU 要求/限制來自動決定要執行的背景工作執行緒數目。 - Pod 和 Sidecar 競爭條件,其中應用程式會在可使用 MeshConfig 中的
holdApplicationUntilProxyStarts
欄位來緩解 Envoy 之前啟動。