帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
排查 ACK 功能问题
本主题将提供针对适用于 ACK 的 EKS 功能的问题排查指南,包括功能运行状况检查、资源状态验证和 IAM 权限问题。
注意
EKS 功能完全托管,可在您的集群之外运行。您无权访问控制器日志或控制器命名空间。问题排查侧重于功能运行状况、资源状态和 IAM 配置。
功能处于活动状态,但无法创建资源
如果 ACK 功能显示为 ACTIVE 状态但无法在 Amazon 中创建资源,请检查功能运行状况、资源状态和 IAM 权限。
检查功能运行状况:
您可以在 EKS 控制台或使用 Amazon CLI 查看功能运行状况和状态问题。
控制台:
-
从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters
。 -
选择集群名称。
-
选择可观测性选项卡。
-
选择监控集群。
-
选择功能选项卡,查看所有功能的运行状况和状态。
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-namemy-ack-capability-roleaws iam list-role-policies --role-namemy-ack-capability-role# Get specific policy details aws iam get-role-policy --role-namemy-ack-capability-role--policy-namepolicy-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-namecross-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 bucketmy-cross-account-bucket-nproduction# List all IAMRoleSelectors (cluster-scoped) kubectl get iamroleselector # Check which namespace the selector targets kubectl get iamroleselectormy-selector-o jsonpath='{.spec.namespaceSelector}'
检查 IAMRoleSelected 条件:
通过检查 ACK.IAMRoleSelected 条件,验证 IAMRoleSelector 是否已与资源成功匹配:
# Check if IAMRoleSelector was matched kubectl get bucketmy-cross-account-bucket-nproduction-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 权限。
后续步骤
-
针对 EKS 的 ACK 注意事项:ACK 注意事项和最佳实践
-
配置 ACK 权限:配置 IAM 权限和多账户模式
-
ACK 概念:了解 ACK 概念和资源生命周期
-
EKS 功能问题排查:一般功能问题排查指导