aws -иам-аутентификатор & EKS - PullRequest
1 голос
/ 03 апреля 2020

Я развернул тестовый кластер EKS с подходящим configMap, и пользователи, входящие в единый вход, могут получить доступ к кластерам с помощью экспорта кредитов сеанса (AWS_ACCESS_KEY_ID, SECRET_ACCESS_KEY_ID, AWS_SESSION_TOKEN et c) и установив клиент aws -iam-authenticator в своем терминале. Проблема возникает, когда пользователи пытаются использовать профиль aws sso, сохраненный в ~/.aws/config, используя aws -iam-authenticator. Ошибка, полученная при выполнении любой команды kubectl, следующая:

 $ kubectl get all
    could not get token: NoCredentialProviders: no valid providers in chain. Deprecated.
        For verbose messaging see aws.Config.CredentialsChainVerboseErrors

Я проверил это на своей локальной машине (AWS CLI v2) и не добился успеха. Я экспортировал профиль AWS, найденный в файле ~/.aws/config через export AWS_PROFILE=User1, и при запуске aws sts get-caller-identity правильно отображается экспортируемый профиль. Я переключился между несколькими именованными профилями, и каждый из них получает правильные идентификационные данные и разрешения, однако при выполнении любой команды kubectl я получаю вышеуказанную ошибку. Я также пробовал символическую ссылку config -> credentials, но не повезло. Единственный способ это работает, если я экспортирую access_key, secret_key и session_token в переменные окружения.

Полагаю, я могу жить с необходимостью вставлять динамические c кредиты, которые приходят от AWS SSO, но моя потребность в поиске решений не позволит мне сдаться :(. Я следил за в этом github проблема , но не повезло. Конфигурационный файл kube, который я настроил, имеет спецификацию c 'd для AWS документации.

Я подозреваю, что это может быть что-то не так с развертыванием сервера aws-iam-authenticator, но ничего не отображается в журналах pod. Вот фрагмент из github page * page инструментов, за которым я think следовал правильно, но я пропустил шаг 3 по причинам что я забыл:

API-интерфейс Kubernetes интегрируется с AWS IAM Authenticator для Kubernetes с помощью токен-аутентификации webhook. При запуске сервера aws -iam-authenticator он генерирует файл конфигурации webhook и сохраните его в файловой системе хоста. Вам нужно будет добавить один дополнительный флаг в конфигурацию сервера API:

Файл конфигурации Kube

apiVersion: v1
clusters:
- cluster:
    server: <endpoint-url>
    certificate-authority-data: <base64-encoded-ca-cert>
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: aws-iam-authenticator
      args:
        - "token"
        - "-i"
        - "eks-cluster-name"
        - "-r"
        - "EKS-ADMIN-ROLE:ARN:::::::"
      env:
        - name: AWS_PROFILE
          value: "USER"

1 Ответ

1 голос
/ 08 апреля 2020

CLI v2 * 1006 теперь поддерживает единый вход AWS, поэтому я решил обновить файл конфигурации Kube, чтобы использовать команду aws вместо aws-iam-authenticator. Аутентификация через единый вход теперь очень проста! Похоже, что AWS хотел избавиться от необходимости иметь дополнительный двоичный файл для аутентификации в кластерах EKS, что меня устраивает! Надеюсь это поможет.

...