Estoy seguro de que os habéis quedado con ganas de más después del artículo tan largo que había escrito sobre «Como montar EKS y no morir en el intento». Esto es necesario previamente ya que es sobre ello que vamos a trabajar para poner el panel.
He de reconocer que al principio me costó saber el concepto de como funciona, pero a vosotros os lo dejaré mascado para que no sufráis como yo.
Requisitos:
- Tener el EKS montado.
- La consola SSH donde montamos todo.
- Paciencia 🙂
Nos vamos a centrar en seguir el procedimiento oficial de Amazon Kubernetes Dashboard.
También podéis echar un vistazo a su web oficial: Web Oficial Kubernetes Dashboard.

Todos los comandos que vamos a ejecutar a continuación se tienen que realizar donde hemos configurado e instalado el aws+kubectl.
INSTALANDO KUBERNETES DASHBOARD
Antes de continuar con la configuración hemos realizado una actualización de lo instalado. Así que recomendamos que revises antes la actualización antes de proceder.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
Salida del comando:
secret "kubernetes-dashboard-certs" created serviceaccount "kubernetes-dashboard" created role "kubernetes-dashboard-minimal" created rolebinding "kubernetes-dashboard-minimal" created deployment "kubernetes-dashboard" created service "kubernetes-dashboard" created
Instalando Heapster
Monitotiza y analiza el trabajo de los contenedores en el clúster.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/heapster.yaml
Salida del comando:
serviceaccount "heapster" created
deployment "heapster" created
service "heapster" created
** Dicen que está discontinuado, pero es el único compatible con kubernetes.
Instalando InfluxDB
Esta base de datos sirve para registrar los logs de Heapster.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/influxdb.yaml
Salida del comando:
deployment "monitoring-influxdb" created service "monitoring-influxdb" created
Enlazando el rol Heapster con Kubernetes
Con esto conseguimos que tenga permisos para acceder al Kubernetes Dashboard.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/rbac/heapster-rbac.yaml
Salida del comando:
clusterrolebinding "heapster" created
UPDATE – 19/11/2019
Parece ser que han cambiado las versiones desde la última vez que lo monté así que vamos añadir los pasos seguidos en esta ocasión.
Esta vez cuento con las siguientes versiones:
- Kubernetes 1.14 (Nuestro EKS).
- Instalaremos Metrics V0.3.4
- Kubernetes Dashboard 2.0.0-Beta4
Vale pues una vez definidos este parámetro para instalar el Dashboard necesitamos los dos últimos puntos:
Instalando Metrics V0.3.4
Para ver o disponer de la última versión de Metrics podemos acudir a su web oficial (https://github.com/kubernetes-incubator/metrics-server/releases/latest).
# Descargamos la versión curl -o v0.3.4.tar.gz https://github.com/kubernetes-incubator/metrics-server/archive/v0.3.4.tar.gz # Descomprimimos en nuestro directorio actual tar -xzf v0.3.4.tar.gz # Aplicamos las configuraciones kubectl apply -f metrics-server-0.3.4/deploy/1.8+/
Revisamos que todo ha ido de manera correcta:
kubectl get deployment metrics-server -n kube-system
Instalando Kubernetes Dashboard 2.0.0-Beta4
Con este comando instalamos el servicio:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
Salida del comando:
namespace/kubernetes-dashboard created serviceaccount/kubernetes-dashboard created service/kubernetes-dashboard created secret/kubernetes-dashboard-certs created secret/kubernetes-dashboard-csrf created secret/kubernetes-dashboard-key-holder created configmap/kubernetes-dashboard-settings created role.rbac.authorization.k8s.io/kubernetes-dashboard created clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created deployment.apps/kubernetes-dashboard created service/dashboard-metrics-scraper created deployment.apps/dashboard-metrics-scraper created
CREANDO CUENTA EKS-ADMIN
Para empezar creamos el fichero «eks-admin-service-account.yml» y metemos el siguiente contenido:
apiVersion: v1 kind: ServiceAccount metadata: name: eks-admin namespace: kube-system apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: eks-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: kind: ServiceAccount name: eks-admin namespace: kube-system
Aplicamos la configuración:
kubectl apply -f eks-admin-service-account.yaml
Salida del comando:
serviceaccount "eks-admin" created
clusterrolebinding.rbac.authorization.k8s.io "eks-admin" created
CONECTANDO A KUBERNETES DASHBOARD
Lo primero que haremos será obtener un TOKEN de autenticación para poder acceder a nuestro Kubernetes DashBoard:
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep eks-admin | awk '{print $1}')
Guardaremos el contenido de «authentication_token» ya que es lo que nos va a la hora de acceder.
Iniciando el Proxy de Kubectl
Lo que hace el siguiente comando es arrancar la interfaz de Kubernetes Dashboard por localhost:8001
kubectl proxy &
Para poder acceder al Kubernetes Dashboard, por alguna razón solo se puede acceder desde la propia máquina que se hace un kubectl proxy. Es decir que tiene que ser como si estuviéramos dentro.
He probado numerosos comandos y siempre he tenido algún tipo de problema. Lo discutiremos en la parte de posibles problemas.
Para acceder a Kubernetes Dashboard es la siguiente URL pero como comprenderéis aún no os funcionará ya que nuestro servidor está en otro lado y no es nuestro localhost.
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

