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.yaml y comprobamos que se ha creado correctamente con el comando kubectl 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:

  1. 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
  1. Listamos los servicios para comprobar que se ha creado correctamente.
kubectl get all

  1. 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:

  1. 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
  1. 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

  1. 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

  1. 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.

  1. 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
  1. 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.

  1. 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.