跳至內容

如何對 Amazon EKS 叢集中 API 伺服器端點的連接性問題進行疑難排解?

2 分的閱讀內容
0

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

解決方法

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

對新叢集或現有叢集上的 kubectl 命令錯誤進行疑難排解

確認您的 kubeconfig 檔案已連線到您的叢集

請完成下列步驟:

  1. 確認您使用正確的 kubeconfig 檔案連線您的叢集。如需了解更多資訊,請參閱 Kubernetes 網站上的使用 kubeconfig 檔案組織叢集存取

  2. 執行以下命令,列出 kubeconfig 檔案中的叢集內容:

    kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'

    輸出範例:

    Cluster name Server "example-cluster-name" https://"example-cluster-endpoint".eks.amazonaws.com
  3. 確認您 kubeconfig 檔案中的叢集名稱和端點正確無誤。如果叢集的名稱或端點不正確,請執行下列命令來更新 kubeconfig 檔案中叢集的內容:

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

    **注意:**將 example-cluster-name 替換為您要更新叢集的名稱,並將 example-region 替換為您的 AWS 區域。

  4. 在您的裝置上,於連接埠 443 上執行以下 telnet 命令來檢查 API 伺服器端點連線:

    telnet example-server-endpoint 443

    **注意:**將 example-server-endpoint 替換為您的 API 伺服器端點。
    在以下範例輸出中,連接埠 433 可以連線到伺服器端點 D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com

    $ 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.

如果您的裝置無法透過連接埠 433 連線到 API 伺服器端點,請完成以下區段的解決步驟。

檢查 DNS 解析器

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

nslookup example-server-endpoint

**注意:**將 example-server-endpoint 替換為您的 API 伺服器端點。

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

請根據您的需求,執行以下其中一個動作:

  • 如果您使用 CIDR 區塊限制了公有 API 伺服器端點存取,請確認用戶端電腦的 IP 位址位於允許的 CIDR 範圍內。
  • 如果您需要從 Amazon Virtual Private Cloud (Amazon VPC) 外部進行存取,請使用具有 CIDR 限制的公有端點。

確保您的 API 伺服器端點的存取組合符合您的存取需求。

**注意:**最佳實務是將您的 API 伺服器端點設為私有,並設定 AWS VPN 以供外部存取。如需詳細資訊,請參閱僅限私有 API 伺服器的存取

端點存取從公有變為私有後,對叢集上的 kubectl 命令錯誤進行疑難排解

請執行下列動作:

  • 確認您使用堡壘主機或連線的網路來存取 Amazon EKS API 端點。連線的網路包括對等 VPC、AWS Direct Connect 和 VPN。
    **注意:**在私有存取模式下,您只能從叢集的 VPC 或連線的網路內部存取 Amazon EKS API 端點。
  • 檢查安全群組或網路存取控制清單 (網路 ACL) 是否封鎖對 Kubernetes API 伺服器的請求。
    **注意:**如果您使用對等 VPC,請確認控制平面安全群組允許從連接埠 443 上的對等 VPC 進行存取。

當您無法將端點存取設定從公有變更為私有時,請對卡在「失敗」狀態的叢集進行疑難排解

如果 AWS Identity and Access Management (IAM) 有權限問題,則您的叢集將進入失敗狀態。

確認您使用的 IAM 角色有權執行 AssociateVPCWithHostedZone 動作。

如果該動作未受阻檔,請檢查您的 AWS 帳戶是否有 AWS Organizations 服務控制政策 (SCP) 限制了該 API 呼叫。 確認在在組織或帳戶層級,沒有任何隱式或明確拒絕阻擋您的 IAM 使用者權限。即使帳戶管理員為使用者附加了具有 */* 權限的 AdministratorAccess IAM 政策,Deny 陳述式也會組檔權限。AWS Organizations SCP 會覆寫 IAM 實體的權限。

AWS 官方已更新 5 個月前