View a markdown version of this page

Amazon EKS 混合節點閘道疑難排解 - Amazon EKS

協助改進此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon EKS 混合節點閘道疑難排解

此頁面提供診斷和解決 Amazon EKS 混合節點閘道常見問題的指引。每個區段都會描述症狀、可能的原因、診斷步驟和解決方案。如需操作詳細資訊,請參閱 Amazon EKS 混合節點閘道操作

無法從 VPC 連線混合節點上的 Pod

混合節點上執行的 Pod 無法從 VPC 中的資源連線,例如 EC2 執行個體、負載平衡器或 Kubernetes 控制平面。

可能原因:

  • VPC 路由表項目遺失或指向錯誤的 ENI。

  • 閘道領導者 Pod 未執行或未完成設定。

  • 混合節點上未啟用或設定 Cilium VTEP。

  • 閘道 EC2 執行個體上已啟用來源/目的地檢查。

診斷步驟:

  1. 檢查 VPC 路由表項目。確認混合 Pod CIDRs路由是否存在,並指向作用中閘道執行個體的主要 ENI:

    aws ec2 describe-route-tables \ --route-table-ids ROUTE_TABLE_ID \ --query "RouteTables[].Routes[?DestinationCidrBlock=='[.replaceable]`POD_CIDR`']"

    如果路由遺失,請檢查閘道日誌是否有路由表錯誤。如果路由指向錯誤的 ENI,則容錯移轉可能尚未成功完成。

  2. 檢查閘道 Pod 狀態和領導者選擇。確認兩個閘道 Pod 正在執行中,一個保留領導者租用:

    kubectl get pods -n eks-hybrid-nodes-gateway kubectl get lease -n eks-hybrid-nodes-gateway

    如果沒有 Pod 保留租用,請參閱 領導者選擇問題

  3. 檢查混合節點上的 Cilium VTEP 組態。驗證CiliumVTEPConfig資源是否存在,並包含領導者的節點 IP:

    kubectl get ciliumvtepconfig hybrid-gateway -o yaml

    spec.endpoints[0].tunnelEndpoint 應該符合領導閘道節點的 IP 地址。如果資源遺失或 IP 過時,閘道可能尚未完成領導者設定。

  4. 檢查來源/目的地檢查。確認閘道 EC2 執行個體上的來源/目的地檢查已停用:

    aws ec2 describe-instance-attribute \ --instance-id GATEWAY_INSTANCE_ID \ --attribute sourceDestCheck

    如果 sourceDestChecktrue,請將其停用。請參閱 EKS 混合節點閘道入門

Webhook 對混合節點的呼叫失敗

Kubernetes API 伺服器無法連線到在混合節點上執行的 Webhook 端點。Webhook 許可請求逾時或傳回連線錯誤。

可能原因:

  • 閘道不會將流量從控制平面路由到混合式 Pod。

  • CiliumVTEPConfig 資源遺失或端點 IP 過時。

診斷步驟:

  1. 確認控制平面可以到達閘道節點 IP。控制平面會將流量傳送至 VPC 路由表,再將其轉送至閘道的 ENI。使用 中的步驟,確認 VPC 路由表項目正確無誤無法從 VPC 連線混合節點上的 Pod

  2. 檢查 CiliumVTEPConfig 資源。驗證資源是否存在,且 tunnelEndpoint符合目前領導者的節點 IP:

    kubectl get ciliumvtepconfig hybrid-gateway -o yaml

    如果通道端點過時 (指向先前的領導者),閘道可能尚未完成領導者設定序列。檢查閘道日誌在 CiliumVTEPConfig upsert 期間是否有錯誤。

VPC 路由表更新失敗

閘道日誌會顯示與 VPC 路由表操作相關的錯誤,而且混合 Pod CIDRs路由不會建立或更新。

可能原因:

  • 閘道的 IAM 角色沒有必要的 EC2 許可。

  • 組態中的路由表 IDs 不正確或路由表不存在。

  • 閘道無法連線到 EC2 API 端點。

