本頁列出 GKE 網路的已知問題。本頁面適用於管理基礎技術基礎架構生命週期的管理員和架構師,以及在未達到服務水準目標 (SLO) 或應用程式失敗時,回應快訊和頁面的管理員和架構師。
如要依產品版本篩選已知問題,請從下列下拉式選單中選取篩選條件。
選取 GKE 版本:
或者,搜尋你的問題:
| 已識別的版本 | 已修正的版本 | 問題和解決方法 |
|---|---|---|
| 1.36 | 正在修正 |
使用第 4 層負載平衡器的 Windows 節點發生連線能力失敗和當機迴圈系統 Pod如果 GKE 叢集的 Windows Server 節點集區執行 1.36 版,可能會發生下列任一情況:
如果叢集使用第 4 層內部負載平衡器,但未啟用 GKE 子集,或使用舊版目標集區或執行個體群組的外部直通式網路負載平衡器,就會發生這個問題。在 GKE 1.36 中,Compute Engine 客體代理程式預設會在 Windows Server 上啟用 解決方法: 如要解決這個問題,請採取下列任一方法:
|
| InferencePool Helm 資訊套件 1.1.0 版 |
系統會忽略 InferencePool targetPortNumber 旗標在 解決方法: 安裝後,請驗證通訊埠: kubectl get inferencepool POOL_NAME -o jsonpath='{.spec.targetPorts}' \ --context=CLUSTER_CONTEXT 如果通訊埠不正確,請先修補 kubectl patch inferencepool POOL_NAME --type=merge \ -p '{"spec":{"targetPorts":[{"number":TARGET_PORT}]}}' \ --context=CLUSTER_CONTEXT |
|
| 1.33、1.34、1.35 |
|
刪除
|
| 1.29、1.30、1.31、1.32、1.33 | 1.34 |
刪除 FQDN 網路政策後,anetd Pod 中的
|
| 1.28、1.29、1.30、1.31、1.32、1.33 |
在採用 GKE Dataplane V2 的節點上,Pod IP 位址外洩如果叢集已啟用 GKE Dataplane V2,節點上的 Pod IP 位址可能會用盡。這個問題是由容器執行階段錯誤所造成,當 Pod 在建立期間發生暫時性 CNI 錯誤時,可能會洩漏分配的 IP 位址。 當 GKE 叢集節點升級至或建立為下列任一 GKE 版本時,就會觸發這個問題:
發生這個問題時,排定在受影響節點上的新 Pod 無法啟動,並會傳回類似以下的錯誤訊息: 解決方法: 如要緩解這個問題,您可以將緩解 DaemonSet 套用至叢集,清除外洩的 IP 資源: apiVersion: apps/v1 kind: DaemonSet metadata: name: cleanup-ipam-dir namespace: kube-system spec: selector: matchLabels: name: cleanup-ipam template: metadata: labels: name: cleanup-ipam spec: hostNetwork: true securityContext: runAsUser: 0 runAsGroup: 0 seccompProfile: type: RuntimeDefault automountServiceAccountToken: false containers: - name: cleanup-ipam image: gcr.io/gke-networking-test-images/ubuntu-test:2022@sha256:6cfbdf42ccaa85ec93146263b6e4c60ebae78951bd732469bca303e7ebddd85e command: - /bin/bash - -c - | while true; do for hash in $(find /hostipam -iregex '/hostipam/[0-9].*' -mmin +10 -exec head -n1 {} \; ); do hash="${hash%%[[:space:]]}" if [ -z $(ctr -n k8s.io c ls | grep $hash | awk '{print $1}') ]; then grep -ilr $hash /hostipam fi done | xargs -r rm echo "Done cleaning up /var/lib/cni/networks/gke-pod-network at $(date)" sleep 120s done volumeMounts: - name: host-ipam mountPath: /hostipam - name: host-ctr mountPath: /run/containerd securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL volumes: - name: host-ipam hostPath: path: /var/lib/cni/networks/gke-pod-network - name: host-ctr hostPath: path: /run/containerd |
|
| 1.31、1.32、1.33 |
|
使用舊版網路的叢集發生 Ingress 和 Service 負載平衡器中斷與舊版網路不相容,導致使用 Ingress 或 Service 部署的 GKE 代管負載平衡器後端中斷連結。這會導致負載平衡器沒有任何有效的後端,進而導致傳送至這些負載平衡器的所有傳入要求遭到捨棄。 這個問題會影響使用舊版網路且版本為 1.31 以上的 GKE 叢集。 如要找出使用舊版網路的 GKE 叢集,請執行下列指令:
gcloud container clusters describe CLUSTER_NAME --location=LOCATION --format="value(subnetwork)"
如果叢集使用舊版網路,這個指令會輸出空白內容。 解決方法: 舊版網路已淘汰一段時間,因此建議您將舊版網路遷移至虛擬私有雲網路。方法是轉換含有 GKE 叢集的舊版網路。如果目前無法執行這項遷移作業,請與 Cloud Customer Care 團隊聯絡。 |
| 1.30、1.31、1.32 |
|
新建立的節點不會新增至第 4 層內部負載平衡器為內部 LoadBalancer 服務建立的 Google Cloud 負載平衡器,可能會遺漏後端執行個體群組中新建立的節點。 如果叢集縮減至零個節點,然後又擴充至一或多個節點,這個問題就會最明顯。 解決方法:
|
| 1.31、1.32 |
|
storedVersions 從 CRD 狀態中移除,導致 Gateway API 發生問題
GKE 中的 Kube-Addon-Manager 會錯誤地從 如果叢集符合下列所有條件,可能會有風險:
解決方法: 建議您延後升級叢集,直到問題解決為止。
或者,如需升級叢集版本,請務必將所有受影響 Gateway API CRD 的儲存空間版本更新為
|
| 1.32 |
|
新的 Pod 無法初始化,卡在 ContainerCreating 狀態
無法建立新的 Pod,且卡在 Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "[sandbox-ID]": plugin type="cilium-cni" failed (add): unable to create endpoint: Cilium API client timeout exceeded 這個問題會影響 1.32 至 1.32.3-gke.1170000 之前的 GKE 叢集,這些叢集是在 GKE 1.31 或 1.32 版建立。根本原因是,維護已分配 Cilium 身分集合的記憶體內資料結構,未正確與 Kubernetes API 伺服器狀態同步。
如要確認建立叢集時使用的 GKE 版本,請使用下列指令查詢 gcloud container clusters describe [cluster_name] --location [location] --format='value(initialClusterVersion)'
如果 GKE 叢集已啟用記錄功能, resource.type="k8s_container" resource.labels.container_name="cilium-agent" 解決方法: 暫時的緩解方法是重新啟動控制層。只要將控制層升級至目前執行的版本,即可達成這個目的: gcloud container clusters upgrade [cluster_name] --location [location] --cluster-version=[version] --master |
| 1.27,1.28,1.29,1.30,1.31 |
從 Service 移除通訊埠後,NEG 控制器會停止管理端點如果 NEG 控制器設為建立 Service 的獨立 NEG,且其中一個設定的通訊埠後來從 Service 中移除,NEG 控制器最終會停止管理 NEG 的端點。除了使用者建立獨立 NEG 註解的 Service 之外,這也會影響 GKE Gateway、MCI 和 GKE 多叢集閘道參照的 Service。 解決方法: 從含有獨立 NEG 註解的 Service 移除通訊埠時,也必須更新註解,移除相關通訊埠。 |
|
| 1.28 |
閘道 TLS 設定錯誤我們發現,在執行 GKE 1.28.4-gke.1083000 版的叢集中,為閘道設定 TLS 時會發生問題。這會影響使用 SSLCertificate 或 CertificateMap 的 TLS 設定。如果您要升級含有現有閘道的叢集,系統將無法更新閘道。如果是新的閘道,系統不會佈建負載平衡器。這個問題將在日後的 GKE 1.28 修補程式版本中修正。 |
|
| 1.27,1.28,1.29 |
|
間歇性連線建立失敗控制層版本為 1.26.6-gke.1900 以上版本的叢集,可能會間歇性發生連線建立失敗的問題。 失敗機率很低,而且不會影響所有叢集。症狀出現幾天後,失敗情形應該會完全停止。 |
| 1.27,1.28,1.29 |
|
Container-Optimized OS 的 DNS 解析問題在 GKE 叢集上執行的工作負載 (節點以 Container-Optimized OS 為基礎) 可能會發生 DNS 解析問題。 |
| 1.28 | 1.28.3-gke.1090000 以上版本 |
網路政策因連線追蹤查詢不正確而捨棄連線如果叢集已啟用 GKE Dataplane V2,當用戶端 Pod 使用 Service 或內部直通式網路負載平衡器的虛擬 IP 位址連線至自身時,由於資料層中的 conntrack 查詢不正確,回覆封包不會被視為現有連線的一部分。這表示限制 Pod 輸入流量的網路政策,不正確地對封包強制執行。 這個問題的影響取決於為 Service 設定的 Pod 數量。舉例來說,如果 Service 有 1 個後端 Pod,連線一律會失敗。如果 Service 有 2 個後端 Pod,連線失敗率為 50%。 解決方法:
如要緩解這個問題,請將 Service 資訊清單中的 |
| 1.27,1.28 |
|
髮夾連線流程的封包捨棄如果叢集已啟用 GKE Dataplane V2,當 Pod 使用 Service 建立與自身的 TCP 連線,導致 Pod 同時是連線的來源和目的地時,GKE Dataplane V2 eBPF 連線追蹤功能會錯誤追蹤連線狀態,導致 conntrack 項目外洩。 如果連線元組 (通訊協定、來源/目的地 IP 和來源/目的地通訊埠) 外洩,使用相同連線元組的新連線可能會導致傳回的封包遭到捨棄。 解決方法: 請使用下列其中一種解決方法:
|
| 早於 1.31.0-gke.1506000 | 1.31.0-gke.1506000 以上版本 |
GKE 多網路中的裝置類型網路因網路名稱過長而失敗叢集建立失敗,並顯示下列錯誤:
解決方法: 裝置類型網路物件名稱的長度上限為 41 個半形字元。系統會組合每個 UNIX 網域通訊端的完整路徑,包括對應的網路名稱。Linux 對通訊端路徑長度有限制 (107 個位元組以下)。考量目錄、檔案名稱前置字元和 |
| 1.27、1.28、1.29、1.30 |
|
控制層升級後,
|
| 1.31、1.32 |
|
在同一節點上執行的 Pod 之間,UDP 流量中斷如果叢集已啟用節點內瀏覽功能,在相同節點上執行的 Pod 之間,UDP 流量可能會中斷。 當 GKE 叢集節點升級至或建立為下列任一 GKE 版本時,就會觸發這個問題:
受影響的路徑是透過 Hostport 或 Service,在同一節點上的 Pod 對 Pod UDP 流量。 解析度 將叢集升級至下列其中一個修正版本:
|
| 1.28、1.29、1.30、1.31 |
如果叢集的節點總數少於 3 個,且 vCPU 不足,Calico Pod 的健康狀態會不良如果叢集符合下列所有條件,就無法排定 calico-typha 和 calico-node Pod:節點總數少於 3 個、每個節點有 1 個或更少的可分配 vCPU,以及啟用網路政策。這是因為 CPU 資源不足。 解決方法:
|
|
控制層升級期間,可用區叢集的多叢集閘道 (MCG) 服務中斷在 GKE 可用區叢集上使用多叢集閘道 (MCG) 的部署作業,可能會在導致控制層重新啟動的事件 (例如叢集升級) 期間發生中斷,並出現「503」錯誤。這是因為 MCG 仰賴舊版機制探索網路端點群組 (NEG),當可用區叢集中的節點在控制層重新啟動期間暫時無法使用時,該機制會誤報後端數量為零。這會導致負載平衡器移除所有後端,造成流量遺失。 解決方法:
|
||
NEG 就緒閘道競爭狀況在某些情況下,readiness gate 可能會在 Ingress 健康狀態檢查回報健康狀態良好之前,傳回「偽陽性」的就緒狀態,並在 Ingress 物件上產生類似下列的錯誤事件:
GKE 對 Deployment 工作負載執行滾動式更新時,這個問題會導致負載平衡器向流量回報 如果 Pod 數量 (例如 2 個) 遠少於 NEG 數量,發生這種競爭狀況的風險就會增加。系統會為每個區域建立 NEG,每個可用區一個 NEG,通常會產生三個 NEG。如果 Pod 數量相對較多,在滾動式更新開始前,每個 NEG 都有多個 Pod,則不太可能觸發這個競爭狀況。 解決方法: 如要避免這種競爭狀況,最好的方法是在網路端點群組中加入更多後端。請務必設定滾動式更新策略,確保至少有 1 個 Pod 隨時在運作。舉例來說,如果只有 2 個 Pod 正常運作,設定範例如下: strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 0 maxSurge: 1 上述範例僅供參考。您必須根據多項因素 (例如副本數量) 更新策略。 |
||
容器原生負載平衡器的垃圾收集作業不完整GKE 每兩分鐘會對容器原生負載平衡器執行垃圾收集。如果在負載平衡器完全移除前刪除叢集,則須手動刪除負載平衡器的 NEG。 解決方法: 請執行下列指令來查看專案裡的 NEG: gcloud compute network-endpoint-groups list 在指令輸出中,找出相關的 NEG。 如要刪除 NEG,請執行下列指令,並將 gcloud compute network-endpoint-groups delete <var>NEG_NAME</var> |
||
配合端點傳播推出工作負載如果叢集使用 Pod 就緒回饋功能管理工作負載推出作業,就不會發生這個問題。將工作負載部署至叢集或更新現有工作負載時,容器原生負載平衡器傳播新端點所需的時間,可能會比完成工作負載推出作業的時間更長。 解決方法: 將工作負載的
|
||
Pod readinessProbe 中的 initialDelaySeconds 未生效您可能會預期容器原生負載平衡器會遵循 Pod |