我无法运行 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 集群端点访问控制