it-swarm.com.de

kubectl error Sie müssen beim Zugriff auf den EKS-Cluster am Server angemeldet sein (nicht autorisiert)

Ich habe versucht, den Leitfaden für den Einstieg in EKS zu befolgen. Als ich versucht habe, kubectl get service aufzurufen, wurde die folgende Meldung angezeigt: Fehler: Sie müssen am Server angemeldet sein (nicht autorisiert) Das habe ich getan:
1. Erstellt den EKS-Cluster.
2. Die Konfigurationsdatei wurde wie folgt erstellt:

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/******"
  1. Neueste aws cli heruntergeladen und installiert
  2. Ich habe die Berechtigungsnachweise für meinen IAM-Benutzer und die Region als us-west-2 konfiguriert und festgelegt
  3. Dem IAM-Benutzer wurde eine Richtlinie für sts: AssumeRole für die EKS-Rolle hinzugefügt und als vertrauenswürdige Beziehung eingerichtet
  4. Richten Sie kubectl ein, um die Konfigurationsdatei zu verwenden

Ich kann ein Token erhalten, wenn ich heptio-authentator-aws token -r arn: aws: iam :: **********: role/******** -i mein-Cluster Wenn ich versuche, auf das Cluster zuzugreifen, erhalte ich weiterhin einen Fehler: Sie müssen am Server angemeldet sein (nicht autorisiert).

Irgendeine Idee, wie man dieses Problem beheben kann?

17
Itay k

Wenn ein Amazon EKS-Cluster erstellt wird, wird die IAM-Entität (Benutzer oder Rolle), die den Cluster erstellt, der Administratorin der Kubernetes RBAC-Autorisierungstabelle hinzugefügt. Zunächst kann nur dieser IAM-Benutzer mithilfe von kubectl Aufrufe an den Kubernetes-API-Server tätigen. 

eks-docs

Um anderen aws - Benutzern Zugriff zu gewähren, müssen Sie zuerst _ bearbeiten. Sie müssen ConfigMap bearbeiten, um einem Amazon EKS-Cluster einen IAM-Benutzer oder eine IAM-Rolle hinzuzufügen.

Sie können die ConfigMap-Datei bearbeiten, indem Sie Folgendes ausführen: kubectl edit -n kube-system configmap/aws-auth. Danach erhalten Sie einen Editor, mit dem Sie neue Benutzer zuordnen.

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"

Beachten Sie die Variable mapUsers, an der Sie ops-user zusammen mit dem Label mapAccounts hinzufügen, das das Benutzerkonto AWS mit einem Benutzernamen im Kubernetes-Cluster verknüpft.

In RBAC werden jedoch allein durch diese Aktion keine Berechtigungen bereitgestellt. Sie müssen weiterhin Rollenbindungen in Ihrem Cluster erstellen, um diesen Entitäten Berechtigungen zu erteilen. 

Wie in der Amazon-Dokumentation ( iam-docs ) angegeben, müssen Sie für den in der ConfigMap angegebenen Benutzer eine Rollenbindung für den kubernetes-Cluster erstellen. Sie können dies tun, indem Sie den folgenden Befehl ausführen ( kub-docs ):

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

dies gibt dem Cluster-Administrator ClusterRole einen Benutzer mit dem Namen ops-user im gesamten Cluster.

19
Steven

Stellen Sie außerdem sicher, dass sich Ihre Benutzer in der Konfigurationsdatei von aws-auth k8s befinden:

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

4
juicedM3

Ich habe die letzten beiden Zeilen der Konfigurationsdatei auskommentiert

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

und es hat funktioniert, obwohl ich keine Ahnung habe, warum

2
Itay k

Sie müssen den Cluster unter demselben IAM-Profil erstellen, auf das Sie über AWS cli zugreifen.

Anders ausgedrückt, in ~/.aws/credentials muss das Profil, das auf kubectl zugreift, genau mit dem IAM übereinstimmen, das zum Erstellen des Clusters verwendet wurde.

Meine Empfehlung ist, AWS cli zum Erstellen Ihrer Cluster zu verwenden, da das Erstellen über die GUI eher verwirrend als hilfreich ist. Der Getting Started Guide ist die beste Wahl, um loszulegen.

1
DPS

Ich hatte das gleiche Problem. Es ist wahrscheinlich, dass Sie ein Root-Konto verwenden. Es scheint, als würden Root-Accounts die erforderlichen Rollen nicht annehmen. Dieser Fehler kann manchmal getarnt werden, wenn Sie abgelaufene Schlüssel verwenden. 

1
Anthony Skipper

Das passiert mir auch mit lokaler Umgebung auf minikube, unabhängig von EKS. Mein Problem hängt mit diesem Problem zusammen: https://github.com/kubernetes/kubernetes/issues/76774

Die Lösung, die ich angenommen habe, ist, die Cache-Verzeichnisse von kubectl zu entfernen: rm -rf ~/.kube/{cache,http-cache}. Ich denke, dies ist die einzige Umgehung zum Zeitpunkt des Schreibens.

0
lzecca

Ich habe gerade dieses Problem behoben. Ich habe eine Frage. Führen Sie dies in einem Firmen-WLAN-Netzwerk aus? Wenn ja, können Sie eine EC2-Instanz erstellen und dann testen, ob Sie kubectl get svc?

Versuchen Sie auch, ob dieser Befehl funktioniert kubectl get svc ---insecure-skip-tls-verify

0
Arun Sethupat