協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
對 ACK 功能的問題進行故障診斷
本主題提供 ACK 的 EKS 功能疑難排解指引,包括功能運作狀態檢查、資源狀態驗證和 IAM 許可問題。
注意
EKS 功能是完全受管的,並在叢集外部執行。您無法存取控制器日誌或控制器命名空間。故障診斷著重於功能運作狀態、資源狀態和 IAM 組態。
功能是 ACTIVE,但資源尚未建立
如果您的 ACK 功能顯示ACTIVE狀態,但未在其中建立資源 AWS,請檢查功能運作狀態、資源狀態和 IAM 許可。
檢查功能運作狀態:
您可以在 EKS 主控台或使用 AWS CLI 檢視功能運作狀態和狀態問題。
主控台:
-
在以下網址開啟 Amazon EKS 主控台:https://console.aws.amazon.com/eks/home#/clusters
。 -
選取您的叢集名稱。
-
選擇可觀測性索引標籤。
-
選擇監控叢集。
-
選擇功能索引標籤以檢視所有功能的運作狀態和狀態。
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-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
在 中建立 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-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 功能進行故障診斷 - 一般功能疑難排解指引