Передача токена EKS другим командам kubectl cli - PullRequest
3 голосов
/ 20 мая 2019

Скажем, я получаю токен EKS, используя:

aws eks get-token --region us-west-2 --cluster-name eks1

результат выглядит следующим образом:

{"status": {"token": "k8s-aws-v1.aHR0.....Ni"}, "kind": "ExecCredential", "apiVersion": "client.authentication.k8s.io/v1alpha1", "spec": {}}

как я могу передать токен другим командам cli?что-то вроде:

kubectl get svc --token="$token-from-above"

без токена, я получаю эту ошибку:

ошибка: Вы должны войти в систему на сервере (неавторизовано)

но мои кредиты AWS присутствуют, поэтому я могу получить токен.Я предполагаю, что это тот же токен, который был сгенерирован aws-iam-authenticator token -i eks1

Я попытался запустить это:

export AWS_SESSION_TOKEN="$token-from-above"
kubectl get svc

, который тоже не работал, та же ошибка.

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

@ MrCholo, вы уже настроили KUBECONFIG на использование потока учетных данных exec?С EKS и / или аутентификатором вам не нужно генерировать токен, а затем вставлять его в каждый запрос kubectl имеет способ exec создания двоичного файла для вас.Мы запекли все это в команду update-kubeconfig cli, которую вы можете увидеть https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl

Но как это будет выглядеть примерно так:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: XXX
    server: XXX
  name: XXX
contexts:
- context:
    cluster: XXX
    user: XXX
  name: XXX
current-context: XXX
kind: Config
preferences: {}
users:
- name: XXX
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args:
      - eks
      - get-token
      - --region us-west-2 
      - --cluster-name eks1
      command: aws
      env: null

Вам понадобитсячтобы убедиться, что у вас есть хотя бы версия клиента 1.10+ kubectl, которую можно проверить с помощью kubectl version --client --short.

Другие примечания: этот токен не является токеном AWS IAM, это сгенерированный иподписанный URL-адрес, используемый сервером API для проверки того, кто является пользователем.Основной запрос на самом деле aws sts get-caller-identity, но мы не выполняем запрос, мы просто подписываем URL, затем base64 кодируем его и инкапсулируем в JSON для отправки на сервер API.Как только он передается на сервер API, токен отправляется на веб-сервер аутентификатора в плоскости управления, которая декодирует, а затем «завершает» вызов STS, чтобы получить информацию о том, кто вы, и затем использовать ее для проверки, если вы попали в белый список пользователей..

Надеюсь, это поможет.

1 голос
/ 20 мая 2019

Убедитесь, что у вас не сконфигурированы какие-либо из этих переменных env:

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY

Большинство (если не все) инструментов aws будут соблюдать эти конфигурации поверх всего остального.Я был одурачен этим, когда пытался использовать AWS_PROFILE, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...