對 ACK 功能的問題進行故障診斷 - Amazon EKS

協助改進此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

對 ACK 功能的問題進行故障診斷

本主題提供 ACK 的 EKS 功能疑難排解指引,包括功能運作狀態檢查、資源狀態驗證和 IAM 許可問題。

注意

EKS 功能是完全受管的,並在叢集外部執行。您無法存取控制器日誌或控制器命名空間。故障診斷著重於功能運作狀態、資源狀態和 IAM 組態。

功能是 ACTIVE,但資源尚未建立

如果您的 ACK 功能顯示ACTIVE狀態,但未在其中建立資源 AWS,請檢查功能運作狀態、資源狀態和 IAM 許可。

檢查功能運作狀態

您可以在 EKS 主控台或使用 AWS CLI 檢視功能運作狀態和狀態問題。

主控台

  1. 在以下網址開啟 Amazon EKS 主控台:https://console.aws.amazon.com/eks/home#/clusters

  2. 選取您的叢集名稱。

  3. 選擇可觀測性索引標籤。

  4. 選擇監控叢集

  5. 選擇功能索引標籤以檢視所有功能的運作狀態和狀態。

AWS 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 許可遺失:功能角色缺少 AWS 服務的許可

  • 命名空間錯誤:在命名空間中建立的資源沒有適當的 IAMRoleSelector

  • 無效的資源規格:檢查資源狀態條件是否有驗證錯誤

  • API 限流:達到 AWS 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

在 中建立 AWS 但未在 Kubernetes 中顯示的資源

ACK 只會追蹤透過 Kubernetes 資訊清單建立的資源。若要使用 ACK 管理現有 AWS 資源,請使用採用功能。

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 角色選取器時未在目標 AWS 帳戶中建立資源,請驗證信任關係和 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 許可

後續步驟