協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
對控制平面輸出問題進行故障診斷
使用CUSTOMER_ROUTED控制平面輸出模式時,您必須負責控制平面 ENIs 的網路連線。此頁面涵蓋常見問題及其解決方案。
偵測失敗的 Webhook
當控制平面無法連線到 Webhook 伺服器或 OIDC 供應商時,症狀通常會顯示為 Webhook 逾時。若要確認,請建立或修改觸發 Webhook 的資源,並檢查錯誤:
kubectl apply -f my-resource.yaml
連線或 DNS 失敗通常會傳回類似以下的錯誤:
Error from server (InternalError): error when creating "my-resource.yaml": Internal error occurred: failed calling webhook "my-webhook.example.com": failed to call webhook: Post "https://my-webhook.example.com/validate?timeout=10s": context deadline exceeded
您也可以檢查叢集中最近的事件是否有 Webhook 錯誤:
kubectl get events --all-namespaces --field-selector reason=FailedCreate
-
如果錯誤是逾時 (
context deadline exceeded) 或連線遭拒,則控制平面無法連線到 Webhook 端點。請參閱沒有輸出路由到所需的端點、封鎖 Webhook 或控制平面流量NACLs和防止存取的安全群組。 -
如果錯誤提及 DNS 或沒有此類主機失敗,則控制平面無法解析端點。請參閱 DHCP 選項集重新整理失敗。
沒有輸出路由到所需的端點
徵狀:
-
許可 Webhook 逾時。
-
OIDC 提供者探索失敗。
-
叢集建立或更新停滯。
原因:
控制平面網路介面子網路沒有控制平面需要到達的端點的工作路由。最常見的是,子網路路由表缺少輸出裝置的預設路由。或者,該裝置設定錯誤。輸出裝置通常是 NAT 閘道。不過,它可以是 NAT 執行個體、防火牆或代理設備,或是集中式輸出 VPC 的傳輸閘道。
解決方案:
-
識別您的叢集用於控制平面網路介面的子網路:
aws eks describe-cluster --name my-cluster \ --query "cluster.resourcesVpcConfig.subnetIds" -
針對每個子網路,檢查相關聯的路由表:
aws ec2 describe-route-tables \ --filters "Name=association.subnet-id,Values=subnet-ExampleID1" -
確認您的輸出裝置指向
0.0.0.0/0(或涵蓋端點的路由) 的路由存在。如果遺失,請新增路由。下列範例新增 NAT 閘道路由;取代您自己的輸出目標 (例如傳輸閘道或網路界面):aws ec2 create-route \ --route-table-id rtb-ExampleID \ --destination-cidr-block 0.0.0.0/0 \ --nat-gateway-id nat-ExampleID
封鎖 Webhook 或控制平面流量NACLs
徵狀:
-
許可 Webhook 呼叫逾時 (錯誤:
failed calling webhook)。 -
建立或修改使用變動或驗證 Webhook 的 Kubernetes 資源時發生間歇性失敗。
原因:
控制平面 ENI 子網路上的網路 ACLs 會封鎖 Webhook 端點的傳出流量,或封鎖傳入暫時性連接埠傳回流量。
解決方案:
-
識別與您的控制平面子網路相關聯的 NACLs:
aws ec2 describe-network-acls \ --filters "Name=association.subnet-id,Values=subnet-ExampleID1" -
確保存在下列規則:
Direction 通訊協定 連接埠範圍 目的地/來源 Action 傳出
TCP
443
0.0.0.0/0 (或 Webhook CIDR)
允許
傳出
TCP
10250
VPC CIDR
允許
傳入
TCP
1024–65535
0.0.0.0/0
允許 (暫時性傳回流量)
注意
NACLs 是無狀態的。您必須明確允許傳入規則中暫時性連接埠 (1024–65535) 上的傳回流量。
這些規則涵蓋兩個不同的路徑。連接埠 443 規則適用於傳出流量到 Webhook 和 OIDC 端點,這會透過您的輸出裝置離開 VPC。連接埠 10250 規則適用於 kubelet API,其會在控制平面和節點之間保留在您的 VPC 內。遺失的輸出裝置不會影響連接埠 10250,但限制性網路 ACL 可以封鎖它。
防止存取的安全群組
徵狀:
-
Webhook 呼叫失敗。
-
控制平面無法連線到節點上的 kubelet API (連接埠 10250)。
-
kubectl exec、kubectl logs或kubectl port-forward失敗。
原因:
連接到控制平面 ENIs 的安全群組 (叢集安全群組) 不允許必要連接埠上的傳出流量。
解決方案:
-
識別叢集安全群組:
aws eks describe-cluster --name my-cluster \ --query "cluster.resourcesVpcConfig.clusterSecurityGroupId" -
驗證傳出規則允許:
通訊協定 站點 目標 TCP
443
0.0.0.0/0 (webhook 端點、OIDC 供應商)
TCP
10250
節點安全群組或 VPC CIDR (kubelet API)
-
如果傳出規則具有限制性,請新增所需流量的規則:
aws ec2 authorize-security-group-egress \ --group-id sg-ExampleClusterSG \ --protocol tcp \ --port 443 \ --cidr 0.0.0.0/0注意
如果您有嚴格的輸出要求,而且您知道 Webhook 和 OIDC 端點的 IP 範圍,您可以將連接埠 443 規則範圍限定為這些特定的 CIDRs,而不是
0.0.0.0/0。連接埠 10250 (kubelet API) 規則為 VPC 內部;將其範圍限定於節點安全群組或 VPC CIDR,而非網際網路。
DHCP 選項集重新整理失敗
徵狀:
-
DNS 解析從控制平面失敗。
-
需要 DNS 查詢 (OIDC 探索、Webhook 解析) 的叢集操作失敗。
-
問題會在 VPC DHCP 選項變更後或控制平面更新後出現。
原因:
VPC DHCP 選項集已變更。或者,它不包括在其網域名稱伺服器AmazonProvidedDNS中。它也可能缺少另一個解析程式,可以解析控制平面所需的名稱。控制平面會自動偵測 DHCP 選項集變更,並套用新的 DNS 設定,通常在一小時內。只有在叢集 IAM 角色授予所需的 Amazon EC2 讀取許可時,控制平面才能執行此操作。
解決方案:
-
驗證 VPC 的 DHCP 選項集:
aws ec2 describe-vpcs --vpc-ids vpc-ExampleID \ --query "Vpcs[0].DhcpOptionsId" \ --region region-codeaws ec2 describe-dhcp-options --dhcp-options-ids dopt-ExampleID --region region-code -
確認
domain-name-servers包含AmazonProvidedDNS(Amazon 提供的 DNS 解析程式,這是 VPC IPv4 CIDR 的基礎加上兩個),或另一個解析程式可以解析控制平面所需的名稱。 -
確認叢集 IAM 角色授予
ec2:DescribeVpcs和ec2:DescribeDhcpOptions。如果沒有這些許可,控制平面將無法讀取更新的 DHCP 選項,也無法重新整理其 DNS 設定。如需詳細資訊,請參閱 Amazon EKS 叢集 IAM 角色。 -
DHCP 選項變更後,控制平面最多需要一小時的時間來自動偵測和套用新設定。不需要叢集更新或執行個體替換。如果 DNS 解析在一小時後仍然失敗,且上述許可已就緒,請聯絡 AWS Support。
IPv6 路由問題
徵狀:
-
IPv6 叢集無法連線到外部 OIDC 或 Webhook 端點。
-
節點註冊可透過 IPv4 運作,但 IPv6 服務失敗。
原因:
子網路路由表缺少僅輸出網際網路閘道的::/0路由,或安全群組/NACLs不允許 IPv6 流量。
解決方案:
-
驗證輸出限定網際網路閘道是否存在,並連接到 VPC:
aws ec2 describe-egress-only-internet-gateways \ --filters "Name=attachment.vpc-id,Values=vpc-ExampleID" -
檢查控制平面子網路的路由表是否具有
::/0路由:aws ec2 describe-route-tables \ --filters "Name=association.subnet-id,Values=subnet-ExampleID1" \ --query "RouteTables[0].Routes[?DestinationIpv6CidrBlock=='::/0']" -
如果遺失,請新增路由:
aws ec2 create-route \ --route-table-id rtb-ExampleID \ --destination-ipv6-cidr-block ::/0 \ --egress-only-internet-gateway-id eigw-ExampleID -
確保 NACLs 和安全群組允許連接埠 443 和傳入暫時性連接埠上的 IPv6 傳出。
無法連線 OIDC 提供者
徵狀:
-
IAM roles for service accounts(IRSA) 失敗 — Pod 無法擔任角色。 -
叢集事件會顯示 OIDC 探索錯誤。
原因:
控制平面無法到達 OIDC 提供者端點 (例如 oidc.eks.region-code.amazonaws.com),因為輸出遭到封鎖。
解決方案:
-
確認輸出路徑和路由表允許傳出 HTTPS 流量。如需輸出路由遺失或設定錯誤時的疑難排解步驟,請參閱 沒有輸出路由到所需的端點。
-
確認叢集安全群組允許傳出 TCP 443
0.0.0.0/0(請參閱 防止存取的安全群組)。