如何解决 Amazon EKS 集群的 API 服务器端点连接问题?

2 分钟阅读
0

我无法运行 kubectl 命令。此外,我将我的 Amazon Elastic Kubernetes Service (Amazon EKS) 集群上的端点访问设置从公有更改为私有。现在,我的集群停留在“失败”状态。

简短描述

根据您的问题,请完成以下其中一个部分的步骤。

**注意:**要设置对 Kubernetes API 服务器端点的访问权限,请参阅修改集群端点的访问权限

解决方法

您无法在新集群或现有集群上运行 kubectl 命令

确认 kubeconfig 文件已连接到您的集群

完成以下步骤:

  1. 确认您用于连接集群的 kubeconfig 文件是正确的。有关更多信息,请参阅 Kubernetes 网站的 Organizing cluster access using kubeconfig files 文章。
  2. 检查 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 替换为您的集群名称,将 REGION 替换为您的 AWS 区域。
  3. 使用端口 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

**注意:**将 APISERVER ENDPOINT 替换为集群的 API 服务器端点。

检查您是否限制了对 API 服务器端点的公有访问

如果指定了 CIDR 块来限制对公有 API 服务器端点的访问,则最佳做法是同时激活私有端点访问权限。

检查 API 服务器端点访问行为。请参阅修改集群端点访问

将端点访问权限从公有更改为私有后,您无法在集群上运行 kubectl 命令

要解决此问题,请完成以下步骤:

  1. 确认使用堡垒主机或连接的网络(例如对等虚拟私有云(VPC)、AWS Direct Connect 或 VPN)来访问 Amazon EKS API 端点。
    **注意:**在私有访问模式下,您只能从集群的 VPC 或连接的网络访问 Amazon EKS API 端点。
  2. 检查安全组或网络访问控制列表是否阻止了对 Kubernetes API 服务器的请求。
    如果您通过对等 VPC 访问集群,请确认控制平面安全组允许正确的访问。控制面板安全组必须允许从对等 VPC 访问端口 443 上的 Amazon EKS 控制平面安全组。

您的集群停留在“失败”状态,您无法将端点访问设置从公有更改为私有

由于 AWS Identity and Access Management (IAM) 存在权限问题,您的集群可能处于失败 状态。

要解决此问题,请完成以下步骤:

  1. 确认已授权用户 IAM 角色执行 AssociateVPCWithHostedZone 操作。
    **注意:**如果操作未被阻止,则检查该用户的账户是否具有 AWS Organizations 策略,该策略会阻止 API 调用并导致集群失败。
  2. 确认未在任何账户以上级别隐式或显示地阻止 IAM 用户的权限。
    **注意:**如果 IAM 用户权限未包含在 Allow 策略语句中,则会被隐式阻止。如果它包含在 Deny 策略语句中,则会被显式阻止。即使账户管理员将包含 */* 权限的 AdministratorAccess IAM 策略附加到用户,权限也会被阻止。AWS Organizations 策略的权限会覆盖 IAM 实体的权限。
AWS 官方
AWS 官方已更新 8 个月前