J'ai essayé de suivre le guide de démarrage pour EKS. Lorsque j'ai essayé d'appeler kubectl get service, j'ai reçu le message suivant: erreur: vous devez être connecté au serveur (non autorisé) Voici ce que j'ai fait:
1. Création du cluster EKS.
2. Créé le fichier de configuration comme suit:
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/******"
Je peux obtenir un jeton en exécutant le jeton heptio-authentator-aws -r arn: aws: iam :: **********: role/********* -i my-cluster -ame Cependant, lorsque j'essaie d'accéder au cluster, l'erreur continue à se produire: vous devez être connecté au serveur (non autorisé).
Une idée de comment résoudre ce problème?
Lorsqu'un cluster Amazon EKS est créé, l'entité IAM (utilisateur ou rôle) qui crée le cluster est ajoutée à la table d'autorisation Kubernetes RBAC en tant qu'administrateur. Initialement, seul cet utilisateur IAM peut appeler le serveur API Kubernetes à l'aide de kubectl.
Par conséquent, pour ajouter un accès à d'autres utilisateurs aws, commencez par éditer ConfigMap afin d'ajouter un utilisateur ou un rôle IAM à un cluster Amazon EKS.
Vous pouvez éditer le fichier ConfigMap en exécutant: kubectl edit -n kube-system configmap/aws-auth
, après quoi un éditeur avec lequel vous mapperez de nouveaux utilisateurs vous sera attribué.
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"
Tenez compte de mapUsers
où vous ajoutez ops-user avec le libellé mapAccounts
qui mappe le compte utilisateur AWS avec un nom d'utilisateur sur le cluster Kubernetes.
Cependant, aucune action n'est fournie dans RBAC par cette action uniquement; vous devez toujours créer des liaisons de rôle dans votre cluster pour fournir les autorisations à ces entités.
Comme le stipule la documentation Amazon ( iam-docs ), vous devez créer une liaison de rôle sur le cluster kubernetes pour l'utilisateur spécifié dans ConfigMap. Vous pouvez le faire en exécutant la commande suivante ( kub-docs ):
kubectl create clusterrolebinding ops-user-cluster-admin-binding --clusterrole=cluster-admin --user=ops-user
qui attribue l’administrateur de cluster ClusterRole
à un utilisateur nommé ops-user sur l’ensemble du cluster.
Assurez-vous également que vos utilisateurs se trouvent dans ConfigMap aws-auth k8s:
https://docs.aws.Amazon.com/eks/latest/userguide/add-user-role.html
J'ai commenté les deux dernières lignes du fichier de configuration
# - "-r"
# - "arn:aws:iam::**********:role/**********"
et cela a fonctionné bien que je ne sache pas pourquoi
Vous devez créer le cluster sous le même profil IAM que celui auquel vous accédez via AWS cli.
En d'autres termes, dans ~/.aws/credentials
, le profil qui accède à kubectl doit correspondre exactement au même IAM utilisé pour créer le cluster.
Ma recommandation est d'utiliser AWS cli pour créer vos clusters, car la création à partir de l'interface graphique peut être plus déroutante qu'utile. Le guide Mise en route est votre meilleur moyen de vous mettre en mouvement.
J'ai eu le même problème . Il est probable que vous utilisiez un compte root. Il semble que les comptes root ne puissent pas assumer les rôles requis. Cette erreur peut parfois être masquée si vous utilisez des clés expirées.