proxmox

Proxmox lleva siendo desde hace años un posible sustituto de vmware con la ventaja adicional de permitir la creación de contenedores.
Lleva acompañándome muchos años y no entiendo que en muchas empresas se siga usando vmware existiendo proxmox.
Vamos a ver como instalarlo en un solo servidor consiguiendo este esquema:

Instalar Proxmox

Primero instala Debian con una partición para el sistema de 50G dejando el resto del disco libre y luego sigue estos pasos que en resumen viene a ser:

  • configurar ip fija en tu servidor: ya estará hecho si usas cualquier proveedor pero si estás probando en un virtualbox pon esto sustituyendo tu ip fija en /etc/network/interfaces y reinicia:
  auto ethquesea
  iface ethquesea inet static
    address ip.qu.se.a/mascaraquesea
    gateway gate.way.que.sea
  
  • asociar esa ip fija al nombre de tu servidor: hay que agregar en el /etc/hosts esto:
  ip.qu.se.a   tuhostname.tu.dominio tuhostname
  
  • instalar proxmox:
  echo "deb http://download.proxmox.com/debian/pve buster pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
  wget http://download.proxmox.com/debian/proxmox-ve-release-6.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg
  apt update && apt full-upgrade
  apt install proxmox-ve postfix open-iscsi
  apt remove os-prober
  

Configurar la red

Ahora solo tenemos una IP de entrada pero queremos tener muchos contenedores así que, siguiendo el esquema de arriba vamos a crear una red a la que enganchar los contenedores y les vamos a dar salida a internet.

En la interfaz web ubicada en https://tuhostname.tu.dominio:8006 nos vamos a Datacenter|tuhostname , Network y creamos un Linux Bridge:

asociandole una dirección ip:

Y tras un reinicio nos debería aparecer el bridge levantado:

Probar la red

Vamos a crear un par de contenedores para probar que todo funciona así que nos vamos a agregar una plantilla bajándonos la de debian 10 por ejemplo:

pinchamos en "Create CT", rellenamos lo que queramos y en la pestaña "Network" ponemos la ip del bridge como gateway y elegimos una ip del rango. Yo, para no liarme suelo poner la ip igual al número del contenedor:

Ahora crea otro contenedor con otra ip y arranca los dos.

Si abres una shell en uno de ellos deberías poder hacer ping al otro y al gateway:

Hasta aquí es más o menos lo de siempre pero todavía no tenemos acceso a internet ni pueden acceder a nuestro servidor desde fuera.

Configurar la salida a internet

Esta configuración es parecida a la que tienes en tu casa donde tu sales a internet con la ip de tu router así que tienes que decirle al servidor que haga nat.

Primero habilita el forwarding en /etc/sysctl.conf:

net.ipv4.ip_forward=1

Ahora instala iptables-persistent:

apt install iptables-persistent

Configúralo para que arranque al inicio creando este archivo en /etc/network/if-pre-up.d/iptables:

#!/bin/bash
/sbin/iptables-restore < /etc/iptables/rules.v4

Y configura en /etc/iptables/rules.v4 el nateo:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s red.del.brid.ge/mascarabridge ! -d red.del.brid.ge/mascarabridge -j MASQUERADE
COMMIT

Ahora reinicia, arranca los dos contenedores y comprueba que tienen salida a internet.

Redireccionar puertos

Imagina que quieres dar acceso por ssh al servidor, por ejemplo, que se llegue al puerto 22 del contenedor 100 usando el puerto 22100 del servidor.

Pues en el fichero /etc/iptables/rules.v4, en la zona de nat, agregas una regla tal que así:

-A PREROUTING -d tu.ip.publi.ca -i ethquesea -p tcp -m tcp --dport 22100 -j DNAT --to-destination 10.20.30.100:22

Redireccionar tráfico http y https

Para eso podemos usar nginx, apache, haproxy, ... pero en este ejemplo usaremos nginx.

Instalamos nginx en el servidor:

apt install nginx

Y creamos un proxy inverso de esta forma en /etc/nginx/sites-available/test1.conf:

server {
    server_name test1.tu-ip-publi-ca.nip.io;
    listen 80;
    location / {
        proxy_pass http://ip.de.tu.contenedor:80;
    }
}

Y lo activamos:

ln -s /etc/nginx/sites-available/test1.conf /etc/nginx/sites-enabled/test1.conf

Al reiniciar nginx ya estará accesible.

Para el tráfico https te recomiendo usar letsencrypt que te configura todo solo. Puedes seguir esta guía.

El día a día de proxmox

El día a día consiste en crear contenedor/máquina virtual y agregar un proxy inverso en el nginx.

Gestión muy sencilla.

Conclusión

Llevaba años queriendo escribir esto y he ido a escribirlo cuando ya estoy sustituyendo Proxmox por Kubernetes. ¡Así es la vida!

Cuidado, Proxmox es una solución de virtualización que está al nivel de vmware. De hecho no entiendo como en muchas empresas se usa vmware existiendo proxmox.

Pero hoy día, si puedes, plantéate usar Kubernetes que ya te hace la configuración del nginx, nateo y certificados sola. Además, facilita enormemente el despliegue de las aplicaciones y se está convirtiendo en el standard de facto en el mundo de la gestión de contenedores.