Taller Kubernetes: Trabajando con Services
Ejercicio 1: Despliegue y acceso de la aplicación GuestBook
Una vez que tenemos creado el despliegue de la aplicación GuestBook, que realizamos en el anterior taller, vamos a crear los Services correspondientes para acceder a ella:
Service para acceder a la aplicación:
Vamos a crear un Service que nos va a permitir acceder a la aplicación GuestBook desde el exterior, para ello crea un fichero yaml con la definición del Service a partir de la siguiente plantilla:
apiVersion: v1
kind: Service
metadata:
name: guestbook
labels:
app: guestbook
tier: frontend
spec:
type:
ports:
- port:
targetPort:
selector:
app: guestbook
tier: frontend
- Lanzamos el servicio con el comando
kubectl create -f guestbook-service.yamly comprobamos que se ha creado correctamente con el comandokubectl get all.
- Accedemos a la ip del nodo master y al puerto asignado desde un navegador web para ver la aplicación.
Pero claro, no funciona, ¿por qué? Porque la aplicación guestbook necesita conectarse a la base de datos redis, y no la encuentra. Para ello vamos a crear el Service para acceder a la base de datos. De esta forma, conectaremos el frontend con el backend, donde este último será de tipo ClusterIP.
Service para acceder a la base de datos:
A continuación vamos a crear el Service para acceder a la base de datos. Vamos a crear el fichero yaml. Tenemos que poner el tipo del Service, el puerto del servicio será el 6379 y el nombre del puerto de la base de datos que hemos asignado en el Deployment es redis-server. Nota: No cambies el nombre del Service, ya que la aplicación guestbook va a acceder por defecto a la base de datos usando el nombre redis.
Para ello, realizaremos lo siguientes pasos:
- Elaboramos el fichero yaml con la definición del Service, y lo creamos.
apiVersion: v1
kind: Service
metadata:
name: redis
labels:
app: redis
tier: backend
spec:
type: ClusterIP
ports:
- port: 6379
targetPort: redis-server
selector:
app: redis
tier: backend
Y lo creamos.
kubectl create -f redis-service.yaml
- Listamos los servicios para comprobar que se ha creado correctamente.
kubectl get all
- Accederemos a la ip del nodo master y al puerto asignado desde un navegador web para ver la aplicación.
¡EY! ¡Ya funciona! Pero claro, no es muy cómodo acceder a la aplicación usando la ip del nodo master y el puerto asignado. Para ello vamos a crear un Ingress que nos permita acceder a la aplicación usando un nombre del tipo www.mariajesus.org.
Acceso a la aplicación usando Ingress
Vamos a crear el fichero yaml de definición del recurso Ingress para acceder a la aplicación. Indicaremos un host del tipo www.mariajesus.org, también el nombre del Service que creamos para acceder a la aplicación guestbook y tendremos que tener en cuenta que el puerto de dicho servicio era el 80. Para ello realizaremos los siguientes pasos:
- Activamos el addon ingress en minikube para instalar el Ingress Controller y creamos el recurso Ingress.
minikube addons enable ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: guestbook
spec:
rules:
- host: www.mariajesus.org
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: guestbook
port:
number: 80
- Creamos la definición del recurso Ingress con los datos sugeridos, y creamos el recurso Ingress.
kubectl create -f guestbook-ingress.yaml
Y comprobamos que se ha creado correctamente.
kubectl get all
- Modificaremos el fichero /etc/hosts de nuestro ordenador para configurar la resolución estática.
sudo nano /etc/hosts
Añadimos la siguiente línea al fichero:
192.168.15.42 www.mariajesus.org
- Accederemos a la aplicación usando el nombre que has asignado.
Para eliminarlo todo, ejecutamos el siguiente comando:
Ejercicio 2: Despliegue y acceso de la Aplicación Lets-Chat
¿Qué es Lets-Chat?
Lets-Chat es una aplicación de mensajería instantánea basada en Node.js y MongoDB. Es una aplicación de código abierto que se puede desplegar en cualquier entorno de forma sencilla. En este ejercicio vamos a desplegar Lets-Chat en Kubernetes.
Para realizar el despliegue y el acceso de la aplicación, deberemos tener en cuenta los siguientes aspectos:
-
La imagen docker que vamos a usar para el despliegue de Let’s Chat es sdelements/lets-chat y para desplegar mongoDB utilizaremos la imagen mongo. Nota: utiliza imagen mongo:4, Let’s Chat es una aplicación antigua y no funciona con las últimas versiones de mongo.
-
Al crear el despliegue de Let’s Chat podemos poner varias replicas, pero el despliegue de la base de datos, sólo creará una replica.
-
El puerto en el que responde la aplicación es el 8080. La base de datos utiliza el puerto 27017.
-
Vamos acceder desde el exterior a la aplicación. Sin embargo, no es necesario acceder desde el exterior a la base de datos.
-
El nombre del Service para acceder a la base de datos debe ser mongo ya que por defecto la aplicación va a conectar a la base de datos usando ese nombre.
-
Queremos acceder a la aplicación usando un nombre del tipo www.chat-mariajesus.org.
Tras tener todo esto en cuenta, vamos a utilizar como modelos los ficheros yaml de la actividad anterior, crea los ficheros necesarios para crear los recursos en tu cluster de Kubernetes para desplegar esta aplicación.
- Creamos los ficheros encargados del despliegue de la aplicación Lets-Chat y de la base de datos.
- Fichero del despliegue de la aplicación Lets-Chat.
apiVersion: apps/v1
kind: Deployment
metadata:
name: letschat
labels:
name: letschat
spec:
replicas: 1
selector:
matchLabels:
name: letschat
template:
metadata:
labels:
name: letschat
spec:
containers:
- name: letschat
image: sdelements/lets-chat
ports:
- name: http-server
containerPort: 8080
- Fichero del despliegue de la base de datos.
apiVersion: apps/v1
kind: Deployment
metadata:
name: letschat
labels:
name: letschat
spec:
replicas: 1
selector:
matchLabels:
name: letschat
template:
metadata:
labels:
name: letschat
spec:
containers:
- name: letschat
image: sdelements/lets-chat
ports:
- name: http-server
containerPort: 8080
- Levantamos los despliegues.
kubectl create -f letschat-deployment.yaml
kubectl create -f mongo-deployment.yaml
- Comprobamos que se han creado correctamente.
kubectl get all
- Creamos los ficheros de servicios de Let’s Chat y de la base de datos.
- Fichero del servicio de la base de datos.
apiVersion: v1
kind: Service
metadata:
name: mongo
spec:
ports:
- name: mongo
port: 27017
targetPort: mongo
selector:
name: mongo
- Fichero del servicio de LetsChat.
apiVersion: v1
kind: Service
metadata:
name: letschat
spec:
type: NodePort
ports:
- name: http
port: 8080
targetPort: http-server
selector:
name: letschat
- Levantamos los servicios.
kubectl create -f mongo-service.yaml
kubectl create -f letschat-service.yaml
- Comprobamos que se han creado correctamente.
kubectl get all
Nuestra aplicación LetsChat está desplegada en el cluster de Kubernetes, pero no podemos acceder a ella desde el exterior.
Para poder acceder a ella desde el exterior, vamos a crear un Ingress.
- Creamos el fichero de Ingress para LetsChat.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-letschat
spec:
rules:
- host: www.chat-mariajesus.org
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: letschat
port:
number: 8080
- Levantamos el Ingress.
kubectl create -f letschat-ingress.yaml
- Comprobamos que se ha creado correctamente.
kubectl get all
- Agregamos la siguiente línea al fichero /etc/hosts.
192.168.100.185 www.chat-mariajesus.org
- Comprobamos que podemos acceder a la aplicación LetsChat desde el exterior.