
Ich versuche AWS EKS zu lernen und folgeErste Schritte mit Amazon EKS – AWS Management Console und AWS CLISchritt-für-Schritt-Anleitung, mit Ausnahme der Region, die ich in us-east-1 geändert habe.
Ich kann meinen Cluster erstellen, my-cluster
aber wenn ich versuche, meinen Computer, der eine EC2-Instanz (T2.Micro) ist, für die Kommunikation mit dem Cluster zu konfigurieren, erhalte ich error: You must be logged in to the server (Unauthorized)
eine Fehlermeldung. Beim genaueren Hinsehen habe ich festgestellt, dass die EC2-Rolle (ARN - arn:aws:iam::123456789012:role/ec2-admin) die Rolle übernehmen muss, die den Cluster erstellt hat (ARN - arn:aws:iam::123456789012:role/myAmazonEKSClusterRole). Ich habe diese Änderungen auch in der Rollendefinition vorgenommen, indem ich die Vertrauensbeziehung in „ myAmazonEKSClusterRole
get “ geändert habe arn:aws:sts::123456789012:assumed-role/myAmazonEKSClusterRole/test-session
. Danach kann ich aws eks
Befehle ausführen, aber kubectl
die Befehle entgehen mir immer noch.
Zur Ausführungkubectl
Befehle auszuführen, versuche ich, die Schritte inVerwalten von Benutzern oder IAM-Rollen für Ihren Cluster. Allerdings werde ich aufgefordert, Änderungen an der configMap-Datei vorzunehmen, aws-auth-cm.yaml
was ich nicht tun kann, da ich den Befehl nicht ausführen kann kubectl apply
.
Meine kubeconfig
Datei -
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <cert>
name: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
contexts:
- context:
cluster: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
user: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
name: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
current-context: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
kind: Config
preferences: {}
users:
- name: arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
user:
exec:
apiVersion: client.authentication.k8s.io/v1alpha1
args:
- --region
- us-east-1
- eks
- get-token
- --cluster-name
- my-cluster
command: aws
Der Inhalt der Datei aws-auth-cm.yaml, nachdem ich die Änderungen vorgenommen habe, ist
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
# - rolearn: <ARN of instance role (not instance profile)>
# username: system:node:{{EC2PrivateDNSName}}
# groups:
# - system:bootstrappers
# - system:nodes
- rolearn: arn:aws:iam::375712918983:role/myAmazonEKSClusterRole
username: myAmazonEKSClusterRole
groups:
- system:masters
Können Sie dabei bitte helfen oder einige Hinweise geben?
Wenn Sie Fragen haben, lassen Sie es mich bitte wissen.
Antwort1
Sie möchten eines von drei Dingen:
- Nehmen Sie an , dass sich der ausgeführte Vorgang
arn:aws:iam::123456789012:role/myAmazonEKSClusterRole
in einer Terminalsitzung korrekt verhält.aws eks get-token
kubectl
- Erstellen Sie ein AWSCLI-Profil, das die
arn:aws:iam::123456789012:role/myAmazonEKSClusterRole
Rolle übernimmt, und aktualisieren Sie es,args:
um Folgendes einzuschließen:[..., "--profile", "whatever-you-call-that-profile",...]
- oder übernehmen Sie die Rolle in einem Terminal, führen Sie aus
aws eks get-token
und fügen Sie diese statischen Anmeldeinformationen in Ihre Kubeconfig ein, da Sie die Anmeldeinformationen anscheinend nicht sehr lange benötigen, nur um diese ConfigMap zu aktualisieren
Für den ersten, ich meine, aws sts assume-role --role-arn arn:aws:iam::123456789012:role/myAmazonEKSClusterRole ... | tee sts-creds.json
und dann export AWS_ACCESS_KEY_ID= AWS_SECRET_KEY= AWS_SESSION_TOKEN=
basierend auf dem Inhalt dieses JSON
Mit dem zweiten meine ich:
$ cat >> $HOME/.aws/config <<FOO
[profile my-cluster]
assume_role = arn:aws:iam::123456789012:role/myAmazonEKSClusterRole
source_profile = whatever
; or credential_source = whatever
FOO
entsprechenddiese Dokumentation