Configurazione del firewall host

Per impostazione predefinita, il firewall dell'host Container-Optimized OS consente le connessioni in uscita e accetta le connessioni in entrata solo tramite il servizio SSH. Puoi vedere la configurazione esatta del firewall host eseguendo sudo iptables -L su un'istanza VM che esegue Container-Optimized OS.

Tieni presente che il firewall dell'host è diverso dalle regole del firewall Virtual Private Cloud, che devono essere configurate anche per il corretto funzionamento delle applicazioni. Per saperne di più sulle regole firewall Virtual Private Cloud, consulta la Panoramica delle regole firewall.

Container in esecuzione nello spazio dei nomi di rete predefinito di Docker

Se stai implementando un contenitore su Container-Optimized OS che deve essere accessibile tramite la rete e non utilizzi l'opzione --net=host di Docker, esegui il contenitore con l'opzione --net=host di Docker.-p Con questa opzione, Docker configurerà automaticamente il firewall host in modo da esporre l'applicazione sulla rete. Consulta il riferimento a docker run per scoprire di più sulle opzioni di docker run.

Nell'esempio seguente, il contenitore nginx sarà accessibile sulla rete sulla porta 80:

docker run --rm -d -p 80:80 --name=nginx nginx

Eseguire i container nello spazio dei nomi di rete dell'host

Se stai eseguendo il deployment di un contenitore su Container-Optimized OS che deve essere accessibile tramite la rete e utilizzi l'opzione --net=host di Docker, devi configurare manualmente la firewall dell'host.

Puoi configurare il firewall host con i comandi iptables standard. Come per la maggior parte delle distribuzioni GNU/Linux, le regole del firewall configurate con i comandi iptables non vengono mantenute dopo i riavvii. Per assicurarti che il firewall host sia configurato correttamente su ogni avvio, configuralo nella configurazione cloud-init. Considera il seguente esempio cloud-init:

#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

L'utilizzo di questa configurazione cloud-init con una VM che esegue il sistema operativo ottimizzato per i container comporterà i seguenti comportamenti a ogni avvio:

  • Il firewall dell'host verrà configurato per consentire le connessioni TCP in entrata sulla porta 80.
  • Un container nginx ascolterà sulla porta 80 e risponderà alle richieste HTTP in entrata.

Consulta la sezione Creare e configurare istanze per scoprire di più sull'utilizzo di cloud-init su Container-Optimized OS.