El otro día publiqué un post acerca de cómo gestionar usuarios en un clúster EKS utilizando usuarios y roles IAM. Hoy es el turno de explicar cómo esos usuarios se pueden conectar al clúster.
Estas instrucciones las hemos probado en Ubuntu 18.04, 20.04 y MacOS.
Tabla de contenidos
Requerimientos
- Interfaz de línea de comandos de AWS (AWS CLI). Hay instrucciones de como instalarla aquí.
- kubectl. Todos los pasos explicados aquí .
Debes usar una versión de kubectl que esté a menos de una versión menor de diferencia con tu clúster. Por ejemplo, un cliente v1.2 debería funcionar con un máster v1.1, v1.2, y v1.3.
Documentación de kubectl
Configurando AWS CLI
AWS CLI guarda las credencials en un fichero local llamado credentials
, en un directorio llamado .aws
en tu directorio home . En ese fichero puede haber diferentes perfiles y el nombre del perfil es algo que debemos de recordar ya que lo usaremos más tarde.
La forma en la que organices los perfiles depende totalmente de ti y tus necesidades. Simplemente recuerda, el primer perfil default
es el que se utiliza cuando no se le pasa ningun perfil a la hora de ejecutar comandso en el CLI.
Usuarios IAM
Si estás utilizando usuarios IAM con EKS lo único que necesitas añadir es el usuario que tiene permisos en el cluster.
Necesitarás recordar el nombre del perfil donde sus credencials están guardadas ya que lo usarás más tarde.
Roles IAM
Si estás usando roles IAM necesitas añadir el usuario IAM que está autorizado a adoptar el rol así como el rol autorizado en EKS
Necesitarás recordar el nombre del perfil donde el rol está definido ya que lo usarás más tarde.
[default] aws_access_key_id=AKIAIOSFODNN7EXAMPLE aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[default] aws_access_key_id=AKIAIOSFODNN7EXAMPLE aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY [daveops-eks] role_arn = arn:aws:iam:1234567890:role/EKSRoleName source_profile = default #This needs to match the profile where the details of the user are saved.
Puedes comprobar que tus datos son correctos ejecutando lo siguiente:
#Esto devuelve información sobre tu propio usuario aws sts get-caller-identity { "UserId": "XXXXXXXXXXXXXXXX", "Account": "1234567890", "Arn": "arn:aws:iam::1234567890:user/daveops" }
#Esto devuelve información sobre tu propio usuario aws sts get-caller-identity { "UserId": "XXXXXXXXXXXXXXXX", "Account": "1234567890", "Arn": "arn:aws:iam::1234567890:user/daveops" } #Si los permisos son correctos y el usuario puede adoptar el rol, la respuesta debería ser similar a los que ves debajo aws sts get-caller-identity --profile daveops-eks { "UserId": "AROA22HCPPIFCOKNYURUS:botocore-session-1225235571", "Account": "accountNumber", "Arn": "arn:aws:sts::accountNumber:assumed-role/daveops-eks/botocore-session-1225235571" }
Ya hemos configurado el cliente de AWS y comprobado que tiene los permisos correctos. Pasemos a kubectl
.
kubeconfig
La configuración de kubectl
se almacena en este fichero: .kube/config
. Es un documento en YAML que sigue la siguiente forma cuando se utiliza con un clúster EKS.
apiVersion: v1 clusters: - cluster: certificate-authority-data: some data here server: https://some-string.some-other-string.region.eks.amazon.com name: arn:arnOfTheCluster contexts: - context: cluster: arnOfTheCluster namespace: namespaceName user: arnOfTheCluster current-context: arn:arnOfTheActiveCluster kind: Config preferences: {} users: - name: arnOfTheCluster user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 args: - --region - regionId - eks - get-token - --cluster-name - clusterName command: aws env: - name: AWS_PROFILE value: profileName #Esto es importante!!
¿Qué debemos saber sobre esto?
- Puedes configurar más de un clúster. Por cada uno tendrás que añadir un
cluster
,contex
yuser
. - Esta configuración se genera y añade al fichero automáticamente por el AWS CLI. Si tú no creaste el clúster alguien te dará los datos que necesitas.
- AWS_PROFILE es importante. ¿Recuerdas cuando dije que necesitabas recordar el nombre del perfil de AWS? Ahora es el momento de usarlo.
- Si vas a utilizar un usuario IAM usa el nombre del perfil donde están guardados los detalles de tu usuario. En mi ejemplo esto era
default
. - Si vas a utilizar rol IAM, usa el nombre del perfil donde están los detalles del rol que vas a adoptar. En mi ejemplo esto era
daveops-eks
.
- Si vas a utilizar un usuario IAM usa el nombre del perfil donde están guardados los detalles de tu usuario. En mi ejemplo esto era
Para comprobar que podemos acceder correctamente al clúster vamos a ejecutar algo con kubectl
. Por ejemplo, el siguiente comando devuelve una lista de pods.
kubectl get pods NAME READY STATUS RESTARTS AGE my-service-fdcd8c95d-2862m 1/1 Running 0 6d1h my-service-fdcd8c95d-8hlc2 1/1 Running 0 6d1h my-service-fdcd8c95d-cg67k 1/1 Running 0 6d1h my-service-fdcd8c95d-fgh94 1/1 Running 0 6d1h my-service-fdcd8c95d-p5dqd 1/1 Running 0 6d1h my-service-fdcd8c95d-sfvzh 1/1 Running 0 6d1h my-service-fdcd8c95d-sr7pc 1/1 Running 0 6d1h my-service-fdcd8c95d-swghv 1/1 Running 0 6d1h my-service-fdcd8c95d-t4ztb 1/1 Running 0 6d1h ...
¡Gracias por visitar mi blog! Por favor, déjame un comentario y dime qué te parece. ¿Te ha servido de ayuda? ¿Hay alguna otra información que te gustaría estuviese aquí?