Para que funcione os propondremos varios métodos:
1. CREANDO TÚNEL SSH
Tanto para Linux como para Windows es necesario que ambas estén activas cada vez que queremos conectar, más que nada porque sino no podremos acceder a nuestro Kubernetes Dashboard.
Linux Users
Para usuarios de Linux es mucho más fácil que los de Windows, así que es tan simple como un solo comando:
ssh -i EC2KeyPair.pem usuarioec2@IP -L 8001:127.0.0.1:8001
En este ejemplo nos conectaremos a nuestra instancia ECS con nuestra clave privada, nuestro usuario y escuchará en nuestro Linux por el puerto 8001.
Todas las peticiones que lleguen al puerto 8001 será redirigidas al destino al puerto 8001.
Windows Users
Generalmente se usa un cliente SSH del tipo Putty/Kitty SSH el cual tienen la interfaz casi iguales. Por lo tanto la configuración irá sobre ellos.
Connection > SSH > Tunnels

Guardamos la configuración y ya podemos conectarnos por SSH.
Resumen: Lo que hemos hecho es lo que se llama Tunnel Interface, es decir que nosotros nos conectamos por el navegador al puerto localhost:8001 y este accede directamente al puerto 8001 de la máquina.
Ahora ya podemos acceder a nuestra URL desde nuestro propia máquina:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
2. NGINX PROXY INVERSO (PREFERIDA)
Es la opción que hemos elegido para hacer este caso ya que de esta manera podremos acceder a través de un dominio, por https y además configurar otros puntos de seguridad (Ej: filtrar por IP).
La instalación del NGINX lo haremos sobre el servidor SSH que está conectado contra el aws + kubectl.
apt install nginx
Ejemplo de configuración en NGINX:
server { listen 80; server_name xxx.miejemplo.com; return 301 https://xxx.miejemplo.com; } server { listen 443 ssl; server_name xxx.miejemplo; ssl_certificate /etc/certificados/certificado-formato.pem; ssl_certificate_key /etc/certificados/lallave.key; # Solo las IP zzz... e yyy... tienen permiso para acceder. location / { allow yyy.yyy.yyy.yyy/32; allow zzz.zzz.zzz.zzz/32; deny all; proxy_pass http://127.0.0.1:8001; proxy_http_version 1.1; }
Reiniciamos nuestro NGINX y probamos la siguiente URL:
https://xxx.miejemplo.com/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
OBTENER EL TOKEN
Una vez realizado el paso anterior ahora vamos a obtener el TOKEN para poder acceder a nuestro Dashboard.
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep eks-admin | awk '{print $1}')
Salida del comando:
Name: eks-admin-token-b5zv4 Namespace: kube-system Labels: Annotations: kubernetes.io/service-account.name=eks-admin kubernetes.io/service-account.uid=bcfe66ac-39be-11e8-97e8-026dce96b6e8 Type: kubernetes.io/service-account-token Data ca.crt: 1025 bytes namespace: 11 bytes token: <COPIAD EL TOKEN DE AQUÍ>
Esta TOKEN será necesario para poder acceder a nuestro Kubernetes Dashboard.

DENTRO DE KUBERNETES DASHBOARD
Aquí os dejo la pantalla nada más acceder, el resto os lo dejo a vosotros para su investigación.

BORRANDO KUBERNETES DASHBOARD
Por alguna razón cuando me estuve peleando estuve buscando la manera de borrarlo todo y volver a empezar. Así que para aquellas personas que quieran borrarlo y probar desde cero estos son los comandos.
kubectl delete deployment kubernetes-dashboard --namespace=kube-system kubectl delete service kubernetes-dashboard --namespace=kube-system kubectl delete role kubernetes-dashboard-minimal --namespace=kube-system kubectl delete rolebinding kubernetes-dashboard-minimal --namespace=kube-system kubectl delete sa kubernetes-dashboard --namespace=kube-system kubectl delete secret kubernetes-dashboard-certs --namespace=kube-system kubectl delete secret kubernetes-dashboard-key-holder --namespace=kube-system
Crearé en otro post una guía de comandos útiles con kubectl para tenerlo a mano a la hora de gestionar nuestro cluster.