診斷步驟:

  1. 驗證 IAM 許可。閘道需要下列 IAM 動作:

    • ec2:DescribeRouteTables

    • ec2:CreateRoute

    • ec2:ReplaceRoute

    • ec2:DescribeInstances

      檢查連接至閘道節點執行個體描述檔或 Pod 身分組態的 IAM 角色。

  2. 檢查組態中的路由表 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-ids ROUTE_TABLE_ID
  3. 檢查閘道日誌是否有路由表錯誤。尋找與路由表操作相關的錯誤訊息:

    kubectl logs -n eks-hybrid-nodes-gateway LEADER_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 處於 CrashLoopBackOffErrorPending 狀態,或運作狀態端點傳回錯誤。

可能原因:

  • 未設定必要的環境變數 (VPC_CIDRPOD_CIDRSROUTE_TABLE_IDS)。

  • 閘道節點上未啟用 IP 轉送。

  • 節點標籤或反親和性限制會阻止排程。

診斷步驟:

  1. 檢查 Pod 日誌。檢視失敗 Pod 的日誌,以識別錯誤:

    kubectl logs -n eks-hybrid-nodes-gateway LEADER_POD
  2. 檢查必要的環境變數。閘道需要 NODE_IPVPC_CIDRPOD_CIDRS。如果有任何遺失,閘道會立即結束。驗證 Pod 規格:

    kubectl get pod -n eks-hybrid-nodes-gateway LEADER_POD -o jsonpath='{.spec.containers[0].env}' | jq .
    • NODE_IP 在 Pod 規格status.hostIP中自動從 設定 。如果為空,可能尚未在節點上排程 Pod。

    • VPC_CIDRPOD_CIDRS 來自 Helm 值。確認設定正確。

  3. 檢查 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/

  4. 檢查節點標籤和排程限制。閘道 Pod 需要具有 hybrid-gateway-node=true標籤的節點。Pod 反親和性可確保每個 Pod 在個別節點上執行。如果 Pod 是 Pending,請檢查排程問題:

    kubectl describe pod -n eks-hybrid-nodes-gateway LEADER_POD

    尋找指出節點不足、缺少標籤或反親和性衝突的事件。

領導者選擇問題

閘道 Pod 正在執行,但沒有任何 Pod 會取得領導者租用,或經常發生領導轉換。

可能原因:

  • 缺少租用物件的 RBAC 許可。

  • 閘道 Pod 和 Kubernetes API 伺服器之間的網路連線不可靠。

  • 領導者選擇參數設定錯誤。

診斷步驟:

  1. 檢查租用物件。驗證租用是否存在,並檢查其目前持有者:

    kubectl get lease -n eks-hybrid-nodes-gateway hybrid-gateway-leader -o yaml

    spec.holderIdentity 欄位會顯示目前的領導者。spec.renewTime 會顯示上次續約的時間。如果 renewTime 過時,領導者可能會失去與 API 伺服器的連線。

  2. 檢查 RBAC 許可。閘道服務帳戶需要許可,才能取得、建立和更新閘道命名空間中的租用物件。驗證角色和 RoleBinding:

    kubectl get role -n eks-hybrid-nodes-gateway kubectl get rolebinding -n eks-hybrid-nodes-gateway

    角色應包含 coordination.k8s.io API 群組中leases資源的 getcreateupdate 和動詞。

  3. 檢查 Pod 日誌是否有租用錯誤。在 Pod 日誌中尋找領導者選擇錯誤:

    kubectl logs -n eks-hybrid-nodes-gateway LEADER_POD | grep -i "leader\|lease"

    常見問題包括:

    • Failed to acquire lease — Pod 無法建立或更新租用物件。檢查 RBAC 許可。

    • 經常Leadership ended跟隨Leader setup complete訊息 — 領導者遺失並重新取得租用。這可能表示 Pod 和 API 伺服器之間的網路不穩定。考慮增加 --leader-election-lease-duration

  4. 檢查領導者選擇參數。驗證設定的值:

    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

IP forwarding is not enabled

核心參數net.ipv4.ip_forward未在閘道節點1上設定為 。

透過 kubelet 組態或執行 來啟用 IP 轉送sysctl -w net.ipv4.ip_forward=1

Failed to setup VXLAN

閘道無法建立 VXLAN 網路介面。這通常發生在 Pod 缺少 NET_ADMIN功能時。

驗證 部署規格是否包含在 NET_ADMINsecurityContext.capabilities.add。檢查 Helm Chart 是否正確部署。

Failed to verify route table access

閘道無法在啟動時描述一或多個 VPC 路由表。

確認 IAM 角色具有ec2:DescribeRouteTables許可,且組態中的路由表 IDs 正確。

Failed to update route tables

閘道無法在 VPC 路由表中建立或取代路由。

驗證 IAM 角色具有 ec2:CreateRouteec2:ReplaceRoute許可。

Failed to create route table manager

閘道無法初始化 AWS EC2 用戶端或擷取執行個體的主要 ENI。

確認 IAM 角色具有 ec2:DescribeInstances 許可,且可存取執行個體中繼資料服務 (IMDS)。

NODE_IP is required

未設定NODE_IP環境變數或--node-ip旗標。

status.hostIP 使用 驗證NODE_IP來自 的 Pod 規格集fieldRef。檢查 Helm Chart 是否正確部署。

Invalid NODE_IP

為 提供的值NODE_IP不是有效的 IP 地址。

檢查 Pod 規格中的NODE_IP環境變數值。

pod-cidrs and vpc-cidr are required

POD_CIDRSVPC_CIDR環境變數為空。

在安裝期間設定 podCIDRsvpcCIDR Helm 值。

No valid route table IDs provided

ROUTE_TABLE_IDS 值已設定,但在剖析後不包含有效的路由表 IDs。

檢查 routeTableIDs Helm 值是否有格式錯誤。路由表 IDs應以逗號分隔 (例如 rtb-abc123,rtb-def456)。

Failed to auto-detect AWS region

閘道無法從 EC2 執行個體中繼資料擷取 AWS 區域。

驗證執行個體中繼資料服務 (IMDS) 是否可存取。或者,明確設定--aws-region旗標或AWS_REGION環境變數。

Failed to auto-detect AWS instance ID

閘道無法從 EC2 執行個體中繼資料擷取執行個體 ID。

驗證執行個體中繼資料服務 (IMDS) 是否可存取。或者,明確設定--aws-instance-id旗標或AWS_INSTANCE_ID環境變數。

CiliumNode has no internal IP

混合節點的CiliumNode物件在其規格中沒有內部 IP 地址。

確認混合節點已正確註冊,且 Cilium 代理程式正在執行。檢查節點CiliumNode的資源。

CiliumNode <name> has no pod CIDRs allocated

混合節點的CiliumNode物件沒有由 Cilium IPAM 配置的 Pod CIDRs。

確認混合節點上的 Cilium IPAM 設定正確。檢查CiliumNode資源是否有節點的 IPAM 狀態。

Failed to upsert CiliumVTEPConfig

閘道無法建立或更新CiliumVTEPConfig自訂資源。

確認 CRD 已安裝在叢集中,且閘道服務帳戶具有管理 CiliumVTEPConfig 資源的許可。

Unable to create manager

控制器執行期管理員無法初始化。

檢查 Pod 日誌以取得其他內容。常見原因包括 kubeconfig 無效或無法連線到 Kubernetes API 伺服器。

Failed to add gateway setup

領導者選擇的可執行檔無法向控制器管理員註冊。

這通常是內部錯誤。檢查完整的 Pod 日誌以取得其他內容,並在 GitHub 儲存庫上報告問題。

Unable to create Node controller

CiliumNode 對帳程式無法向控制器管理員註冊。

檢查 Pod 日誌以取得其他內容。確認叢集中已安裝 CiliumNode CRD。

Problem running manager

控制器管理員意外結束。

檢查 Pod 日誌是否有基礎錯誤。常見原因包括 Kubernetes API 伺服器的連線中斷,或指標或運作狀態探查繫結地址發生連接埠衝突。

failed to access route table <id>

在啟動驗證檢查期間,閘道無法描述特定的 VPC 路由表。

確認 IAM 角色具有ec2:DescribeRouteTables許可,且路由表 ID 正確。路由表必須存在於與閘道執行個體相同的區域中。