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

2 分钟阅读
0

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

简短描述

如果您的 Kubernetes API 服务器端点出现问题,请完成以下其中一个部分中的步骤:

  • 您无法在新集群或现有集群上运行** kubectl** 命令
  • 将端点访问权限从公有更改为私有后,您无法在集群上运行** kubectl** 命令
  • 您的集群停留在失败状态,您无法将端点访问设置从公有更改为私有

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

解决方法

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

1.    确认您使用的是正确的 kubeconfig 文件来连接您的集群。有关更多信息,请参阅使用 kubeconfig 文件组织集群访问权限(来自 Kubernetes 网站)。

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

请注意:集群名称替换为您的集群名称,将区域替换为您的 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 端点替换为您的 APISERVER 端点。

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

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

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

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

1.    确认您使用堡垒主机或连接的网络(例如对等 VPC、AWS Direct Connect 或 VPN)来访问 Amazon EKS API 端点。

**请注意:**在私有访问模式下,您只能从集群的 VPC 内访问 Amazon EKS API 端点。

2.    检查安全组或网络访问控制列表是否阻止了 API 调用。

如果您通过对等 VPC 访问集群,请确认控制面板安全组允许从对等 VPC 访问 443 端口上的控制计划安全组。此外,验证对等 VPC 的 53 端口是否相互开放。53 端口用于 DNS 解析。

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

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

1.    确认已授权用户的 IAM 角色执行 AssociateVPCWithHostedZone 操作。

**请注意:**如果操作未被阻止,则检查该用户的账户是否具有阻止 API 调用并导致集群失败的 AWS Organizations 策略

2.    确认未在任何账户以上级别隐式或显示阻止 IAM 用户的权限。

**请注意:**如果 IAM 用户权限未包含在 Allow 策略语句中,则会被隐式阻止。如果它包含在 Deny 策略语句中,则会被显式阻止。即使账户管理员将包含 */* 权限的 AdministratorAccess IAM 策略附加到用户,权限也会被阻止。AWS Organizations 策略的权限会覆盖 IAM 实体的权限。


相关信息

Amazon EKS 安全组要求和注意事项

使用私有端点的 EKS 集群的 DNS 解析

Amazon EKS 支持对 Kubernetes 集群公有端点的网络访问限制

Amazon EKS 集群端点访问控制

AWS 官方
AWS 官方已更新 2 年前