簡體   English   中英

如何讓 kubectl 登錄到 AWS EKS 集群?

[英]How do you get kubectl to log in to an AWS EKS cluster?

從一個 ~empty AWS 帳戶開始,我試圖遵循https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html

所以這意味着我創建了一個 VPS 堆棧,然后安裝了 aws-iam-authenticator、awscli 和 kubectl,然后創建了一個具有編程訪問權限和直接附加 AmazonEKSAdminPolicy 的 IAM 用戶。

然后我使用該網站創建我的 EKS 集群並使用aws configure設置我的 IAM 用戶的訪問密鑰和密碼。

aws eks update-kubeconfig --name wr-eks-cluster工作正常,但是:

kubectl get svc
error: the server doesn't have a resource type "svc"

無論如何,我繼續創建我的工作節點堆棧,現在我陷入了死胡同:

kubectl apply -f aws-auth-cm.yaml
error: You must be logged in to the server (the server has asked for the client to provide credentials)

aws-iam-authenticator token -i <my cluster name>似乎工作正常。

我似乎缺少的是,當您創建集群時,您指定了一個 IAM 角色,但是當您創建用戶(根據指南)時,您附加了一個策略。 我的用戶應該如何訪問這個集群?

或者最終,我如何繼續使用 kubectl 訪問我的集群?

  1. 文檔中所述,AWS IAM 用戶創建的 EKS 集群會自動獲得system:master權限,這足以讓kubectl正常工作。 您需要使用此用戶憑證( AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY )來訪問集群。 如果您沒有創建特定的 IAM 用戶來創建集群,那么您可能是使用根 AWS 賬戶創建的。 在這種情況下,您可以使用 root 用戶憑據( 為 Root 用戶創建訪問密鑰)。
  2. 主要的魔法在集群中的aws-auth ConfigMap 中——它包含 IAM 實體 -> kubernetes ServiceAccount 映射。

我不確定您如何為aws-iam-authenticator傳遞憑據:

  • 如果你有~/.aws/credentialsaws_profile_of_eks_iam_creator那么你可以試試$ AWS_PROFILE=aws_profile_of_eks_iam_creator kubectl get all --all-namespaces
  • 此外,您可以使用環境變量$ AWS_ACCESS_KEY_ID=XXX AWS_SECRET_ACCESS_KEY=YYY AWS_DEFAULT_REGION=your-region-1 kubectl get all --all-namespaces

它們都應該工作,因為kubectl ...將使用生成的~/.kube/config包含aws-iam-authenticator token -i cluster_name命令。 aws-iam-authenticator使用環境變量或~/.aws/credentials為您提供令牌。

此外,此答案可能有助於理解第一個 EKS 用戶創建。

在查看評論后,我認為您似乎:

  1. 已使用 root 用戶創建集群。
  2. 然后創建了一個 IAM 用戶並AWS_ACCESS_KEY_ID創建了 AWS 憑證( AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY )。
  3. 在您的kubeconfig設置中使用這些訪問和密鑰(不管如何 - 有多種方法)。

這是文檔中描述的問題:

如果您在運行 kubectl 命令時收到以下錯誤之一,則您的 kubectl 沒有為 Amazon EKS 正確配置,或者您使用IAM 用戶或角色憑證沒有映射到 Amazon EKS 集群中具有足夠權限的 Kubernetes RBAC 用戶.

  • 無法獲取令牌:AccessDenied:拒絕訪問
  • 錯誤:您必須登錄到服務器(未經授權)
  • 錯誤:服務器沒有資源類型“svc” <---你的情況

這可能是因為集群是使用一組 AWS憑證(來自 IAM 用戶或角色)創建的,而 kubectl 使用的是一組不同的憑證。

創建 Amazon EKS 集群時,創建集群的 IAM 實體(用戶或角色)將作為管理員(具有 system:masters 權限)添加到 Kubernetes RBAC 授權表中。
最初,只有該 IAM 用戶可以使用 kubectl 調用 Kubernetes API 服務器。

有關更多信息,請參閱管理集群的用戶或 IAM 角色 如果您使用控制台創建集群,則在集群上運行 kubectl 命令時,您必須確保相同的 IAM 用戶憑證位於 AWS 開發工具包憑證鏈中。

這是錯誤的原因。

正如已接受的答案所述 - 您需要編輯aws-auth管理集群的用戶或 IAM 角色

這是我使用aws-cli 的步驟


$ export AWS_ACCESS_KEY_ID="something"
$ export AWS_SECRET_ACCESS_KEY="something"
$ export AWS_SESSION_TOKEN="something"

$ aws eks update-kubeconfig \
  --region us-west-2 \
  --name my-cluster

>> Added new context arn:aws:eks:us-west-2:#########:cluster/my-cluster to /home/john/.kube/config

獎勵,使用kubectx切換 kubectl 上下文

$ kubectx 

>> arn:aws:eks:us-west-2:#########:cluster/airflow-dev     arn:aws:eks:us-east-1:#####:cluster/my-cluster  

$ kubectx arn:aws:eks:us-east-1:#####:cluster/my-cluster


>> Switched to context "arn:aws:eks:us-east-1:#####:cluster/my-cluster".

參考: https : //docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html

在系統上設置 aws 配置后,請檢查當前身份以驗證您使用的是對 Amazon EKS 集群具有權限的正確憑證:

aws sts get-caller-identity

之后使用:

aws eks --region region update-kubeconfig --name cluster_name

這將在您的主路徑中創建kubeconfig ,並在$HOME/.kube/config處使用所需的 kubernetes API 服務器 url。

之后,您可以按照kubectl說明進行安裝,這應該可以工作。

對於那些在 aws cli 中使用多個profiles的人。 這是我的設置:

~/.aws/credentials文件:

  1 [prod]
  2 aws_access_key_id=****
  3 aws_secret_access_key=****
  4 region=****
 11 [dev]
 12 aws_access_key_id=****
 13 aws_secret_access_key=****

我有兩個 aws 配置文件proddev

使用以下命令為生產集群和開發集群生成 kubeconfig

$ aws eks --region <region> update-kubeconfig --name <cluster_name> --profile dev
$ aws eks --region <region> update-kubeconfig --name <cluster_name> --profile prod

此配置文件元數據也存儲在配置文件 ( ~/.kube/config ) 中。

使用kubectx查看/更改當前集群,使用kubens在集群內切換命名空間。

$ kubectx
arn:aws:eks:region:accontid:cluster/dev
arn:aws:eks:region:accontid:cluster/prod

切換到dev集群。

$ kubectx arn:aws:eks:region:accountid:cluster/dev
Switched to context "arn:aws:eks:region:accountid:cluster/dev".

同樣,我們可以使用kubens查看/更改當前集群中的命名空間。

請使用您更新的密鑰訪問密鑰 ID來連接 EKS 集群。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM