共用方式為


Istio service mesh 附加元件 MeshConfig 疑難解答

本文討論如何使用 MeshConfig 來設定 Microsoft Azure Kubernetes Service (AKS) 的 Istio 服務網格附加元件所發生的問題。

Shared ConfigMap 組態

Istio 附加 元件 MeshConfig 可讓您設定特定的全網格設定。 若要這樣做,您要在命名空間中 aks-istio-system 建立本機 ConfigMap。 然後,Istio 控制平面會將這個 ConfigMap 與預設的 ConfigMap 合併。 (如果設定之間存在衝突,預設設定優先。此方法稱為共用 ConfigMap 組態。

建立命名空間中名為 istio-shared-configmap-<asm-revision>aks-istio-system ConfigMap。 例如,如果您使用修訂 asm-1-18,您應該將 ConfigMap 命名為 istio-shared-configmap-asm-1-18。 然後,您會在 區段的 data 欄位中提供網格組態mesh,如下列 ConfigMap YAML 檔案所示:

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 側車的全網格設定。

Canary 升級

開始 Canary 升級之前,請遵循 網格設定和升級指引 ,為命名空間中的 aks-istio-system 新控制平面修訂建立第二個共用 ConfigMap。

如果在開始升級之前未建立新的 ConfigMap,將無法存取共用 ConfigMap 所設定的任何功能。 若要修正此問題,請為對應的修訂建立遺漏的 ConfigMap,並從先前共用的 ConfigMap 複製相關字段。

如需詳細資訊,請參閱 升級 Azure Kubernetes Service 的 Istio 型服務網格附加元件和 Istio 服務網格附加元件次要修訂升級疑難解答

允許、支援和不允許的值

Istio 附加元件會將 MeshConfig 欄位指定為 allowed 和 supported,允許但 unsupported、 和 disallowed。 若要瞭解附加元件允許和支援的 MeshConfig 欄位,並查看不同支援層的概觀,請參閱 設定 Azure Kubernetes Service 的 Istio 型服務網格附加元件。 如果上游 Istio 檔中提及的欄位未出現在附加元件允許清單中,則不允許這些欄位。

疑難排解檢查清單

步驟 1:確定您正在編輯正確的 ConfigMap

  • 請確定您要設定共享的 ConfigMap(例如 istio-shared-configmap-asm-1-17),且未編輯預設的 ConfigMap (例如 , istio-asm-1-17
  • 請確定共用的 ConfigMap 在其標題中指向正確的修訂。

步驟 2:從共用 ConfigMap 內的 MeshConfig 定義中移除索引標籤縮排

在共用 ConfigMap 內的 MeshConfig 定義中(在 下 data.mesh),請確定您使用空格而非索引標籤。 拿掉您找到的任何索引標籤。

步驟 3:確定 MeshConfig 欄位有效

如果無法辨識或未包含在 MeshConfig 允許清單中,則會拒絕 MeshConfig 的更新。 檢查是否允許所需的 MeshConfig 欄位,並確定字段已正確拼字。

步驟 4:避免 CoreDNS 多載

與 CoreDNS 多載相關的問題可能需要您變更特定的 Istio DNS 設定,例如 dnsRefreshRate Istio MeshConfig 定義中的欄位。

步驟 5:修正記憶體耗用量問題

如果您在 Envoy 中遇到高記憶體耗用量,請仔細檢查 Envoy 設定以 取得統計數據數據收集。 如果您要透過 MeshConfig 自訂 Istio 計量,請記住,某些計量可以具有高基數,因此會導致記憶體使用量較高。

建議您使用 discoverySelectors MeshConfig 定義中的 欄位,以減少 Istiod 和 Envoy 的記憶體耗用量。 如需詳細資訊,請參閱 一般 Istio 服務網格附加元件疑難解答

步驟 6:免費 CPU 核心

如果所有 CPU 核心都正在使用中, concurrency MeshConfig 定義中的欄位可能會設定錯誤。 如果此欄位設定為零,Envoy 會使用所有 CPU 核心。 在此情況下,請從 MeshConfig 定義中移除 concurrencyconcurrency如果未設定欄位,則 CPU 要求和限制會決定改用的 CPU 核心數目。

步驟 7:修正 Pod 和側車比賽條件

如果您的應用程式 Pod 會在 Envoy 側車啟動之前啟動,應用程式可能會變得沒有回應,或可能會重新啟動。 如需如何避免此問題的指示,請參閱 Pod 或容器從網路問題開始,如果 istio-proxy 尚未就緒。 具體來說,您可以將 [defaultConfigMeshConfig] 字段設定holdApplicationUntilProxyStarts為 ,true以協助防止這些競爭條件。

參考資料

協力廠商資訊免責聲明

本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。

協力廠商連絡資訊免責聲明

Microsoft 提供協力廠商連絡資訊,以協助您尋找有關此主題的其他資訊。 此連絡資訊可能會變更而不另行通知。 Microsoft 不保證協力廠商連絡資訊的準確性。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。