我無法執行 kubectl 命令。另外,我在 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集上將端點訪問設定自公有變更為私有。目前我的叢集卡為失敗狀態。
簡短描述
根據您的問題,完成下列其中一個區段中的各項步驟。
**注意:**若要設定對 Kubernetes API 伺服器端點的訪問,請參閱 修改叢集端點訪問。
解決方案
您無法在新叢集或現有叢集中執行 kubectl 命令
確認您的 kubeconfig 檔案已連線至您的叢集
請完成下列步驟:
- 確認您使用正確的 kubeconfig 檔案連線至叢集。如需詳細資訊,請參閱 Kubernetes 網站上的使用 kubeconfig 檔案組織叢集存取。
- 檢查每個叢集的 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
**注意:**使用您的叢集名稱取代 CLUSTER NAME,並以您的 AWS 區域取代 REGION。
- 使用連接埠 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
**注意:**用您的叢集的 API 伺服器端點取代 APISERVER ENDPOINT。
檢查您是否已限制對 API 伺服器端點的公用存取
如果您已指定限制對公有 API 伺服器端點存取的 CIDR 區塊,則最佳做法是同樣啟用私有端點存取。
檢查 API 伺服器端點存取行為。請參閱修改叢集端點存取。
將端點存取自公有變更為私有之後,您無法在叢集中執行 kubectl 命令
若要解決此問題,請完成下列步驟:
- 確認您使用堡壘主機或已連線的網路 (例如對等虛擬私有雲端 (VPC)、AWS Direct Connect 或 VPN) 來存取 Amazon EKS API 端點。
**注意:**在私有存取模式下,您只能從叢集的 VPC 或已連線的網路存取 Amazon EKS API 端點。
- 檢查安全群組或網路存取控制清單是否阻止對 Kubernetes API 伺服器的請求。
如果您跨對等 VPC 存取叢集,請確認控制平面安全群組允許正確存取。它們必須允許從對等 VPC 存取連接埠 443 上的 Amazon EKS 控制平面安全群組。
您的叢集保持在失敗狀態,並且無法將端點存取設定由公有變更為私有
您的叢集可能因 AWS Identity and Access Management (IAM) 的權限問題而處於失敗狀態。
若要解決此問題,請完成下列步驟:
- 確認使用者的 IAM 角色已獲授權執行 AssociateVPCWithHostedZone 動作。
**注意:**如果動作未受到阻止,請檢查使用者的帳戶是否具有阻止 API 呼叫並造成叢集失敗的 AWS Organizations 政策。
- 確認 IAM 使用者的權限未在該帳戶以上的任何層級受到隱式或顯式封鎖。
**注意:如果 IAM 使用者權限並未包含於 允許 策略語句中,則會受到隱式封鎖。若其包含於 拒絕 策略語句中,則會受到顯式封鎖。即使帳戶管理員將具備\ */\ ***權限的 AdministratorAccess IAM 策略附加到使用者,權限仍受到封鎖。來自 AWS Organizations 政策的權限將覆寫 IAM 實體的權限。