排查 ACK 功能问题 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

排查 ACK 功能问题

本主题将提供针对适用于 ACK 的 EKS 功能的问题排查指南,包括功能运行状况检查、资源状态验证和 IAM 权限问题。

注意

EKS 功能完全托管,可在您的集群之外运行。您无权访问控制器日志或控制器命名空间。问题排查侧重于功能运行状况、资源状态和 IAM 配置。

功能处于活动状态,但无法创建资源

如果 ACK 功能显示为 ACTIVE 状态但无法在 Amazon 中创建资源,请检查功能运行状况、资源状态和 IAM 权限。

检查功能运行状况

您可以在 EKS 控制台或使用 Amazon CLI 查看功能运行状况和状态问题。

控制台

  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 选择集群名称。

  3. 选择可观测性选项卡。

  4. 选择监控集群

  5. 选择功能选项卡,查看所有功能的运行状况和状态。

Amazon CLI

# View capability status and health aws eks describe-capability \ --region region-code \ --cluster-name my-cluster \ --capability-name my-ack # Look for issues in the health section

常见原因

  • 缺少 IAM 权限:功能角色缺少 Amazon 服务权限

  • 命名空间错误:在未配置正确 IAMRoleSelector 的命名空间中创建了资源

  • 资源规范无效:检查资源状态条件是否存在验证错误

  • API 节流:达到了 Amazon API 速率限制

  • 准入 Webhook:准入 Webhook 阻止了控制器修补资源状态

检查资源状态

# Describe the resource to see conditions and events kubectl describe bucket my-bucket -n default # Look for status conditions kubectl get bucket my-bucket -n default -o jsonpath='{.status.conditions}' # View resource events kubectl get events --field-selector involvedObject.name=my-bucket -n default

验证 IAM 权限

# View the Capability Role's policies aws iam list-attached-role-policies --role-name my-ack-capability-role aws iam list-role-policies --role-name my-ack-capability-role # Get specific policy details aws iam get-role-policy --role-name my-ack-capability-role --policy-name policy-name

资源已在 Amazon 中创建,但未在 Kubernetes 中显示

ACK 仅跟踪通过 Kubernetes 清单创建的资源。要使用 ACK 管理现有 Amazon 资源,请使用接管功能。

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: existing-bucket annotations: services.k8s.aws/adoption-policy: "adopt-or-create" spec: name: my-existing-bucket-name

有关资源接管的更多信息,请参阅 ACK 概念

无法创建跨账户资源

如果使用 IAM 角色选择器时,无法在目标 Amazon 账户中创建资源,请验证信任关系和 IAMRoleSelector 配置。

验证信任关系

# Check the trust policy in the target account role aws iam get-role --role-name cross-account-ack-role --query 'Role.AssumeRolePolicyDocument'

信任策略必须允许源账户的功能角色代入它。

确认 IAMRoleSelector 配置

# List IAMRoleSelectors (cluster-scoped) kubectl get iamroleselector # Describe specific selector kubectl describe iamroleselector my-selector

验证命名空间对应关系

IAMRoleSelectors 是集群范围内的资源,但针对特定的命名空间。请确保 ACK 资源位于与 IAMRoleSelector 的命名空间选择器匹配的命名空间:

# Check resource namespace kubectl get bucket my-cross-account-bucket -n production # List all IAMRoleSelectors (cluster-scoped) kubectl get iamroleselector # Check which namespace the selector targets kubectl get iamroleselector my-selector -o jsonpath='{.spec.namespaceSelector}'

检查 IAMRoleSelected 条件

通过检查 ACK.IAMRoleSelected 条件,验证 IAMRoleSelector 是否已与资源成功匹配:

# Check if IAMRoleSelector was matched kubectl get bucket my-cross-account-bucket -n production -o jsonpath='{.status.conditions[?(@.type=="ACK.IAMRoleSelected")]}'

如果条件为 False 或缺失,则说明 IAMRoleSelector 的命名空间选择器与资源所在的命名空间不匹配。验证选择器的 namespaceSelector 是否与资源的命名空间标签匹配。

检查功能角色权限

功能角色需要目标账户角色的 sts:AssumeRole 权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::[.replaceable]`444455556666`:role/[.replaceable]`cross-account-ack-role`" } ] }

有关跨账户配置的详细信息,请参阅配置 ACK 权限

后续步骤