問題
當您取得 Pod 清單時,apigee-ingressgateway
Pod 只會顯示 2 個容器中的 1 個正在執行。
舉例來說,當您執行下列指令時:
kubectl -n apigee get pods -l app=apigee-ingressgateway
輸出:
NAME READY STATUS RESTARTS AGE apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r 1/2 Running 0 6m48s apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf 1/2 Running 0 123m
此外,對上述任一 Pod 執行 describe
指令時,會顯示就緒探測失敗,並傳回 503 狀態碼。
舉例來說,您可能會在 Pod 說明的 Events
部分看到下列訊息:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning Unhealthy 76s (x32903 over 18h) kubelet Readiness probe failed: HTTP probe failed with statuscode: 503
可能原因
原因 | 說明 |
---|---|
Apigee Ingress 已設定為監聽通訊埠 80 | 自 Apigee Hybrid 1.9 起,系統不再支援在 80 埠上設定 Apigee Ingress。 |
原因:Apigee Ingress 設定為監聽通訊埠 80
這個問題是因為 Apigee Ingress 閘道設定為監聽通訊埠 80,但 Apigee Hybrid 1.9 以上版本已不再支援這個通訊埠。
如果您是從允許使用 80 連接埠的舊版 Apigee Hybrid 升級,或是因為其他設定錯誤而啟用,就可能發生這種情況。
診斷
-
取得
apigee-ingressgateway
Pod 清單。執行下列指令:
kubectl -n apigee get pods -l app=apigee-ingressgateway
輸出範例
NAME READY STATUS RESTARTS AGE apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r 1/2 Running 0 6m48s apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf 1/2 Running 0 123m
-
描述其中一個列出的 Pod,檢查事件:
kubectl -n apigee describe pod APIGEE_INGRESSGATEWAY_POD
其中 APIGEE_INGRESSGATEWAY_POD 是先前指令輸出內容中列出的
apigee-ingressgateway
Pod。輸出內容範例:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning Unhealthy 76s (x32903 over 18h) kubelet Readiness probe failed: HTTP probe failed with statuscode: 503
-
取得 APIGEE_INGRESSGATEWAY_POD Pod 的記錄。
kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD
您可能會看到記錄項目,顯示由於權限遭拒錯誤,導致連接埠 80 無法繫結,隨後會顯示 Envoy 尚未準備就緒的訊息。
2025-09-11T06:16:45.457621Z error envoy config external/envoy/source/common/listener_manager/listener_manager_impl.cc:1186 listener '0.0.0.0_80' failed to bind or apply socket options: cannot bind '0.0.0.0:80': Permission denied ... 2025-09-11T06:16:46.365818Z warn Envoy proxy is NOT ready: config received from XDS server, but was rejected: cds updates: 1 successful, 0 rejected; lds updates: 0 successful, 1 rejected
- 查看目前的
apigeeroute
設定,找出已啟用通訊埠 80 (HTTP) 的設定。-
取得已定義的 Apigee 路徑清單。
kubectl -n apigee get apigeeroute
輸出內容範例:
NAME STATE AGE myorg-hyb-dev-grp-000-33620d0 running 2d1h non-sni running 17s
-
檢查每個
apigeeroute
,找出定義通訊埠 80 的位置。針對上一個指令輸出內容中列出的每個
apigeeroute
,執行下列指令:kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml
其中 APIGEE_ROUTE_NAME 是個別
apigeeroute
的名稱。指令範例:
kubectl -n apigee get apigeeroute non-sni -o yaml
輸出內容範例:
非 sniapiVersion: apigee.cloud.google.com/v1alpha2 kind: ApigeeRoute metadata: name: non-sni namespace: apigee resourceVersion: "240441468" spec: enableNonSniClient: true hostnames: - '*' ports: - number: 443 protocol: HTTPS tls: credentialName: myorg-hyb-dev-grp minProtocolVersion: TLS_AUTO mode: SIMPLE - number: 80 protocol: HTTP selector: app: apigee-ingressgateway status: lastAppliedGeneration: 1 state: running
apigeeroute
顯示通訊埠 80 已啟用為這條路徑的一部分。
-
取得已定義的 Apigee 路徑清單。
解析度
如要解決這個問題,請移除下列幾行,在原始 apigeeroute
yaml 檔案中停用連接埠 80。
- number: 80 protocol: HTTP
如果沒有原始 apigeeroute
yaml 檔案,請按照下列步驟操作:
- 使用下列指令匯出目前的設定:
kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml > APIGEE_ROUTE_FILENAME.yaml
其中 APIGEE_ROUTE_NAME 是要更新的
apigeeroute
,以移除通訊埠 80 設定。其中 APIGEE_ROUTE_FILENAME 是包含
apigeeroute
yaml 內容的輸出檔案名稱。 -
編輯
apigeeroute
yaml 檔案,移除通訊埠 80 設定。在文字編輯器中開啟 APIGEE_ROUTE_FILENAME 檔案,並移除下列幾行:
- number: 80 protocol: HTTP
-
將現有
apigeeroute
替換為修改後的 YAML 檔案:kubectl -n apigee replace -f APIGEE_ROUTE_FILENAME.yaml
其中 APIGEE_ROUTE_FILENAME 是包含更新後
apigeeroute
設定的輸出檔案。 -
apigee-ingressgateway
Pod 現在應會執行 2/2 個容器。如果沒有,請刪除 Pod,讓系統自動建立新的 Pod。NAME READY STATUS RESTARTS AGE apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-shl9r 2/2 Running 0 25h apigee-ingressgateway-ext-ingress-myorg-hyb-8f2c412-vvzsf 2/2 Running 0 26h
必須收集診斷資訊
如果按照上述操作說明後問題仍未解決,請收集下列診斷資訊,然後與 Google Cloud 客戶服務聯絡:- Overrides.yaml
- 下列指令的輸出內容:
kubectl -n apigee get pods -l app=apigee-ingressgateway
kubectl -n apigee logs APIGEE_INGRESSGATEWAY_POD
kubectl -n apigee get apigeeroutes
- 針對上述每條路徑,執行:
kubectl -n apigee get apigeeroute APIGEE_ROUTE_NAME -o yaml
- 或者,您也可以執行並提供 Apigee Hybrid 必須收集的資訊。