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 定義中移除 concurrency
。 concurrency
如果未設定欄位,則 CPU 要求和限制會決定改用的 CPU 核心數目。
步驟 7:修正 Pod 和側車比賽條件
如果您的應用程式 Pod 會在 Envoy 側車啟動之前啟動,應用程式可能會變得沒有回應,或可能會重新啟動。 如需如何避免此問題的指示,請參閱 Pod 或容器從網路問題開始,如果 istio-proxy 尚未就緒。 具體來說,您可以將 [defaultConfig
MeshConfig] 字段設定holdApplicationUntilProxyStarts
為 ,true
以協助防止這些競爭條件。
參考資料
協力廠商資訊免責聲明
本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。
協力廠商連絡資訊免責聲明
Microsoft 提供協力廠商連絡資訊,以協助您尋找有關此主題的其他資訊。 此連絡資訊可能會變更而不另行通知。 Microsoft 不保證協力廠商連絡資訊的準確性。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。