疑難排解 Amazon EKS 連接 - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] 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者模擬代表來IAM自. AWS Management ConsoleKubernetesAPI從 AWS eks-connector服務帳戶存取的每個主體都必須被授與權限,才能以其Kubernetes使用者名稱來模擬對應的IAMARNKubernetes使用者。在下列範例中,會IAMARN對應至Kubernetes使用者。

  • IAM AWS 帳戶john中的使111122223333用者對應至使Kubernetes用者。IAM最佳作法建議您將權限授與角色而非使用者。

    arn:aws:iam::111122223333:user/john
  • IAM AWS 帳號admin中的角色111122223333對應至使Kubernetes用者:

    arn:aws:iam::111122223333:role/admin

    結果是一個IAM角色ARN,而不是會 AWS STS 話ARN。

如需如何設定 ClusterRoleClusterRoleBinding 以授予 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,您可以透過執行下列命令輕鬆授予使用者存取權。將userARN1userARN2取代為可授予檢視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 註冊activationIdactivationCode。註冊可能會失敗,這可能會導致 connector-init 容器損毀,產生與以下錯誤相似的錯誤。

F1116 20:30:47.261469       1 init.go:43] failed to initiate eks-connector: InvalidActivation:

若要對此問題進行疑難排解,請考慮以下原因和建議的修正:

  • 註冊可能會失敗,因為 activationIdactivationCode 不在清單檔案檔案中。如果是這種情況,請確保它們是從RegisterClusterAPI操作返回的正確值,並activationCode且在清單文件中。activationCode 新增至 Kubernetes 秘密中,因此它必須採用 base64 編碼。如需詳細資訊,請參閱步驟 1:註冊叢集

  • 註冊可能因啟用過期而失敗。這是因為基於安全考量,您必須在註冊叢集後的三天內啟用 Amazon EKS 連接器。若要解決此問題,請確定 Amazon EKS 連接器資訊清單已在到期日期和時間之前套用至目標Kubernetes叢集。要確認您的激活到期日,請致電DescribeClusterAPI操作。

    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 公用圖庫的映像。目標Kubernetes群集可能無法從 Amazon ECR 公共圖庫提取圖像。您可以解決 Amazon ECR 公共圖庫映像提取問題,或考慮在您選擇的私有容器登錄中鏡像映像。