[英]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 訪問我的集群?
system:master
權限,這足以讓kubectl
正常工作。 您需要使用此用戶憑證( AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
)來訪問集群。 如果您沒有創建特定的 IAM 用戶來創建集群,那么您可能是使用根 AWS 賬戶創建的。 在這種情況下,您可以使用 root 用戶憑據( 為 Root 用戶創建訪問密鑰)。aws-auth
ConfigMap 中——它包含 IAM 實體 -> kubernetes ServiceAccount 映射。 我不確定您如何為aws-iam-authenticator
傳遞憑據:
~/.aws/credentials
和aws_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 用戶創建。
在查看評論后,我認為您似乎:
AWS_ACCESS_KEY_ID
創建了 AWS 憑證( AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
)。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 配置文件prod
和dev
。
使用以下命令為生產集群和開發集群生成 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.