Ошибка kubectl Вы должны войти на сервер (неавторизованный) при доступе к кластеру EKS - PullRequest
0 голосов
/ 11 июня 2018

Я пытался следовать руководству по началу работы с EKS.Когда я попытался вызвать kubectl get service, я получил сообщение: error: Вы должны войти в систему на сервере (неавторизовано). Вот что я сделал:
1. Создан кластер EKS.
2. Создан конфигфайл следующим образом:

apiVersion: v1
clusters:
- cluster:
    server: https://*********.yl4.us-west-2.eks.amazonaws.com
    certificate-authority-data: *********
  name: *********
contexts:
- context:
    cluster: *********
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: heptio-authenticator-aws
      args:
        - "token"
        - "-i"
        - "*********"
        - "-r"
        - "arn:aws:iam::*****:role/******"
Загрузил и установил последнюю версию aws cli Запустил aws, настроив и установив учетные данные для моего пользователя IAM и региона как us-west-2 Добавлена ​​политика для пользователя IAM для sts: AssumeRole для роли EKS и настройка ее как доверительного отношения Настройка kubectl для использования файла конфигурации

Я могу получить токен при запуске токена heptio-authenticator-aws-r arn: aws: iam :: **********: role / ********* -i my-cluster-ame Однако, когда я пытаюсь получить доступ к кластеру, я получаю сообщение об ошибке: Вы должны войти в систему на сервере (не авторизовано)

Есть идеи, как решить эту проблему?

Ответы [ 7 ]

0 голосов
/ 03 июля 2018

При создании кластера Amazon EKS объект IAM (пользователь или роль), который создает кластер, добавляется в таблицу авторизации RBAC Kubernetes в качестве администратора.Первоначально только тот пользователь IAM может делать вызовы на сервер API Kubernetes, используя kubectl.

eks-docs

Таким образом, чтобы добавить доступ к другим aws пользователям, сначала необходимо отредактировать ConfigMap, чтобы добавить пользователя IAM илироль в кластере Amazon EKS.

Вы можете редактировать файл ConfigMap, выполнив: kubectl edit -n kube-system configmap/aws-auth, после чего вам будет предоставлен редактор, с которым вы сопоставляете новых пользователей.

apiVersion: v1
data:
  mapRoles: |
    - rolearn: arn:aws:iam::555555555555:role/devel-worker-nodes-NodeInstanceRole-74RF4UBDUKL6
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
  mapUsers: |
    - userarn: arn:aws:iam::111122223333:user/ops-user
      username: ops-user
      groups:
        - system:masters
  mapAccounts: |
    - "111122223333"

Обратите внимание на mapUsers, куда вы добавляете ops-user вместе с меткой mapAccounts, которая сопоставляет учетную запись пользователя AWS с именем пользователя в кластере Kubernetes.

Однако в этом действии только разрешения не предоставляются в RBAC;вы все равно должны создать привязки ролей в вашем кластере, чтобы предоставить эти права доступа.

Как указано в документации Amazon ( iam-docs ), вам необходимо создать привязку роли в кластере kubernetes для пользователя, указанного в ConfigMap.Это можно сделать, выполнив следующую команду ( kub-docs ):

kubectl create clusterrolebinding ops-user-cluster-admin-binding --clusterrole=cluster-admin --user=ops-user

, которая предоставляет администратору кластера ClusterRole пользователю по имени ops-user по всему кластеру.

0 голосов
/ 20 мая 2019

Это происходит также со мной с локальной средой на миникубе, независимо от EKS.Моя проблема связана с этой проблемой: https://github.com/kubernetes/kubernetes/issues/76774

Решение, которое я принял, заключается в удалении каталогов кеша kubectl: rm -rf ~/.kube/{cache,http-cache}.Я думаю, что это единственный обходной путь на момент написания.

0 голосов
/ 26 июня 2018

Я только что отладил эту проблему.У меня вопрос.Вы используете это в корпоративной сети Wi-Fi?Если да, можете ли вы создать экземпляр EC2, а затем проверить, можете ли вы выполнить kubectl get svc?

Кроме того, попробуйте, если эта команда работает kubectl get svc ---insecure-skip-tls-verify

0 голосов
/ 21 июня 2018

У меня была такая же проблема.Вероятно, вы используете учетную запись root.Кажется, корневые учетные записи заблокированы от принятия необходимых ролей.Эту ошибку иногда можно скрыть, если вы используете ключи с истекшим сроком действия.

0 голосов
/ 16 июня 2018

Вам необходимо создать кластер под тем же профилем IAM, к которому вы обращаетесь к нему через AWS cli.

В другом месте, внутри ~/.aws/credentials, указан профиль, который обращается к kubectl .соответствует точно тому же IAM , который использовался для создания кластера.

Я рекомендую использовать AWS cli для создания кластеров, поскольку создание из графического интерфейса пользователя может быть более запутанным, чем полезным.Руководство Getting Started - лучший выбор для запуска и запуска.

0 голосов
/ 15 июня 2018

Кроме того, убедитесь, что ваши пользователи находятся в aws-auth k8s ConfigMap:

https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html

0 голосов
/ 11 июня 2018

Я закомментировал последние две строки файла конфигурации

# - "-r"
# - "arn:aws:iam::**********:role/**********"

, и это сработало, хотя я понятия не имею, почему

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