[3/3] Container networking con AppJail: configuraciones complejas

Iniciado por DtxdF, Febrero 23, 2023, 02:57:50 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.


Fuente: CoinDesk

La información que se ha recopilado en la parte No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y No tienes permitido ver los links. Registrarse o Entrar a mi cuenta es valiosa para explicar configuraciones un poco más complejas que se adaptan a aplicaciones más específicas. Afortunadamente, AppJail abstrae todos los procesos necesarios para llevar a cabo las operaciones sin necesidad de que conozcamos los detalles intrinsecos.

Después de leer este artículo sabrás cómo organizar tus jaulas para que se adapten a tu aplicación y entorno.

Es recomendable leer la documentación de todas formas: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


multi-(virtual)net & bridges:


Una jaula puede estar en varias redes virtuales al mismo tiempo. Esto es bastante útil para mantener un orden lógico que se adapte más a nuestro entorno. Por ejemplo, podemos crear tres jaulas: `jdb`, un DBMS, `jweb`, un servidor web y `jdev`, una jaula donde estará la aplicación que estamos desarrollando que usará los servicios de las otras jaulas. Además de las jaulas, hay que tener tres redes: `web`, para los servidores web o cosas relacionadas (nginx, apache, php-fpm, APIs, etc.), `db`, para bases de datos (mongodb, mysql, redis, etc.) y `development`, para jaulas que se usarán estrictamente para desarrollar aplicaciones usando los demás servicios. Nuestra jaula `jdev` debe estar en todas las redes para que la comunicación pueda tener efecto.

Las redes virtuales no proveen una conexión al exterior, pero fácilmente se puede solucionar con NAT o los puentes. Es importante saber cual elegir porque uno provee características que el otro no puede y ofrece un mejor aislamiento que el otro no dispone, lo cual puede o no ser estrictamente necesario. Es recomendable leer la documentación para obtener más detalles.

En este caso, los puentes serán la elección actual.


Código: sh
#
# Networks
#

# db
appjail network add db 10.42.0.0/24
# web
appjail network add web 10.0.0.0/24
# development
appjail network add development 172.16.0.0/10

#
# Jails
#

# jdb
appjail quick jdb virtualnet="db:jdb" bridge="jdb iface:jext" start
# jweb
appjail quick jweb virtualnet="web:jweb" bridge="jweb iface:jext" start
# jdev
appjail quick jdev virtualnet="db:jd1" virtualnet="development:jd2" virtualnet="web:jd3" bridge="jdev iface:jext" start

Es así de sencillo crear una jaula que esté en múltiples redes virtuales. Después de instalar algunos paquetes, actualizarlos o hacer cualquier cosa que necesite conexión al exterior, podríamos quitar las interfaces que están agregadas al puente para que las jaulas que solo deben ofrecer servicios locales no se puedan comunicar hacia el exterior.

Código: sh
appjail network detach jdb
appjail network detach jweb

Es necesario editar la plantilla de las jaulas para que los cambios persistan como es descrito en la documentación.

multi-bridges:


Las redes virtuales son bastante útiles, pero los puentes ofrecen un rango de aplicaciones un poco más amplias por ser más flexibles. Por ejemplo, podríamos usar `dns/dnsmasq` para que este asigne las direcciones IPs en un rango específico a determinadas jaulas que estén en un puente privado.

Código: sh
# jpub
appjail quick jpub \
    bridge="jpb1 iface:jext bridge:public" \
    bridge="jpb2 bridge:private" \
    mount_devfs \
    devfs_ruleset=10 \
    dhcp="sb_jpb1" \
    dhcp="sb_jpb2" \
    overwrite
# jpriv
appjail quick jpriv \
    bridge="jpv bridge:private" \
    mount_devfs \
    devfs_ruleset=10 \
    dhcp="sb_jpv" \
    overwrite

En el ejemplo anterior, `jpub` está tanto en `public` como en `private`, por lo que puede comunicarse tanto con las jaulas que estén en `private` como comunicarse con el exterior ya que `public` tiene como miembro a la interfaz del host `jext`. `jpriv` solo puede comunicarse con las jaulas que estén en `private`.

Ahora se iniciará `dnsmasq` para que las jaulas que estén en `private` puedan obtener una dirección IP.


Código: sh
# AppJail crea el puente si no existe, pero dado que primero necesitamos agregarle una dirección IP ya que dnsmasq lo requiere, es necesario crearlo manualmente antes de iniciar las jaulas.
ifconfig bridge create name private
ifconfig private inet 129.0.0.1/24
dnsmasq --interface=private --dhcp-range=129.0.0.2,129.0.0.150,12h -d

En este punto es posible iniciar las jaulas para observar el resultado.

Código: text
# appjail start jpub
...
# appjail cmd jexec jpub ifconfig sb_jpb1 inet
sb_jpb1: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        inet 192.168.1.101 netmask 0xffffff00 broadcast 192.168.1.255
# appjail cmd jexec jpub ifconfig sb_jpb2 inet
sb_jpb2: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        inet 129.0.0.15 netmask 0xffffff00 broadcast 129.0.0.255
# appjail start jpriv
...
# appjail cmd jexec jpriv ifconfig sb_jpv inet
sb_jpv: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        inet 129.0.0.112 netmask 0xffffff00 broadcast 129.0.0.255

Conclusión:

En este punto, es posible crear jaulas que usen distintos tipos de configuración según necesitemos para crear una variedad de aplicaciones.

En los siguientes artículos, se mostrarán algunas cosas interesantes de AppJail usando todo el conocimiento adquirido hasta el momento.


~ DtxdF
Los seres humanos son robots, cuyo combustible es el afanado dinero.