帮助改进此页面
想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
排查 Amazon EK Connector 问题
本主题介绍您在使用 Amazon EKS Connector 时可能遇到的一些常见错误,包括有关如何解决这些错误的说明和变通方法。
基本问题排查
本节介绍问题不清楚时诊断问题的步骤。
检查 Amazon EKS Connector 状态
检查 Amazon EKS Connector 的状态。
kubectl get pods -n eks-connector
检查 Amazon EKS Connector 的日志
Amazon EKS Connector Pod 包含三个容器。要检索所有这些容器的完整日志以便进行查看,请运行以下命令:
-
connector-init
kubectl logs eks-connector-0 --container connector-init -n eks-connector kubectl logs eks-connector-1 --container connector-init -n eks-connector
-
connector-proxy
kubectl logs eks-connector-0 --container connector-proxy -n eks-connector kubectl logs eks-connector-1 --container connector-proxy -n eks-connector
-
connector-agent
kubectl exec eks-connector-0 --container connector-agent -n eks-connector -- cat /var/log/amazon/ssm/amazon-ssm-agent.log kubectl exec eks-connector-1 --container connector-agent -n eks-connector -- cat /var/log/amazon/ssm/amazon-ssm-agent.log
获取有效的集群名称
Amazon EKS 集群通过一个 AWS 账户和 AWS 区域内的 clusterName
唯一标识。如果您在 Amazon EKS 中有多个连接的集群,则可以确认当前 Kubernetes 集群注册到哪个 Amazon EKS 集群。为此,请输入以下内容以找出当前集群的 clusterName
。
kubectl exec eks-connector-0 --container connector-agent -n eks-connector \ -- cat /var/log/amazon/ssm/amazon-ssm-agent.log | grep -m1 -oE "eks_c:[a-zA-Z0-9_-]+" | sed -E "s/^.*eks_c:([a-zA-Z0-9_-]+)_[a-zA-Z0-9]+.*$/\1/" kubectl exec eks-connector-1 --container connector-agent -n eks-connector \ -- cat /var/log/amazon/ssm/amazon-ssm-agent.log | grep -m1 -oE "eks_c:[a-zA-Z0-9_-]+" | sed -E "s/^.*eks_c:([a-zA-Z0-9_-]+)_[a-zA-Z0-9]+.*$/\1/"
其他命令
以下命令可用于检索排查问题所需的信息。
-
使用以下命令可收集 Amazon EKS Connector 中 Pods 使用的镜像。
kubectl get pods -n eks-connector -o jsonpath="{.items[*].spec.containers[*].image}" | tr -s '[[:space:]]' '\n'
-
使用以下命令可确定运行 Amazon EKS Connector 的节点名称。
kubectl get pods -n eks-connector -o jsonpath="{.items[*].spec.nodeName}" | tr -s '[[:space:]]' '\n'
-
运行以下命令可获取您的 Kubernetes 客户端和服务器版本。
kubectl version
-
运行以下命令可获取有关节点的信息。
kubectl get nodes -o wide --show-labels
Helm 问题:403 Forbidden
如果在运行 helm install 命令时收到以下错误:
Error: INSTALLATION FAILED: unexpected status from HEAD request to https://public.ecr.aws/v2/eks-connector/eks-connector-chart/manifests/0.0.6: 403 Forbidden
您可以运行以下行来修复它:
docker logout public.ecr.aws
控制台错误:集群卡在待处理状态
如果注册集群之后,集群在 Amazon EKS 控制台中卡在 Pending
状态,可能是因为 Amazon EKS Connector 尚未成功将集群连接到 AWS。对于已注册的集群,Pending
状态表示未成功建立连接。要解决此问题,请确保您已将清单应用到目标 Kubernetes 集群。如果将其应用于集群,但集群仍处于 Pending
状态,则 eks-connector
statefulset 可能不正常。要排查此问题,请参阅本主题中的Amazon EKS Connector Pods 处于崩溃循环 。
控制台错误:在集群范围内 User
“system:serviceaccount:eks-connector:eks-connector” can't impersonate resource
“users” in API group “”
Amazon EKS Connector 使用 Kubernetes 用户模拟eks-connector
服务账户访问 Kubernetes API 的每个主体,必须授予服务账户使用 IAM ARN 作为其 Kubernetes 用户名模拟相应 Kubernetes 用户的权限。在以下示例中,IAM ARN 映射到 Kubernetes 用户。
-
来自 AWS 账户
的 IAM 用户111122223333
映射到 Kubernetes 用户。IAM 最佳实践建议您向角色而不是用户授予权限。john
arn:aws:iam::
111122223333
:user/john
-
来自 AWS 账户
的 IAM 角色111122223333
映射到 Kubernetes 用户。admin
arn:aws:iam::
111122223333
:role/admin
结果是 IAM 角色 ARN,而不是 AWS STS 会话 ARN。
有关如何配置 ClusterRole
和 ClusterRoleBinding
以授予 eks-connector
服务账户模拟映射用户权限的说明,请参阅授予在 Amazon EKS 控制台上查看 Kubernetes 集群资源的权限。确保在模板中将 %IAM_ARN%
替换为 AWS Management Console IAM 主体的 IAM ARN。
控制台错误:在集群范围内 [...] is forbidden: User [...] cannot list
resource “[...] in API group”
考虑以下问题。Amazon EKS Connector 已成功模拟目标 Kubernetes 集群中请求的 AWS Management Console IAM 主体。但模拟主体没有 Kubernetes API 操作的 RBAC 权限。
要解决此问题,有两种方法可以向其他用户授予权限。如果您之前通过 Helm 图表安装了 eks-connector,则可以通过运行以下命令轻松授予用户访问权限。将 userARN1
和 userARN2
替换为 IAM 角色的 ARN 列表,以授予查看 Kubernetes 资源的访问权限:
helm upgrade eks-connector oci://public.ecr.aws/eks-connector/eks-connector-chart \ --reuse-values \ --set 'authentication.allowedUserARNs={userARN1,userARN2}'
或者,作为集群管理员,向各个 Kubernetes 用户授予适当级别的 RBAC 权限。有关更多信息以及示例,请参阅 授予在 Amazon EKS 控制台上查看 Kubernetes 集群资源的权限。
控制台错误:Amazon EKS 无法与您的 Kubernetes 集群 API 服务器进行通信。集群必须处于 ACTIVE(活动)状态才能成功连接。过几分钟再试。
如果 Amazon EKS 服务无法与目标集群中的 Amazon EKS Connector 进行通信,可能是由于以下原因之一导致:
-
目标集群中的 Amazon EKS Connector 运行状况不佳。
-
目标集群与 AWS 区域之间的连接不佳或连接中断。
要解决此问题,请查看 Amazon EKS Connector 日志。如果您没有看到 Amazon EKS Connector 的错误,请在几分钟后重试连接。如果经常遇到目标集群的高延迟或间歇性连接,请考虑将集群重新注册到离您更近的 AWS 区域 区域。
Amazon EKS Connector Pods 处于崩溃循环
可导致 Amazon EKS Connector Pod 进入 CrashLoopBackOff
状态的原因有很多。此问题可能涉及 connector-init
容器。检查 Amazon EKS Connector Pod 的状态。
kubectl get pods -n eks-connector
示例输出如下。
NAME READY STATUS RESTARTS AGE
eks-connector-0 0/2 Init:CrashLoopBackOff 1 7s
如果您的输出与之前的输出类似,请参阅 检查 Amazon EKS Connector 的日志 排查问题。
Failed to initiate eks-connector:
InvalidActivation
初次启动 Amazon EKS Connector 时,它会向 Amazon Web Services 注册 activationId
和 activationCode
。注册可能会失败,进而可能导致 connector-init
容器崩溃,并显示类似以下错误。
F1116 20:30:47.261469 1 init.go:43] failed to initiate eks-connector: InvalidActivation:
要排查此问题,请考虑以下原因和建议的修复方法:
-
注册失败可能是因为
activationId
和activationCode
不在清单文件中。如果是这种情况,请确保它们是从RegisterCluster
API 操作返回的正确值,并且activationCode
位于清单文件中。activationCode
已添加到 Kubernetes 密钥中,因此必须为base64
编码。有关更多信息,请参阅 步骤 1:注册集群。 -
注册失败可能是因为激活已过期。这是因为,出于安全原因,您必须在注册集群后的三天内激活Amazon EKS Connector。要解决此问题,请确保在到期日期和时间之前将 Amazon EKS Connector 清单应用到目标 Kubernetes 集群。要确认激活到期日期,请调用
DescribeCluster
API 操作。aws eks describe-cluster --name
my-cluster
在以下示例响应中,到期日期和时间记录为
2021-11-12T22:28:51.101000-08:00
。{ "cluster": { "name": "
my-cluster
", "arn": "arn:aws:eks:region
:111122223333
:cluster/my-cluster
", "createdAt": "2021-11-09T22:28:51.449000-08:00", "status": "FAILED", "tags": { }, "connectorConfig": { "activationId": "00000000-0000-0000-0000-000000000000", "activationExpiry": "2021-11-12T22:28:51.101000-08:00", "provider": "OTHER", "roleArn": "arn:aws:iam::111122223333
:role/my-connector-role
" } } }如果
activationExpiry
已过,则注销集群然后重新注册。执行此操作会生成新的激活信息。
集群节点缺少出站连接
为正常工作,Amazon EKS Connector 需要到多个 AWS 端点的出站连接。如果没有到目标 AWS 区域 的出站连接,则无法连接私有集群。要解决此问题,您必须添加必要的出站连接。有关连接器要求的信息,请参阅 Amazon EKS Connector 注意事项。
Amazon EKS Connector Pods 处于 ImagePullBackOff
状态
如果您运行 get pods
命令且 Pods 处于 ImagePullBackOff
状态,则其无法正常工作。如果 Amazon EKS Connector Pods 处于 ImagePullBackOff
状态,则其无法正常工作。检查 Amazon EKS Connector Pods 的状态。
kubectl get pods -n eks-connector
示例输出如下。
NAME READY STATUS RESTARTS AGE
eks-connector-0 0/2 Init:ImagePullBackOff 0 4s
默认 Amazon EKS Connector 清单文件引用来自 Amazon ECR Public Gallery