跳至内容

如何解决 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) 存在权限问题,您的集群将进入 Failed(失败)状态。

确认您使用的 IAM 角色有权执行 AssociateVPCWithHostedZone 操作。

如果操作未被阻止,请检查您的 AWS 账户是否具有阻止 API 调用的 AWS Organizations 服务控制策略 (SCP)。确认在组织或账户级别没有隐式或显式拒绝阻止您的 IAM 用户的权限。即使账户管理员将包含 */* 权限的 AdministratorAccess IAM 策略附加到用户,Deny(拒绝)语句仍会阻止权限。AWS Organizations SCP 会覆盖 IAM 实体的权限。

AWS 官方已更新 5 个月前