Escenario en OpenStack
Descripción
En esta tarea se va a crear el escenario de trabajo que se va a usar durante todo el curso, que va a constar inicialmente de 4 máquinas: 2 instancias en OpenStack y dos contenedores LXC que se ejecutarán en una de las instancias.
Para nombrar las máquinas se va a utilizar alfa, bravo, charlie y delta, que son las primeras letras de un alfabeto que nació antes de la Primera Guerra Mundial en respuesta a los avances en la radio bidireccional compatible con la voz, para mejorar la comunicación en circuitos telefónicos de baja calidad y de larga distancia.
Además el dominio será un subdominio de la forma tunombre.gonzalonazareno.org. De esta forma tendremos:
- Máquina 1: Instancia en OpenStack con Debian 11 Bullseye que se llama
alfa.tunombre.gonzalonazareno.org. - Máquina 2: Instancia en OpenStack con Rocky Linux 9 que se llama
bravo.tunombre.gonzalonazareno.org. - Máquina 3: Contenedor LXC con Ubuntu 20.04 que se llama
charlie.tunombre.gonzalonazareno.org. - Máquina 4: Contenedor LXC con Ubuntu 20.04 que se llama
delta.tunombre.gonzalonazareno.org.
La creación y configuración (conexión a las redes, creación de volumen, quitarle la seguridad alos puertos, …) de la máquina1 (alfa) la debes hacer con OSC. Lo demás lo puedes hacer con horizon.
Escenario
Instalación de las instancias en OpenStack
-
Creamos una red interna que se llame Red DMZ de tu_usuario, con las siguientes características:
- Direccionamiento:
172.16.0.0/16. - Con DHCP y DNS:
192.168.202.2. - La puerta de enlace de los dispositivos conectados a esta red será el
172.16.0.1.
openstack network create Red\ DMZ\ de\ mariajesus openstack subnet create --network Red DMZ de mariajesus --subnet-range 172.16.0.0/16 --dhcp --gateway 172.16.0.0 --dns-nameserver 192.168.202.2 Red\ DMZ\ de\ mariajesus - Direccionamiento:
-
Las dos instancias que vamos a crear se van a configurar con cloud-init de la siguiente manera:
- Deben actualizar los paquetes de la distribución de la instancia.
- El dominio utilizado será del tipo
tunombre.gonzalonazareno.org. Por lo tanto en la configuración con cloud-init habrá que indicar el hostname y el FQDN. - Se crearán dos usuarios:
- Un usuario sin privilegios. Se puede llamar como quieras (pero el nombre será el mismo en todas las máquinas) y accederás a las máquinas usando tu clave ssh privada.
- Un usuario
profesor, que puede utilizar sudo sin contraseña. Copia de las claves públicas de todos los profesores en las instancias para que puedan acceder con el usuarioprofesor.
- Cambia la contraseña al usuario root.
-
Creación de la máquina1 (alfa):
-
Crea una instancia sobre un volumen de 30Gb, usando una imagen de Debian 11 Bullseye. Elige el sabor
vol.medium. Y configuralá concloud-initcomo se ha indicado anteriormente. -
Está instancia estará conectada a tu red interna. Asigna a la instancia una IP flotante.
openstack volume create --image "Debian 11 Bullseye" --size 30 vol.alfa ---- openstack server create --flavor vol.medium \ --volume vol.alfa \ --security-group default \ --key-name pass \ --network "red de mariajesus.alloza" \ --user-data config-alfa.yaml \ alfa ---- openstack floating ip create ext-net openstack server add floating ip alfa 172.22.201.46 -
Fichero config-alfa.yaml
#cloud-config package_update: true package_upgrade: true preserve_hostname: false fqdn: alfa.mariajesus.gonzalonazareno.org hostname: alfa # Crear un usuario y añadir clave pública ssh users: - name: profesor sudo: ALL=(ALL) NOPASSWD:ALL shell: /bin/bash passwd: ssh_authorized_keys: ssh-rsa AAAA************** jose@debian ssh-rsa AAAA************** rafa@eco - name: maria shell: /bin/bash passwd: debian ssh_authorized_keys: ssh-rsa *************************************************** maria@debian chpasswd: list: | root:AkfJE64jFke82 expire: False
-
-
Configuración de la máquina1 (alfa):
-
Conecta la instancia a tu Red DMZ, asígnale la dirección 172.16.0.1 para que sea la puerta de enlace las máquinas conectadas a esta red.
openstack port create --network Red\ DMZ\ de\ mariajesus --fixed-ip ip-address=172.16.0.1 alfa-port openstack server add port alfa alfa-port -
Deshabilita la seguridad de los puertos en las dos interfaces de red para que funcione de manera adecuada el NAT.
openstack server remove security group alfa openstack port set --disable-port-security alfa-port openstack port set --disable-port-security -
Configura de forma permanente la regla SNAT para que las máquinas de la Red DMZ tengan acceso a internet.
iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -o ens3 -j MASQUERADE iptables-save > /etc/iptables/rules.v4
-
-
Creación de la máquina2 (bravo):
-
Está instancia se conectará a la red DMZ. Usando un puerto asigna a esta máquina la dirección 172.16.0.200.
-
Crea una instancia sobre un volumen de 30Gb, usando una imagen de Rocky Linux 9. Elige el sabor vol.normal. Y configurala con cloud-init como se ha indicado anteriormente.
openstack volume create --image "Rocky Linux 9" --size 30 vol.bravo openstack port create --network Red\ DMZ\ de\ mariajesus --fixed-ip ip-address=172.16.0.200 bravo-port ---- openstack server create --flavor vol.normal \ --volume vol.bravo \ --security-group default \ --key-name pass \ --port bravo-port \ --user-data config-bravo.yaml \ bravo -
Fichero config-bravo.yaml
#cloud-config package_update: true package_upgrade: true preserve_hostname: false fqdn: bravo.mariajesus.gonzalonazareno.org hostname: bravo # Crear un usuario y añadir clave pública ssh users: - name: profesor sudo: ALL=(ALL) NOPASSWD:ALL shell: /bin/bash passwd: ssh_authorized_keys: ssh-rsa AAAA************** jose@debian ssh-rsa AAAA************** rafa@eco - name: maria shell: /bin/bash passwd: debian ssh_authorized_keys: ssh-rsa *************************************************** maria@debian chpasswd: list: | root:AkfJE64jFke82 expire: False -
Deshabilita la seguridad de los puertos en la interfaz de red para que funcione de manera adecuada el NAT.
-
Comprueba que tiene acceso a internet. Si no tiene acceso a internet, no se han actualizado los paquetes con cloud-init, hazlo posteriormente.
-
Instalación de los contenedores LXC
En maquina1 vamos a crear dos contenedores en un red interna, para ello:
-
Crea en máquina1 (alfa) un linux bridge llamado
br-intray asigna una dirección IP estática192.168.0.1. Esta será la IP de máquina1 (alfa) conectada a este switch virtual y será la puerta de enlace de los contenedores.-
Instalamos el paquete
bridge-utilsyqemu-kvmpara crear el bridge.apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst apt install bridge-utils -
Definimos el archivo br-intra.xml
<network> <name>br-intra</name> <bridge name='br-intra'/> <forward/> <ip address='192.168.0.1' netmask='255.255.255.0'> </ip> </network> -
Creamos el bridge
virsh net-define br-intra.xml virsh net-start br-intra virsh net-autostart br-intra
-
-
Instala LXC y crea dos contenedores con la distribución Ubuntu 20.04. Estos contenedores serán la máquina3 (charlie) y la máquina4 (delta).
sudo apt install lxc- creamos los contenedores
lxc-create -n charlie -t ubuntu -- -r focal lxc-create -n delta -t ubuntu -- -r focal -
Configura de forma permanente la regla SNAT para que los contenedores tengan acceso a internet.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ens3 -j MASQUERADE iptables-save > /etc/iptables/rules.v4 -
Conecta los contenedores al bridge
br-intray configúralo de forma estática con las siguientes direcciones: máquina3 (charlie) la192.168.0.2y máquina4 (delta) la192.168.0.3.-
CHARLIE
lxc-start -n charlie nano /var/lib/lxc/charlie/config ---- lxc.net.0.type = veth lxc.net.0.link = br-intra lxc.net.0.flags = up --- lxc-stop -n charlie lxc-start -n charlie lxc-attach -n charlie vim /etc/netplan/10-lxc.yamlnetwork: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: [192.168.0.2/24] gateway4: 192.168.0.1netplan apply -
DELTA
lxc-start -n delta nano /var/lib/lxc/delta/config ---- lxc.net.0.type = veth lxc.net.0.link = br-intra lxc.net.0.flags = up --- lxc-stop -n delta lxc-start -n delta lxc-attach -n delta vim /etc/netplan/10-lxc.yamlnetwork: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: [192.168.0.3/24] gateway4: 192.168.0.1netplan apply
-
-
Para que la red de OpenStack funcione de forma adecuada las imágenes que usamos tienen configurado la mtu (Unidad máxima de transferencia) a 1450 bytes. Tenemos que adecuar los contenedores a este tamaño de trama. Para ello introduce en la configuración de los contenedores la línea:
lxc.net.0.mtu = 1450.echo "lxc.net.0.mtu = 1450" >> /var/lib/lxc/charlie/config echo "lxc.net.0.mtu = 1450" >> /var/lib/lxc/delta/config -
Configura los contenedores para que se auto inicien al reiniciar la instancia.
```bashecho “lxc.start.auto = 1” » /var/lib/lxc/charlie/config echo “lxc.start.auto = 1” » /var/lib/lxc/delta/config
-
Los contenedores tendrán características parecidas a las instancias anteriormente:
-
Debes actualizar los paquetes de la distribución instalada.
lxc-attach -n charlie -- apt install openssh-server lxc-attach -n delta -- apt install openssh-server -
El dominio utilizado será del tipo
tunombre.gonzalonazareno.org. Por lo tanto configura de manera adecuda el hostname y el FQDN.lxc-attach -n charlie -- hostnamectl set-hostname charlie.maria.gonzalonazareno.org lxc-attach -n delta -- hostnamectl set-hostname delta.maria.gonzalonazareno.org lxc-attach -n charlie -- hostnamectl lxc-attach -n delta -- hostnamectl -
Para acceder a los contenedores vamos a usar ssh.
ssh ubuntu@192.168.0.2 ssh ubuntu@192.168.0.3ssh-copy-id -i ~/.ssh/pass -o ProxyJump=maria@172.22.201.46 maria@192.168.0.2 ssh-copy-id -i ~/.ssh/pass -o ProxyJump=maria@172.22.201.46 maria@192.168.0.3 -
Crea dos usuarios:
-
Un usuario sin privilegios. Se puede llamar como quieras (el nombre de usuario que usaste en las instancias) y accederás a los contenedores usando tu clave ssh privada.
lxc-attach -n charlie -- adduser maria lxc-attach -n delta -- adduser maria -
Un usuario
profesor, que puede utilizar sudo sin contraseña. Copia de las claves públicas de todos los profesores en los contenedores para que puedan acceder con el usuarioprofesor.-
Añadimos el usuario
profesora los contenedores.lxc-attach -n charlie -- adduser profesor lxc-attach -n delta -- adduser profesor -
Modificamos el ficher /etc/sudoers para que el usuario
profesorpueda utilizar sudo sin contraseña.#CHARLIE ssh -J maria@172.22.201.46 ubuntu@192.168.0.2 sudo visudo --- profesor ALL=(ALL) NOPASSWD:ALL ----- #DELTA ssh -J maria@172.22.201.46 ubuntu@192.168.0.3 sudo visudo --- profesor ALL=(ALL) NOPASSWD:ALL ----- -
Copiamos las claves públicas de los profesores en los contenedores.
#CHARLIE ssh -J maria@172.22.201.46 ubunto@192.168.0.2 mkdir /home/profesor/.ssh vim /home/profesor/.ssh/authorized_keys #DELTA sh -J maria@172.22.201.46 ubunto@192.168.0.3 mkdir /home/profesor/.ssh vim /home/profesor/.ssh/authorized_keys -
Cambia la contraseña al usuario
root.lxc-attach -n charlie -- passwd #root lxc-attach -n delta -- passwd #root
-
-
-
Pruebas
-
Comprobación de los FQDN y acceso por ssh
- ALFA
- BRAVO
- CHARLIE
- DELTA
-
Comprobación de acceso a internet
- ALFA
- BRAVO
- CHARLIE
- DELTA