協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon EKS 混合節點閘道疑難排解
此頁面提供診斷和解決 Amazon EKS 混合節點閘道常見問題的指引。每個區段都會描述症狀、可能的原因、診斷步驟和解決方案。如需操作詳細資訊,請參閱 Amazon EKS 混合節點閘道操作。
無法從 VPC 連線混合節點上的 Pod
混合節點上執行的 Pod 無法從 VPC 中的資源連線,例如 EC2 執行個體、負載平衡器或 Kubernetes 控制平面。
可能原因:
-
VPC 路由表項目遺失或指向錯誤的 ENI。
-
閘道領導者 Pod 未執行或未完成設定。
-
混合節點上未啟用或設定 Cilium VTEP。
-
閘道 EC2 執行個體上已啟用來源/目的地檢查。
診斷步驟:
-
檢查 VPC 路由表項目。確認混合 Pod CIDRs路由是否存在,並指向作用中閘道執行個體的主要 ENI:
aws ec2 describe-route-tables \ --route-table-idsROUTE_TABLE_ID\ --query "RouteTables[].Routes[?DestinationCidrBlock=='[.replaceable]`POD_CIDR`']"如果路由遺失,請檢查閘道日誌是否有路由表錯誤。如果路由指向錯誤的 ENI,則容錯移轉可能尚未成功完成。
-
檢查閘道 Pod 狀態和領導者選擇。確認兩個閘道 Pod 正在執行中,一個保留領導者租用:
kubectl get pods -n eks-hybrid-nodes-gateway kubectl get lease -n eks-hybrid-nodes-gateway如果沒有 Pod 保留租用,請參閱 領導者選擇問題。
-
檢查混合節點上的 Cilium VTEP 組態。驗證
CiliumVTEPConfig資源是否存在,並包含領導者的節點 IP:kubectl get ciliumvtepconfig hybrid-gateway -o yamlspec.endpoints[0].tunnelEndpoint應該符合領導閘道節點的 IP 地址。如果資源遺失或 IP 過時,閘道可能尚未完成領導者設定。 -
檢查來源/目的地檢查。確認閘道 EC2 執行個體上的來源/目的地檢查已停用:
aws ec2 describe-instance-attribute \ --instance-idGATEWAY_INSTANCE_ID\ --attribute sourceDestCheck如果
sourceDestCheck是true,請將其停用。請參閱 EKS 混合節點閘道入門。
Webhook 對混合節點的呼叫失敗
Kubernetes API 伺服器無法連線到在混合節點上執行的 Webhook 端點。Webhook 許可請求逾時或傳回連線錯誤。
可能原因:
-
閘道不會將流量從控制平面路由到混合式 Pod。
-
CiliumVTEPConfig資源遺失或端點 IP 過時。
診斷步驟:
-
確認控制平面可以到達閘道節點 IP。控制平面會將流量傳送至 VPC 路由表,再將其轉送至閘道的 ENI。使用 中的步驟,確認 VPC 路由表項目正確無誤無法從 VPC 連線混合節點上的 Pod。
-
檢查 CiliumVTEPConfig 資源。驗證資源是否存在,且
tunnelEndpoint符合目前領導者的節點 IP:kubectl get ciliumvtepconfig hybrid-gateway -o yaml如果通道端點過時 (指向先前的領導者),閘道可能尚未完成領導者設定序列。檢查閘道日誌在
CiliumVTEPConfigupsert 期間是否有錯誤。
VPC 路由表更新失敗
閘道日誌會顯示與 VPC 路由表操作相關的錯誤,而且混合 Pod CIDRs路由不會建立或更新。
可能原因:
-
閘道的 IAM 角色沒有必要的 EC2 許可。
-
組態中的路由表 IDs 不正確或路由表不存在。
-
閘道無法連線到 EC2 API 端點。
診斷步驟:
-
驗證 IAM 許可。閘道需要下列 IAM 動作:
-
ec2:DescribeRouteTables -
ec2:CreateRoute -
ec2:ReplaceRoute -
ec2:DescribeInstances檢查連接至閘道節點執行個體描述檔或 Pod 身分組態的 IAM 角色。
-
-
檢查組態中的路由表 IDs。確認
ROUTE_TABLE_IDS環境變數在閘道部署中包含有效的路由表 IDs:kubectl get deployment eks-hybrid-nodes-gateway -n eks-hybrid-nodes-gateway -o jsonpath='{.spec.template.spec.containers[0].env}' | jq .確認您的 VPC 中存在路由表 IDs:
aws ec2 describe-route-tables --route-table-idsROUTE_TABLE_ID -
檢查閘道日誌是否有路由表錯誤。尋找與路由表操作相關的錯誤訊息:
kubectl logs -n eks-hybrid-nodes-gatewayLEADER_POD| grep -i "route table"常見的錯誤訊息包括:
-
Failed to verify route table access— 閘道無法描述路由表。檢查 IAM 許可和路由表 IDs。 -
Failed to update route tables— 閘道無法建立或取代路由。檢查 IAM 許可。 -
failed to access route table— 路由表 ID 可能不正確或 IAM 角色缺少ec2:DescribeRouteTables。
-
閘道 Pod 無法啟動或運作狀態不佳
閘道 Pod 處於 CrashLoopBackOff、 Error或 Pending 狀態,或運作狀態端點傳回錯誤。
可能原因:
-
未設定必要的環境變數 (
VPC_CIDR、POD_CIDRS、ROUTE_TABLE_IDS)。 -
閘道節點上未啟用 IP 轉送。
-
節點標籤或反親和性限制會阻止排程。
診斷步驟:
-
檢查 Pod 日誌。檢視失敗 Pod 的日誌,以識別錯誤:
kubectl logs -n eks-hybrid-nodes-gatewayLEADER_POD -
檢查必要的環境變數。閘道需要
NODE_IP、VPC_CIDR和POD_CIDRS。如果有任何遺失,閘道會立即結束。驗證 Pod 規格:kubectl get pod -n eks-hybrid-nodes-gatewayLEADER_POD-o jsonpath='{.spec.containers[0].env}' | jq .-
NODE_IP在 Pod 規格status.hostIP中自動從 設定 。如果為空,可能尚未在節點上排程 Pod。 -
VPC_CIDR和POD_CIDRS來自 Helm 值。確認設定正確。
-
-
檢查 IP 轉送。閘道會在啟動時檢查 IP 轉送是否已啟用,如果未啟用則會結束。在 Pod 日誌
IP forwarding is not enabled中尋找錯誤訊息。在節點上啟用 IP 轉送:# Check current setting cat /proc/sys/net/ipv4/ip_forward # Enable if not set sudo sysctl -w net.ipv4.ip_forward=1對於持久性設定,請透過 kubelet 設定 IP 轉送或
net.ipv4.ip_forward=1新增至/etc/sysctl.d/。 -
檢查節點標籤和排程限制。閘道 Pod 需要具有
hybrid-gateway-node=true標籤的節點。Pod 反親和性可確保每個 Pod 在個別節點上執行。如果 Pod 是Pending,請檢查排程問題:kubectl describe pod -n eks-hybrid-nodes-gatewayLEADER_POD尋找指出節點不足、缺少標籤或反親和性衝突的事件。
領導者選擇問題
閘道 Pod 正在執行,但沒有任何 Pod 會取得領導者租用,或經常發生領導轉換。
可能原因:
-
缺少租用物件的 RBAC 許可。
-
閘道 Pod 和 Kubernetes API 伺服器之間的網路連線不可靠。
-
領導者選擇參數設定錯誤。
診斷步驟:
-
檢查租用物件。驗證租用是否存在,並檢查其目前持有者:
kubectl get lease -n eks-hybrid-nodes-gateway hybrid-gateway-leader -o yamlspec.holderIdentity欄位會顯示目前的領導者。spec.renewTime會顯示上次續約的時間。如果renewTime過時,領導者可能會失去與 API 伺服器的連線。 -
檢查 RBAC 許可。閘道服務帳戶需要許可,才能取得、建立和更新閘道命名空間中的租用物件。驗證角色和 RoleBinding:
kubectl get role -n eks-hybrid-nodes-gateway kubectl get rolebinding -n eks-hybrid-nodes-gateway角色應包含
coordination.k8s.ioAPI 群組中leases資源的getcreate、update和動詞。 -
檢查 Pod 日誌是否有租用錯誤。在 Pod 日誌中尋找領導者選擇錯誤:
kubectl logs -n eks-hybrid-nodes-gatewayLEADER_POD| grep -i "leader\|lease"常見問題包括:
-
Failed to acquire lease— Pod 無法建立或更新租用物件。檢查 RBAC 許可。 -
經常
Leadership ended跟隨Leader setup complete訊息 — 領導者遺失並重新取得租用。這可能表示 Pod 和 API 伺服器之間的網路不穩定。考慮增加--leader-election-lease-duration。
-
-
檢查領導者選擇參數。驗證設定的值:
kubectl get deployment eks-hybrid-nodes-gateway -n eks-hybrid-nodes-gateway -o jsonpath='{.spec.template.spec.containers[0].args}'確保
--leader-election-renew-deadline小於--leader-election-lease-duration。如果續約期限超過租賃期間,領導者會失去租賃,然後才能續約。如需詳細資訊,請參閱領導者選擇調校。
常見錯誤訊息
下表列出您可能會在閘道 Pod 日誌中看到的錯誤訊息及其解決方法。
| 錯誤訊息 | 原因 | Resolution |
|---|---|---|
|
|
核心參數 |
透過 kubelet 組態或執行 來啟用 IP 轉送 |
|
|
閘道無法建立 VXLAN 網路介面。這通常發生在 Pod 缺少 |
驗證 部署規格是否包含在 |
|
|
閘道無法在啟動時描述一或多個 VPC 路由表。 |
確認 IAM 角色具有 |
|
|
閘道無法在 VPC 路由表中建立或取代路由。 |
驗證 IAM 角色具有 |
|
|
閘道無法初始化 AWS EC2 用戶端或擷取執行個體的主要 ENI。 |
確認 IAM 角色具有 |
|
|
未設定 |
|
|
|
為 提供的值 |
檢查 Pod 規格中的 |
|
|
|
在安裝期間設定 |
|
|
|
檢查 |
|
|
閘道無法從 EC2 執行個體中繼資料擷取 AWS 區域。 |
驗證執行個體中繼資料服務 (IMDS) 是否可存取。或者,明確設定 |
|
|
閘道無法從 EC2 執行個體中繼資料擷取執行個體 ID。 |
驗證執行個體中繼資料服務 (IMDS) 是否可存取。或者,明確設定 |
|
|
混合節點的 |
確認混合節點已正確註冊,且 Cilium 代理程式正在執行。檢查節點 |
|
|
混合節點的 |
確認混合節點上的 Cilium IPAM 設定正確。檢查 |
|
|
閘道無法建立或更新 |
確認 CRD 已安裝在叢集中,且閘道服務帳戶具有管理 |
|
|
控制器執行期管理員無法初始化。 |
檢查 Pod 日誌以取得其他內容。常見原因包括 kubeconfig 無效或無法連線到 Kubernetes API 伺服器。 |
|
|
領導者選擇的可執行檔無法向控制器管理員註冊。 |
這通常是內部錯誤。檢查完整的 Pod 日誌以取得其他內容,並在 GitHub 儲存庫 |
|
|
CiliumNode 對帳程式無法向控制器管理員註冊。 |
檢查 Pod 日誌以取得其他內容。確認叢集中已安裝 CiliumNode CRD。 |
|
|
控制器管理員意外結束。 |
檢查 Pod 日誌是否有基礎錯誤。常見原因包括 Kubernetes API 伺服器的連線中斷,或指標或運作狀態探查繫結地址發生連接埠衝突。 |
|
|
在啟動驗證檢查期間,閘道無法描述特定的 VPC 路由表。 |
確認 IAM 角色具有 |
相關主題
-
Amazon EKS 混合節點閘道 — 閘道架構和使用案例的概觀。
-
EKS 混合節點閘道入門 — 先決條件和安裝指示。
-
Amazon EKS 混合節點閘道組態參考 — Helm 值、CLI 旗標和環境變數的完整參考。
-
Amazon EKS 混合節點閘道操作 — 監控、容錯移轉行為和擴展指引。