如何對 Amazon EKS 叢集中的 API 伺服器端點進行故障排除?

2 分的閱讀內容
0

我無法執行 kubectl 命令。另外,我在 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集上將端點訪問設定自公有變更為私有。目前我的叢集卡為失敗狀態。

簡短描述

如果遇到 Kubernetes API 伺服器端點問題,請完成以下其中一個章節中的步驟:

  • 您無法在新叢集或現有叢集中執行 kubectl 命令
  • 將端點訪問自公有變更為私有之後,您無法在叢集中執行 kubectl 命令
  • 您的叢集保持在 失敗 狀態,並且無法將端點訪問設定由公有變更為私有

**注意:**若要設定對 Kubernetes API 伺服器端點的訪問,請參閱 修改叢集端點訪問

解決方案

您無法在新叢集或現有叢集中執行 kubectl 命令

1.    確認您正在使用正確的 kubeconfig 檔案連線至叢集。如需詳細資訊,請參閱 使用 kubeconfig 檔案組織叢集訪問 (來自 Kubernetes 網站)。

2.    檢查每個叢集的 kubeconfig 檔案中是否有多個關係。

示例輸出:

kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'
Cluster name    Server
new200.us-east-2.eksctl.io       https://D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com

如果現有的 kubeconfig 檔案沒有正確的叢集詳細資料,請使用下列命令建立具備正確詳細資料的檔案:

aws eks update-kubeconfig --name cluster name --region region

注意:使用您的叢集名稱取代叢集名稱,並以您的 AWS 區域取代區域

3.    使用端口 443 上的 Telnet,驗證您裝置的 API 伺服器端點連線性。

示例輸出:

echo exit | telnet D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com 443
Trying 18.224.160.210...
Connected to D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com.
Escape character is '^]'.
Connection closed by foreign host.

如果 Telnet 無法正常運作,請使用下列步驟進行故障排除:

檢查 DNS 解析器

如果 API 伺服器無法解析,則 DNS 解析器存在問題。

kubectl 命令失敗的相同裝置上執行下列命令:

nslookup APISERVER endpoint

注意:使用您的 APISERVER 端點取代 APISERVER 端點

檢查您是否已限制對 API 伺服器端點的公用存取

如果您已指定限制對公有 API 伺服器端點訪問的 CIDR 塊,則最佳實踐是同樣啟用私有端點訪問。

4.    檢查 API 伺服器端點訪問行為。請參閱 修改叢集端點訪問

將端點訪問自公有變更為私有之後,您無法在叢集中執行 kubectl 命令

1.    確認您正在使用堡壘託管或已連線的網路 (例如對等 VPC、AWS Direct Connect 或 VPN) 來訪問 Amazon EKS API 端點。

**注意:**在私有訪問模式下,您只能從叢集的 VPC 內訪問 Amazon EKS API 端點。

2.    檢查安全群組或網路訪問控制清單是否正在阻擋 API 調用。

如果您跨過對等 VPC 訪問叢集,請確認控制平面安全群組允許從 對等 VPC 訪問端口 443 的控制平面安全群組。此外,請確認對等 VPC 之間是否開啟端口 53。端口 53 用於 DNS 解析。

您的叢集保持在失敗狀態,並且無法將端點訪問設定由公有變更為私有

您的叢集可能因 AWS 身分識別與訪問管理 (IAM) 的權限問題而處於 失敗 狀態。

1.    確認使用者的 IAM 角色已獲授權執行 AssociateVPCWithHostedZone 操作。

**注意:**如果操作未受到阻止,請檢查使用者的帳戶是否具備阻止 API 調用並造成叢集失敗的 AWS Organizations 策略

2.    確認 IAM 使用者的權限未在該帳戶以上的任何層級受到隱式或顯式封鎖。

**注意:如果 IAM 使用者權限並未包含於 允許 策略語句中,則會受到隱式封鎖。若其包含於 拒絕 策略語句中,則會受到顯式封鎖。即使帳戶管理員將具備\ */\ ***權限的 AdministratorAccess IAM 策略附加到使用者,權限仍受到封鎖。來自 AWS Organizations 策略的權限將覆寫 IAM 實體的權限。


相關資訊

Amazon EKS 安全群組需求和考量

使用私有端點的 EKS 叢集 DNS 解析

Amazon EKS 啟用 Kubernetes 叢集公有端點的網路訪問限制

Amazon EKS 叢集端點訪問控制

AWS 官方
AWS 官方已更新 2 年前