Kubernetes Dashboard Amazon

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.


            Panel de Kubernetes
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

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

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

                        Token de autenticación de Kubernetes
Esta es la pantalla que saldría una vez hagamos los métodos abajo comentado.

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.

Recargamos nuestra configuración SSH del servidor que está conectado a AWS+Kubectl.
Connection > SSH > Tunnels
Aquí os pongo un ejemplo, en mi caso lo que indica es que en nuestra máquina Windows escuchará por el puerto 8001 y en la máquina destino corresponderá a su 8001.

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.


                        Token de autenticación de Kubernetes
Esta es la pantalla que saldría una vez hagamos los métodos abajo comentado.

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.


Deja un comentario

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