Невозможно предоставить дополнительным ролям AWS возможность взаимодействия с моим кластером

Невозможно предоставить дополнительным ролям AWS возможность взаимодействия с моим кластером

Я пытаюсь изучить 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

в соответствии сэта документация

Связанный контент