
Я пытаюсь изучить AWS EKS и следуюНачало работы с Amazon EKS — Консоль управления AWS и AWS CLIпошаговое руководство, за исключением региона, который я изменил на us-east-1.
Я могу создать свой кластер, my-cluster
но когда я пытаюсь настроить свой компьютер, который является экземпляром EC2 (T2.Micro), для связи с кластером, я получаю error: You must be logged in to the server (Unauthorized)
ошибку. При глубоком погружении я обнаружил, что роль EC2 (ARN - arn:aws:iam::123456789012:role/ec2-admin) должна принять роль, которая создала кластер (ARN - arn:aws:iam::123456789012:role/myAmazonEKSClusterRole). Я также внес эти изменения в определение роли, изменив доверительные отношения в myAmazonEKSClusterRole
получении arn:aws:sts::123456789012:assumed-role/myAmazonEKSClusterRole/test-session
После этого я могу выполнять aws eks
команды, но kubectl
команды все еще ускользают от меня.
Для выполненияkubectl
команд я пытаюсь следовать шагам вУправление пользователями или ролями IAM для вашего кластера. Однако они просят меня внести изменения в aws-auth-cm.yaml
файл configMap, чего я не могу сделать, поскольку не могу выполнить kubectl apply
команду.
Мой kubeconfig
файл -
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <cert>
name: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
contexts:
- context:
cluster: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
user: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
name: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
current-context: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
kind: Config
preferences: {}
users:
- name: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
user:
exec:
apiVersion: client.authentication.k8s.io/v1alpha1
args:
- --region
- us-east-1
- eks
- get-token
- --cluster-name
- my-cluster
command: aws
Содержимое файла aws-auth-cm.yaml после внесения изменений:
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
# - rolearn: <ARN of instance role (not instance profile)>
# username: system:node:{{EC2PrivateDNSName}}
# groups:
# - system:bootstrappers
# - system:nodes
- rolearn: arn:aws:iam::375712918983:role/myAmazonEKSClusterRole
username: myAmazonEKSClusterRole
groups:
- system:masters
Можете ли вы помочь с этим или дать какие-нибудь советы?
Пожалуйста, дай мне знать, если возникнут какие-либо вопросы.
решение1
Вам понадобится одна из трех вещей:
- предположим, что
arn:aws:iam::123456789012:role/myAmazonEKSClusterRole
в терминальном сеансеaws eks get-token
запущенный процессkubectl
будет вести себя правильно - создайте профиль awscli, который берет на себя
arn:aws:iam::123456789012:role/myAmazonEKSClusterRole
роль, и обновите его,args:
включив[..., "--profile", "whatever-you-call-that-profile",...]
- или возьмите на себя роль в терминале, запустите
aws eks get-token
и поместите эти статические учетные данные в ваш kubeconfig, поскольку, похоже, эти учетные данные вам не понадобятся надолго только для обновления этого ConfigMap
Для первого я имею в виду, aws sts assume-role --role-arn arn:aws:iam::123456789012:role/myAmazonEKSClusterRole ... | tee sts-creds.json
а затем export AWS_ACCESS_KEY_ID= AWS_SECRET_KEY= AWS_SESSION_TOKEN=
на основе содержимого этого json
Под вторым я подразумеваю:
$ cat >> $HOME/.aws/config <<FOO
[profile my-cluster]
assume_role = arn:aws:iam::123456789012:role/myAmazonEKSClusterRole
source_profile = whatever
; or credential_source = whatever
FOO
в соответствии сэта документация