
Estoy intentando aprender AWS EKS y seguirIntroducción a Amazon EKS: Consola de administración de AWS y CLI de AWSguía paso a paso excepto para la región que he cambiado a us-east-1.
Puedo crear mi clúster, my-cluster
pero cuando intento configurar mi computadora, que es una instancia EC2 (T2.Micro) para comunicarme con el clúster, aparece error: You must be logged in to the server (Unauthorized)
un error. Al profundizar, descubrí que el rol de EC2 (ARN - arn:aws:iam::123456789012:role/ec2-admin) necesita asumir el rol que creó el clúster (ARN - arn:aws:iam::123456789012:role /myAmazonEKSClusterRole). También hice estas modificaciones en la definición de rol modificando la relación de confianza para myAmazonEKSClusterRole
obtener. arn:aws:sts::123456789012:assumed-role/myAmazonEKSClusterRole/test-session
Después de esto, puedo ejecutar aws eks
comandos, pero kubectl
los comandos aún se me escapan.
Para ejecutar kubectl
comandos, estoy tratando de seguir los pasos enAdministrar usuarios o roles de IAM para su clúster. Sin embargo, me piden que haga cambios en aws-auth-cm.yaml
el archivo configMap, lo cual no puedo hacer porque no puedo ejecutar kubectl apply
el comando.
Mi kubeconfig
archivo -
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
El contenido del archivo aws-auth-cm.yaml después de realizar los cambios es
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
¿Puedes ayudar con esto o dar algunos consejos?
Por favor hazme saber si tienes preguntas.
Respuesta1
Querrás una de 3 cosas; cualquiera:
- supongamos que
arn:aws:iam::123456789012:role/myAmazonEKSClusterRole
en una sesión de terminal laaws eks get-token
ejecuciónkubectl
se comportará correctamente - cree un perfil awscli que asuma el
arn:aws:iam::123456789012:role/myAmazonEKSClusterRole
rol y actualice elargs:
para incluirlo[..., "--profile", "whatever-you-call-that-profile",...]
- o asuma el rol en una terminal, ejecute
aws eks get-token
y coloque esa credencial estática en su kubeconfig ya que no parece que necesite la credencial por mucho tiempo solo para actualizar ese ConfigMap.
Para el primero, me refiero a aws sts assume-role --role-arn arn:aws:iam::123456789012:role/myAmazonEKSClusterRole ... | tee sts-creds.json
y luego export AWS_ACCESS_KEY_ID= AWS_SECRET_KEY= AWS_SESSION_TOKEN=
basado en el contenido de ese json
Para el segundo me refiero a:
$ cat >> $HOME/.aws/config <<FOO
[profile my-cluster]
assume_role = arn:aws:iam::123456789012:role/myAmazonEKSClusterRole
source_profile = whatever
; or credential_source = whatever
FOO
de acuerdo aesta documentación