De forma predeterminada, el cortafuegos del host de Container-Optimized OS permite las conexiones salientes y acepta las conexiones entrantes solo a través del servicio SSH. Para ver la configuración exacta del cortafuegos del host, ejecuta sudo iptables -L
en una instancia de VM que ejecute Container-Optimized OS.
Ten en cuenta que el cortafuegos del host es diferente de las reglas del cortafuegos de la nube privada virtual, que también deben configurarse para que tus aplicaciones funcionen correctamente. Consulta la descripción general de las reglas de cortafuegos para obtener más información sobre las reglas de cortafuegos de la nube privada virtual.
Ejecutar contenedores en el espacio de nombres de red predeterminado de Docker
Si vas a implementar un contenedor en Container-Optimized OS que debe ser accesible a través de la red y no usas la opción --net=host
de Docker, ejecuta el contenedor con la opción -p
de Docker. Con esta opción, Docker configurará automáticamente el cortafuegos del host para exponer tu aplicación en la red. Consulta la referencia de Docker run para obtener más información sobre las opciones de Docker run.
En el siguiente ejemplo, se podrá acceder al contenedor nginx
en la red a través del puerto 80:
docker run --rm -d -p 80:80 --name=nginx nginx
Ejecutar contenedores en el espacio de nombres de red del host
Si vas a implementar un contenedor en Container-Optimized OS que debe ser accesible a través de la red y usas la opción --net=host
de Docker, debes configurar explícitamente el firewall del host.
Puedes configurar el cortafuegos del host con comandos iptables
estándar. Al igual que en la mayoría de las distribuciones GNU/Linux, las reglas de cortafuegos configuradas con comandos iptables
no se conservarán tras reiniciar el sistema. Para asegurarse de que el cortafuegos del host esté configurado correctamente en cada arranque, configure el cortafuegos del host en su configuración de cloud-init
. Veamos el siguiente cloud-init
ejemplo:
#cloud-config
write_files:
- path: /etc/systemd/system/config-firewall.service
permissions: 0644
owner: root
content: |
[Unit]
Description=Configures the host firewall
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- path: /etc/systemd/system/myhttp.service
permissions: 0644
owner: root
content: |
[Unit]
Description=My HTTP service
After=docker.service config-firewall.service
Wants=docker.service config-firewall.service
[Service]
Restart=always
ExecStart=/usr/bin/docker run --rm --name=%n --net=host nginx
ExecStop=-/usr/bin/docker exec %n -s quit
runcmd:
- systemctl daemon-reload
- systemctl start myhttp.service
Si usas esta configuración de cloud-init
con una VM que ejecuta Container-Optimized OS, se producirán los siguientes comportamientos en cada arranque:
- El cortafuegos del host se configurará para permitir las conexiones TCP entrantes en el puerto 80.
- Un contenedor
nginx
escuchará en el puerto 80 y responderá a las solicitudes HTTP entrantes.
Consulta el artículo Crear y configurar instancias para obtener más información sobre el uso de cloud-init
en Container-Optimized OS.