Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
為什麼我無法連線至 Amazon EKS 叢集?
我建立了 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集,但無法連線。
簡短描述
您無法連線到 Amazon EKS 叢集可能是因為以下其中一個原因:
- 您沒有為叢集建立 kubeconfig 檔案。
- 您無法連線到 Amazon EKS API 伺服器端點。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
您並未建立 kubeconfig 檔案
建立 Amazon EKS 叢集後,請設定 kubeconfig 檔案,讓您能使用 kubectl 命令列連線到叢集。kubeconfig 檔案包含您的 Kubernetes 叢集組態。
根據您的作業系統 (OS),您可以在下列位置找到 kubeconfig 檔案:
- 對於 Linux 或 macOS,請前往 $HOME/.kube/config。
- 對於 Windows,請前往 %USERPROFILE%\.kube\config。
若要使用不同的檔案位置,請執行下列其中一個動作:
- 將 KUBECONFIG 環境變數設定為指向新位置。
- 執行 kubectl 命令時,請使用 --kubeconfig 旗標指定自訂檔案路徑。
如果預設位置已存在 kubeconfig 檔案,則 Amazon EKS 會將新組態與現有檔案合併。您可以使用 kubectl config 命令來管理叢集上下文。如需詳細資訊,請參閱 Kubernetes 網站上的 kubectl config。
您無法連線到 Amazon EKS API 伺服器端點
若要解決此問題,請完成以下步驟:
-
若要檢查您是否可以連線到 Amazon EKS API 伺服器網址,請使用較高詳細程度執行以下指令:
kubectl get svc --v=9命令輸出會顯示詳細的連線訊息,包括您的連線所使用的 API 伺服器網址。檢查 HTTP Trace: DNS Lookup (HTTP 追蹤:DNS 查詢) 中列出的 IP 位址。
輸出範例:I0110 16:43:36.920095 48173 loader.go:373] Config loaded from file: /Users/abs/.kube/configI0110 16:43:36.936844 48173 round_trippers.go:466] curl -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500' I0110 16:43:37.362185 48173 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/ resolved to [{18.119.155.77 } {3.136.153.3 }] I0110 16:43:37.402538 48173 round_trippers.go:510] HTTP Trace: Dial to tcp:18.119.155.77:443 succeed I0110 16:43:37.500276 48173 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500 200 OK in 563 milliseconds I0110 16:43:37.500302 48173 round_trippers.go:570] HTTP Statistics: DNSLookup 1 ms Dial 40 ms TLSHandshake 44 ms ServerProcessing 52 ms Duration 563 ms I0110 16:43:37.500308 48173 round_trippers.go:577] Response Headers: I0110 16:43:37.500316 48173 round_trippers.go:580] Audit-Id: 37c17136-7fa7-40e9-8fe6-b24426e81564 I0110 16:43:37.500323 48173 round_trippers.go:580] Cache-Control: no-cache, private I0110 16:43:37.500329 48173 round_trippers.go:580] Content-Type: application/json I0110 16:43:37.500334 48173 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: 508eb99e-d99b-44db-8ade-838c99fe8e9f I0110 16:43:37.500340 48173 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: d324d3db-05ce-441b-a0ff-c31cbe8f696c I0110 16:43:37.500345 48173 round_trippers.go:580] Date: Tue, 10 Jan 2023 21:43:37 GMT -
若要檢查 Amazon EKS API 伺服器是否可公開存取,請執行以下 describe-cluster AWS CLI 命令:
aws eks describe-cluster --name cluster_name --region example_region --query cluster.resourcesVpcConfig**注意:**將 cluster_name 替換為您的叢集名稱,並將 example_region 替換為您的 AWS 區域。
輸出範例:{ "subnetIds": [ "subnet-abc1", "subnet-abc2", "subnet-abc3", "subnet-abc4", "subnet-abc5", "subnet-abc6" ], "securityGroupIds": [ "sg-abc7" ], "clusterSecurityGroupId": "sg-abc7", "vpcId": "vpc-abc9", "endpointPublicAccess": true, "endpointPrivateAccess": false, "publicAccessCidrs": [ "0.0.0.0/0" ] }若要允許公開存取,請確保 endpointPublicAccess 設為 true。若要保持私密存取,請確保 endpointPublicAccess 設為 false。如果 endpointPublicAccess 設為 false,請繼續進行步驟 9。如果 endpointPublicAccess 設為 true,安全上的最佳實務是將 endpointPublicAccess 限制在特定 IP 位址範圍內。完成步驟 3-8,將允許的 IP 位址新增到 publicAccessCidrs 允許清單中。
-
開啟 Amazon EKS console (Amazon EKS 主控台)。
-
選擇 Clusters (叢集),然後選取要更新的叢集。
-
選擇 Networking (網路) 索引標籤,然後選擇 Manage networking (管理網路)。
-
選擇 Public (公開)。
-
在 Advanced settings (進階設定) 下的 CIDR 區塊中,輸入要新增至允許清單中的公有 CIDR 範圍。
**重要:**包含位於私有子網路中,工作節點用來存取網際網路的 NAT 閘道 IP 位址。另請包含所有 NAT 裝置網路元件的 IP 位址。 -
選擇 Save changes (儲存變更)。
-
如果您以僅限私有模式設定叢集的 API 伺服器,請確保 kubectl 請求來自叢集的網路。如果您的 kubectl 請求來自 Amazon Virtual Private Cloud (Amazon VPC) 外部,那麼在執行 get svc 命令時,您會收到以下逾時錯誤:
$ kubectl get svc --v=9I0110 17:15:58.889798 50514 loader.go:373] Config loaded from file: /Users/example-user/.kube/config I0110 17:15:58.896715 50514 round_trippers.go:466] curl -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500' I0110 17:15:59.374499 50514 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com resolved to [{192.168.126.17 } {192.168.144.26 }] I0110 17:16:14.285027 50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.126.17:443 failed: dial tcp 192.168.126.17:443: i/o timeout I0110 17:16:29.191768 50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.144.26:443 failed: dial tcp 192.168.144.26:443: i/o timeout I0110 17:16:29.196959 50514 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500 in 30300 milliseconds I0110 17:16:29.197724 50514 round_trippers.go:570] HTTP Statistics: DNSLookup 183 ms Dial 14906 ms TLSHandshake 0 ms Duration 30300 ms I0110 17:16:29.197768 50514 round_trippers.go:577] Response Headers: I0110 17:16:29.199254 50514 helpers.go:264] Connection error: Get https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500: dial tcp 192.168.126.17:443: i/o timeout Unable to connect to the server: dial tcp 192.168.126.17:443: i/o timeout -
更新叢集安全群組,以將來源 IP 位址或 CIDR 範圍新增至您的允許清單。這可讓 kubectl 用戶端從叢集 VPC 內部連線到 Amazon EKS API 伺服器端點。
相關資訊
如何解決連線到 Amazon EKS API 伺服器時,出現的 錯誤?"You must be logged in to the server (Unauthorized)"
- 語言
- 中文 (繁體)

相關內容
- 已提問 2 年前
AWS 官方已更新 10 個月前
