如何排查 Amazon EKS 集群的 API 服务器终端节点的问题?

上次更新时间:2020 年 1 月 27 日

我在自己的 Amazon Elastic Kubernetes Service (Amazon EKS) 集群上,将终端节点访问设置从公有更改为私有。现在,我的集群处于“故障”状态,或者我无法运行 kubectl 命令。

简短描述

如果您的 Kubernetes API 服务器终端节点有问题,请完成以下部分之一中的步骤:

  • 您的集群停滞在“故障”状态,并且您无法将终端节点访问设置从公有更改为私有
  • 在将终端节点访问设置从公有更改为私有后,您无法在集群上运行 kubectl 命令

注意:要设置对 Kubernetes API 服务器终端节点的访问权限,请参阅如何设置对 Amazon EKS 中的 API 服务器的公有和私有访问权限?

解决方法

您的集群停滞在“故障”状态,并且您无法将终端节点访问设置从公有更改为私有

您的集群可能因为 AWS Identity and Access Management (IAM) 的权限问题而处于“故障”状态。

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

注意:如果操作未被阻挡,检查用户的账户中的 AWS Organizations 策略是否阻止了 API 调用并导致集群发生故障。

2.    确认 IAM 用户的权限在高于该账户的任何级别都不会通过隐式(未包含在 Allow 策略语句中)或显式(包含在 Deny 策略语句中)方式进行阻挡。

注意:即使账户管理员向该 IAM 用户附加了权限为 */*AdministratorAccess IAM 策略,权限仍被阻挡。来自 Organizations 策略的权限优先于 IAM 实体的权限。

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

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

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

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

如果您跨对等 VPC 访问您的集群,请确认该安全组允许从对等 VPC 访问端口 443 的控制平面的安全组。此外,验证对等 VPC 的端口 53 相互打开(用于 DNS 解析)。