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 命令行界面 (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 服务器 URL,请以更高的详细级别运行以下命令:
kubectl get svc --v=9命令输出显示详细的连接信息,包括您的连接使用的 API 服务器 URL。检查列出用于 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 控制台。
-
选择 Clusters(集群),然后选择要更新的集群。
-
选择 Networking(联网)选项卡,然后选择 Manage networking(管理联网)。
-
选择 Public(公开)。
-
在 Advanced settings(高级设置)下,对于 CIDR block(CIDR 块),输入要添加到许可列表的公有 CIDR 范围。
**重要事项:**包括私有子网中的 Worker 节点用来访问互联网的 NAT 网关的 IP 地址。此外,还应包括所有 NAT 设备网络组件的 IP 地址。 -
选择 Save changes(保存更改)。
-
如果您已在 private-only 模式下配置集群的 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)"?
De-mystifying cluster networking for Amazon EKS worker nodes(揭秘 Amazon EKS Worker 节点的集群网络)
- 语言
- 中文 (简体)

相关内容
AWS 官方已更新 8 个月前
