Skip to content

IT Builders 2025

Info

Esta guía corresponde al desafío final del taller impartido por Netuy en IT Builders 2025.

Puedes acceder a la presentación del taller desde este enlace.

Desafío del Workshop

Desde tu proyecto en la nube pública de Netuy, desplegá empleando exclusivamente las herramientas de la interface gráfica:

  • 3 nodos de aplicación aislados de Internet que al recibir peticiones HTTP respondan con su hostname.
  • 1 balanceador de carga conectado a Internet que al recibir peticiones HTTP en la ruta http://IP-PUBLICA/nodos/, redirija la petición aleatoriamente a alguno de los 3 nodos de aplicación y luego redirija la respuesta de estos a su destinatario.

El caso de uso del desafío se representa en el siguiente diagrama:

Desafío


Algunos tips

Arquitectura

La arquitectura de la solución se parecerá a la siguiente:

Arquitectura del desafío


Prepara las redes antes de lanzar las instancias

Ten presente que para completar el desafío:

  1. Deberás conocer de antemano las direcciones IP internas que se asignarán a tus nodos de aplicación.
  2. Todas tus instancias deberán contar con conexión a Internet para instalar los paquetes que necesites.
  3. Necesitarás habilitar el tráfico HTTP entrante en todos tus servidores (recuerda que la security group predeterminada solo habilita el tráfico saliente).
Pista para punto #1

Una posible estrategia para satisfacer el punto Nro. 1 es:

  • crear tu red interna con pool de asignación con exactamente 3 direcciones IP y resolvedores DNS externos. Por ejemplo utilizando esta configuración:

    Configuración de red
    Paso 1 de 3: Creación de la red interna

    Configuración de subred
    Paso 2 de 3: Creación de la red interna: configuración de la subred

    Configuración pools de asignación y DNS
    Paso 3 de 3: Creación de la red interna: configuración de pools de asignación y servidores DNS

    • crear un puerto de red para utilizar en el balanceador de carga, especificando cualquier dirección IP de tu segmento que no se solape con las del pool de asignación. Siguiendo el ejemplo, puede ser la dirección 172.16.0.10

    Configuración de red
    Creación del puerto de red

Pista para punto #2

Para satisfacer el punto Nro. 2, bastará con crear un router y conectarlo a la red interna que acabas de crear y configurar.

Pista para punto #3

Una opción rápida para resolver este aspecto, es sumar reglas a la security group predeterminada para habilitar el tráfico HTTP entrante desde todos los orígenes:

Habilitar entrada HTTP IPv4
Crear regla para habilitar la entrada HTTP desde todos los orígenes IPv4

Selección de sistema operativo y recursos

Ubuntu Server es un sistema operativo estable, seguro, apto para uso en producción e incluye gran cantidad de utilizarios en sus respositorios estándar.

Puedes lanzar tus instancias desde la imagen ubuntu-noble-24.04, la edición LTS más reciente. Además, requiere tan pocos recursos que el flavor 1x1 será suficiente.

Customization Scripts (cloud-config)

Debes valerte solo de la interface gráfica para el desafío, por lo que necesitarás utilizar customization scripts para la instalación y configuración interna de los servidores.

Tal vez, si utilizaste Ubuntu para lanzar tus instancias, esos scripts sean los mismos que los que se nos cayeron aquí 😏

Al lanzar el balanceador de carga

#cloud-config

users:
  - default
  - name: itbuilders
    shell: /bin/bash
    sudo: ALL=(ALL) NOPASSWD:ALL
    lock_passwd: false
    passwd: $6$rounds=4096$YtDdPaZ.PaFqXJR3$VDZiNtVysWcd.NW.5SCOvX83n9R3kr5ISPHDG0PdWUCV0Z1eW8CFHbeQzyW7tAyVF.zvW9vEfmvuhDVZB90Ph1
    # password hash de "itbuilders"

package_update: true
packages:
  - nginx

runcmd:
- mkdir /app
- cp /etc/hostname /app/index.html

write_files:
  - path: /etc/nginx/sites-enabled/default
    permissions: '0644'
    owner: root
    content: |
        upstream pool_nodos {
            # ip_hash;  # Descomentar para ser dirigido siempre al mismo nodo
            server 172.16.0.11 max_fails=1 fail_timeout=15s;
            server 172.16.0.12 max_fails=1 fail_timeout=15s;
            server 172.16.0.13 max_fails=1 fail_timeout=15s;
        }

        server {
            listen 80;
            # Contenido servido desde el propio loadbalancer:
            location / {
                root /app;
            }
            # Contenido servido dinámicamente desde los nodos de aplicación:
            location /nodos/ {
                proxy_pass http://pool_nodos/;
            }
        }

Al lanzar los nodos de aplicación

#cloud-config

users:
  - default
  - name: itbuilders
    shell: /bin/bash
    sudo: ALL=(ALL) NOPASSWD:ALL
    lock_passwd: false
    passwd: $6$rounds=4096$YtDdPaZ.PaFqXJR3$VDZiNtVysWcd.NW.5SCOvX83n9R3kr5ISPHDG0PdWUCV0Z1eW8CFHbeQzyW7tAyVF.zvW9vEfmvuhDVZB90Ph1
    # password hash de "itbuilders"

package_update: true
packages:
  - nginx

runcmd:
- mkdir /app
- cp /etc/hostname /app/index.html

write_files:
  - path: /etc/nginx/sites-enabled/default
    permissions: '0644'
    owner: root
    content: |
        server {
            listen 80;
            location / {
                root /app;
            }
        }

¿Te sobró tiempo?

Desafío adicional para los velocistas:

  1. accedé a tu segundo nodo de aplicación vía SSH
  2. cambiá la respuesta de su web por tu nombre
  3. dejalo accesible desde Internet empleando una IP flotante