Desplegar Kubernetes Dashboard en AWS EKS con Helm

¿Qué es Kubernetes Dashboard?

Es una interfaz de usuario de propósito general para clústers de Kubernetes. Está basada en web y permite a los usuarios gestionar y solucionar problemas en sus aplicaciones y también en el propio clúster.

Podéis encontrar más información en:

Instalando con Helm

Requisitos

  • Helm
    • Yo utilizo Helm 2 así que necesito el cliente en mi máquina local y Tiller en el clúster.
    • Helm 3 no utiliza Tiller.
  • Un controlador de entrada (Ingress controller) y cert-manager si quieres usar un Ingress y SSL.
  • AWS CLI para obtener el token que utilizaremos para loguearnos.
  • jq. Opcional, paara filtrar el token de la respuesta del AWS CLI.

Añadir el repo de Helm

# Add kubernetes-dashboard repository
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
# Update repo
helm repo update

Añadir un namespace para el dashboard

Esto es totalmente opcional. Yo simplemente creé un namespace para desplegar el dashboard en el mismo.

Crea un fichero dashboard-namespace.yaml

---
apiVersion: v1
kind: Namespace
metadata:
  name: dashboard
  labels:
    name: dashboard  

Y ahora crea el namespace ejecutando:

kubectl create -f dashboard-namespace.yaml

Activar el ingress (y otras opciones de configuración)

La configuración por defecto es más que suficiente para casi todo el mundo. En nuestro caso, quería activar el Ingress para proporcionar un accesso fácil al dashboard. Esto, y todas las otras opciones configurables se pueden cambiar utilizando un values file.

Vamos a crear values.myCluster.yaml:

---
ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx #This might be different depending on your ingress controller
    kubernetes.io/tls-acme: "true" #This might be different depending on your cert-manager configuration
  hosts:
    - k8s-dashboard.example.com
  tls:
    - secretName: k8s-dashboard.example.com
      hosts:
        - k8s-dashboard.example.com

Instalando el Dashboard

Ya estamos listos para lanzar Kubernetes Dashboard en nuestro clúster. Ejecuta:

#Name, namespace... cambiarán dependiendo de los nombres que les hayas dado
helm install --name k8s-dashboard --namespace dashboard kubernetes-dashboard/kubernetes-dashboard -f values.myCluster.yaml

Actualizar Route53

Ya que este es un post acerca de EKS voy a asumir que utilizas Route53.

  • Ejecuta kubectl get ingress en el namespace donde lanzaste el dashboard.
  • Deberías ver el Ingress que hemos creado, copia el valor de ADDRESS.
  • Crea un nuevo A Record como alias a ese valor.

También puedes tener External DNS en tu clúster y estos cambios se harán automáticamente. Escribiré un post sobre eso a no mucho tardar.

Una vez que los cambios al DNS se propaguen podrás acceder al Kubernetes Dashboard en esa URL.

Loguearse en Kubernetes Dashboard

Si todo fue como estaba previsto, verás algo parecido a esta pantalla pidiendote que hagas login.

Kubernetes Dashboard Login Page

Hay muchas formas distintas de restringir el acceso y también muchas de loguearse. En este ejemplo utilizaremos un Bearer Token.

Si has leído mi post anterior sobre Conectar kubectl a un clúster AWS EKS quizás recuerdes lo que comenté acerca de usuarios y roles IAM, configurar un perfil de AWS para acceder al clúster, la kubeconfig, etc.

En este ejemplo asumiremos que el perfil en el que están las credenciales que tienen permisos para interactuar con el clúster es my-eks-profile.

Obtendremos el código a través del AWS CLI. Para ejecutar el comando necesitas la siguiente información:

  • El nombre de to clúster EKS (lo puedes encontrar en tu kubeconfig) o en AWS si tienes permisos para listar clústeres. Por ejemplo my-eks-cluster.
  • Tu perfil, my-eks-profile.

Run the following command:

aws eks get-token --profile my-eks-profile --cluster-name my-eks-cluster

Y obtendrás un documento JSON.

{
  "kind": "ExecCredential",
  "apiVersion": "client.authentication.k8s.io/v1alpha1",
  "spec": {},
  "status": {
    "expirationTimestamp": "2020-10-16T07:39:02Z",
    "token": "k8s-aws-v1.superSecretToken"
  }
}

Copia el token y pégalo en la página para loguearte.

Puedes mandar la salida del CLI a jq para obtener el token directamente.

aws eks get-token --profile my-eks-profile --cluster-name my-eks-cluster | jq -r '.status.token'

¡Y ya está! Sólo una cosa más. Lo que puedes y no puedes hacer una vez estés dentro está controlado por los permisos RBAC que tenga tu usuario/rol. Si eres administrador (o similar) podrás controlar el clúster desde el Dashboard.

Esto ha sido una simple introducción al Kubernetes Dashboard en EKS. Hay muchas cosas que puedes hacer y cambiar que no he incluído en este post. Autenticación y permisos es lo primero que me viene a la cabeza. Puedes crear una service account con los permisos que te pareza y utilizar el secreto que genera en vez del token de AWS CLI, o quizás prefieras usar basic authentication…


Como siempre, ¡muchas gracias por visitar mi blog! Espero que esto te haya sido de utilidad. Por favor, dímelo abajo en los comentarios, y si tienes alguna pregunta no dudes en hacerla.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *