QUÉ | CHEM |
Tenemos una tortuga llamada ansible, obvio que es una pequeña robot. Es un programa para para mantener una infraestructura como código.
Esto es,... Por ahora, solo diremos que es un comando en la terminal. Que mantiene un anillo de servicios interoperando. Pero es un solo comando. One ring to rule'm all. Con 'ansible-playbook y un par de parámetros, se ejecutan todos los demás comandos necesarios para crear un nodo en la VProxyN llamada Abyaya.la
En realidad, a medida que se adentren en el juego, verán que hay un par de recetas más. Recetas, playbooks, script. Son todas infusiones que hacen bailar tods lxs enanites.
Hay una en especial que define esta visión de realidades virtuales con URLs que es abyayala.yml
Abyayala.yml
Es un archivo YAML (Yet Another Markup Lang., como una especie de XML)
Esta cosa define declarativamente la infraestructura del Proxy Nginx conectado con un VPN (Red Autónoma Pirata)
La RAP tiene capacidad de DHCP en una red.comun para circumnavegar redes privativas que puedan tener NAT, no permitir Port Forwarding, aplicar Firewalls y todas esas chingaderas nasty
EL proxy tiene capacidad DE SSL/TLS con Let's Encrypt de la E.F.F. El certbot tiene capacidad wildcard *.subm.abyaya.la validando por registros DNS.
En consecuencia, el resultado de esto debiera ser (sic)administrar una red de servidoras en una VPN comun, por ende la maquina nebe poder resolver su nombre por ej. su.comun y a otrx.comun como IPv4 en el rango 10.13.12.1/24 y pingearse, o al menos a abyayala.comun que es el server ?)
Además, debe existir el subdominio DNS **node.**abyaya.la en el cual cada node puede publicar sus servicios en internet. Estos son accesibles a través de SSL/DNS en un sub-sub-domain. Por ej. https://sitio.node.abyaya.la y convivir como vástagxs con una nube en https://nube.node.abyaya.la
Los servidores DNS los provee Sutty, infraestructura autonoma de Argentina quienes ademas cuentan con redundancia y mas.
P.S:
¿Sería dificil, mas no imposible, la realización de trabajos semejantes en la selva Amazónica?)
CÓMO SE USA | HOWTO |
DESPLIEGUE DEL PROXY
Cada nodo debe tener una entrada en el archivo abyayala.yml de esta forma:
- service_name: chem
domains:
- chem.abyaya.la
nodo: chem.comun
ssl: yes
Donde
- service_name: es un nombre arbitrario
- domains: la unica entrada de domains es el subdominio principal
- nodo: es el hostname del nodo en la RAP
- ssl: habilita la conexión SSL/TLS en ese dominio y sus subdominios
- force_https: igual al parámetro anterior, pero fuerza la conexión segura (no permitiendo http plano)
Luego, ejecutamos el comando deploy especificando en -e "..." sus parámetros
ansible-playbook deploy.yml -e "host=abyayala alt=abyayala"
Los parámetros obligatorios son:
- alt: nombre de nuestro servidor autonomo, en este caso siempre es 'abyayala'
- host: nombre del servidor de destino en el archivo de inventario hosts.production
Los parámetros opcionales pueden ser:
- service: limita al despliegie a un servicio específico, en lugar de actualizar todos
También podemos utilizar parámetros de ansible, por ejemplo
ansible-playbook deploy.yml -e "host=abyayala alt=abyayala" --skip-tags=installation,proxy
Saltea dos partes del proceso, marcadas por tags. En este ejemplo, la instalación y la actualización de Nginx
DEPLOY LOCAL
Para desarrollo, podemos desplegar en nuestro localhost así
ansible-playbook --become deploy.yml -e "host=localhost alt=abyayala" -i hosts.local
DESPLIEGUE DE LA RAP
Esta se hace en dos partes, pues hay que configurarlo tanto en el servidor del proxy, como en el nodo de destino
RAP en el proxy
El proxy también se define en el archivo abyayala.yml en el server_name: vpn En la lista de nodos mantenemos los nodos autorizados para conectarse a la RAP
- service_name: vpn
roles:
- rap
nodos:
- marmite
- chemka
Luego podemos volver a ejcutar el primer comando deploy de este manual. O si queremos ejecutar solamente la RAP utilizaremos el parámetro service, como se explica más arriba
ansible-playbook deploy.yml -e "host=abyayala alt=abyayala service=vpn" --skip-tags=installation,proxy,rap
En este ejemplo, estamos salteando la parte de instalación para mayor velocidad y el proxy pues solamente queremos actualizar la VPN. Además, estamos salteando un paso específico, porque no queremos pisar configuraciones locales de la RAP
RAP en el nodo
Para desplegar la RAP en nuestro nodo destino, utilizamos el script tasks/rap.yml especificando sus paráemtros en -e "..."
ansible-playbook --become tasks/rap.yml -e "nodo=chem host=rakiduam"
En donde:
- host: es el nodo a configurar, según su definición en el inventario de ansible
- nodo: es el nombre que le daremos, el cual debe coincidir con el que desplegamos en el proxy más arriba
En este ejemplo, intentamos convertir nuestro localhost en un nodo
ansible-playbook --become tasks/rap.yml -e "host=localhost nodo=chem" -i hosts.local