協助改善此頁面
想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
疑難排解 Amazon EKS 連接
本主題涵蓋使用 Amazon EKS 連接器時可能遇到的一些常見錯誤,包括如何解決這些錯誤的說明和因應措施。
基本疑難排解
本節說明不清楚問題時進行診斷的步驟。
檢查 Amazon EKS 接頭狀態
檢查 Amazon EKS 連接器狀態。
kubectl get pods -n eks-connector
檢查 Amazon EKS 連接器日
Amazon 連EKS接器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 叢集是由clusterName
單一 AWS 帳戶和 AWS 區域. 如果 Amazon 中有多個連線叢集EKS,您可以確認目前EKS叢集註冊到哪個 Amazon Kubernetes 叢集。為此,請輸入下列內容來找出目前叢集的 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 連接器中使用Pods的映像檔。
kubectl get pods -n eks-connector -o jsonpath="{.items[*].spec.containers[*].image}" | tr -s '[[:space:]]' '\n'
-
使用下列命令來判斷執行 Amazon EKS 連接器所在的節點名稱。
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 禁止
如果您在執行 helm 安裝命令時收到下列錯誤:
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接器 AWS 尚未成功將叢集連接到。對於已註冊的叢集,Pending
狀態表示連接尚未成功建立。若要解決此問題,請確定您已將清單檔案應用於目標 Kubernetes 叢集。如果您將其套用於叢集,但叢集仍處於 Pending
狀態,則 eks-connector
statefulset 很可能無法正常運作。若要排除此問題,請參閱本主題中的 Amazon EKS 連接器Pods崩潰循環 。
主控台錯誤:User
“system:serviceaccount:eks-connector:eks-connector” can't impersonate resource
“users” in API group “”
在叢集範圍
Amazon EKS 連接器使用使用Kubernetes者模擬eks-connector
服務帳戶存取的每個主體都必須被授與權限,才能以其Kubernetes使用者名稱來模擬對應的IAMARNKubernetes使用者。在下列範例中,會IAMARN對應至Kubernetes使用者。
-
IAM AWS 帳戶
中的使john
用者對應至使Kubernetes用者。IAM最佳作法建議您將權限授與角色而非使用者。111122223333
arn:aws:iam::
111122223333
:user/john
-
IAM AWS 帳號
中的角色admin
對應至使Kubernetes用者:111122223333
arn:aws:iam::
111122223333
:role/admin
結果是一個IAM角色ARN,而不是會 AWS STS 話ARN。
如需如何設定 ClusterRole
和 ClusterRoleBinding
以授予 eks-connector
服務帳戶權限來模擬映射使用者的說明,請參閱 授予存取權以檢視 Amazon EKS 主控台上的Kubernetes叢集資源。請確定在範本中,%IAM_ARN%
已取代為 AWS Management Console IAM主參與者IAMARN的。
主控台錯誤:[...] is forbidden: User [...] cannot list
resource “[...] in API group”
在叢集範圍
請考量下列問題。Amazon EKS 連接器已成功模擬目標Kubernetes叢集中的要求 AWS Management Console IAM主體。不過,模擬的主體沒有作業KubernetesAPI的RBAC權限。
若要解決此問題,有兩種方法可將許可授予其他使用者。如果您先前透過 Helm Chart 安裝了 eks-connector,您可以透過執行下列命令輕鬆授予使用者存取權。將userARN1
和userARN2
取代為可授予檢視Kubernetes資源存取權的IAM角色清單:ARNs
helm upgrade eks-connector oci://public.ecr.aws/eks-connector/eks-connector-chart \ --reuse-values \ --set 'authentication.allowedUserARNs={userARN1,userARN2}'
或者,身為叢集管理員,將適當的RBAC權限層級授與個別Kubernetes使用者。如需詳細資訊和範例,請參閱 授予存取權以檢視 Amazon EKS 主控台上的Kubernetes叢集資源。
主控台錯誤:Amazon EKS 無法與您的Kubernetes叢集API伺服器通訊。叢集必須ACTIVE處於成功連線的狀態。請過幾分鐘後再試。
如果 Amazon EKS 服務無法與目標叢集中的 Amazon EKS 連接器通訊,可能是因為下列其中一個原因:
-
目標叢集中的 Amazon EKS 連接器運作狀況不佳。
-
目標叢集與 AWS 區域之間連接不良或連接中斷。
若要解決此問題,請檢查 Amazon EKS 連接器記錄。如果您沒有看到 Amazon 連EKS接器的錯誤,請在幾分鐘後重試連線。如果您經常遇到目標叢集的高延遲或間歇性連線,請考慮將叢集重新註冊到離您較近的叢集。 AWS 區域
Amazon EKS 連接器Pods崩潰循環
造成 Amazon EKS 連接器進入CrashLoopBackOff
狀態Pod的原因有很多。此問題可能涉及 connector-init
容器。檢查 Amazon EKS 連接器的狀態Pod。
kubectl get pods -n eks-connector
範例輸出如下。
NAME READY STATUS RESTARTS AGE
eks-connector-0 0/2 Init:CrashLoopBackOff 1 7s
如果您的輸出與之前的輸出相似,請參閱 檢查 Amazon EKS 連接器日 以排除問題。
Failed to initiate eks-connector:
InvalidActivation
當您第一次啟動 Amazon EKS 連接器時,它會向 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 連接器。若要解決此問題,請確定 Amazon EKS 連接器資訊清單已在到期日期和時間之前套用至目標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接器需要對多個 AWS 端點的輸出連線。如果沒有目標 AWS 區域的對外連線,則無法連接私有叢集。若要解決此問題,您必須新增必要的對外連線。如需連接器要求的相關資訊,請參閱 Amazon EKS 連接器注。
Amazon EKS 連接器Pods處於ImagePullBackOff
狀態
如果您執行 get pods
命令,並且 Pods 處於 ImagePullBackOff
狀態,則它們無法正常運作。如果 Amazon EKS 連接器Pods處於狀ImagePullBackOff
態,則無法正常運作。檢查您的 Amazon EKS 連接器的狀態Pods。
kubectl get pods -n eks-connector
範例輸出如下。
NAME READY STATUS RESTARTS AGE
eks-connector-0 0/2 Init:ImagePullBackOff 0 4s
預設的 Amazon EKS 連接器資訊清單檔案會參考來自 Amazon ECR 公用圖庫