排解代管 CNI 問題

本頁說明 Cloud Service Mesh 的常見 CNI 管理問題,以及如何解決這些問題。如需其他協助,請參閱「取得支援」。

已啟用不支援的受管理 CNI 設定

如果使用 TRAFFIC_DIRECTOR 控制層實作代管 Cloud Service Mesh,就必須使用代管 CNI,且無法停用。如果 mesh.cloud.google.com/managed-cni-enabled 標籤存在,但控制層修訂版本 (CPR) 自訂資源 (CR) 中沒有 true 值,或是 asm-options configmap 中的 CNI 項目存在,但沒有 on 值,您可能會在功能狀態訊息中看到 CNI_CONFIG_UNSUPPORTED 程式碼。

如要解決這則錯誤訊息,請務必移除所有停用受管理 CNI 的嘗試。

  • 情況 1:在叢集的 CPR CR 中移除「Managed CNI Enabled」標籤。

    apiVersion: v1
    items:
    - apiVersion: mesh.cloud.google.com/v1beta1
      kind: ControlPlaneRevision
      metadata:
        annotations:
          mesh.cloud.google.com/proxy: '{"managed":"false"}'
        creationTimestamp: "2024-02-18T08:13:30Z"
        generation: 1
        labels:
          app.kubernetes.io/created-by: mesh.googleapis.com
          mesh.cloud.google.com/managed-cni-enabled: false # Remove the "mesh.cloud.google.com/managed-cni-enabled" label
        name: asm-managed
        namespace: istio-system
        resourceVersion: "13422558"
        uid: 3ad755ec-78ab-4d57-8fb9-c5e1a07740d5
    
  • 情況 2:移除 CNI 項目 asm-options configmap ASM_OPTS 資料字串。

    apiVersion: v1
    data:
      ASM_OPTS: CNI=off # Remove CNI entry in the ASM_OPTS data.
      multicluster_mode: connected
    kind: ConfigMap
    metadata:
      creationTimestamp: "2024-02-18T08:13:30Z"
      name: asm-options
      namespace: istio-system
      resourceVersion: "1640225"
      uid: 576602da-e60b-4df7-9427-5be06e5bf014
    

CNI Pod 無法排程

如果受管理 CNI Daemonset 無法在叢集的任何節點中排定 Pod,您可能會看到這項錯誤。

請注意,叢集內資源在每個節點上至少需要 memory: 100Mi。詳情請參閱「Cloud Service Mesh 需求條件」。如果叢集已分配足夠的記憶體,請參閱「Pod 無法排程」一文,瞭解其他疑難排解步驟。

節點停滯在 NotReady 狀態,並出現缺少 containerID 的錯誤

升級 Google Kubernetes Engine (GKE) 版本後,如果叢集節點無法進入就緒狀態,您可能會看到這項錯誤。

錯誤訊息:

container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: missing containerID

原因:

這個問題是因 Cloud Service Mesh 容器網路介面 (CNI) 1.20.x 版與 GKE 中的容器網路介面 (CNI) 外掛程式不相容所致。CNI 外掛程式必須與 CNI 1.1.0 規格相容。執行 GKE 1.35.1-gke.1516000 以上版本的叢集會自動啟用對這項規格的支援。由於 Cloud Service Mesh CNI 1.20.x 版不支援 CNI 規格 1.1.0 版,節點健康狀態檢查會失敗,節點也會維持在 NotReady 狀態。

解決方法:

如果叢集仍執行 Cloud Service Mesh CNI 1.20.x 版,請勿將 GKE 節點集區升級至 1.35.1-gke.1516000 以上版本。

如果您已升級,但仍遇到這個問題,建議您將 GKE 版本降級至 1.35.1-gke.1516000 之前的版本,直到叢集的受管理 CNI 升級至 1.23.x 以上版本為止。