Configurazione del firewall host

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Per impostazione predefinita, il firewall dell'host del sistema operativo ottimizzato per i container consente le connessioni in uscita e accetta connessioni in entrata solo tramite il servizio SSH. Puoi vedere la configurazione esatta del firewall dell'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 di Virtual Private Cloud, che devono essere configurate anche per il corretto funzionamento delle applicazioni. Consulta la Panoramica delle regole firewall per scoprire di più sulle regole firewall per il Virtual Private Cloud.

Esecuzione dei container nello spazio dei nomi di rete predefinito di Docker

Se stai eseguendo il deployment di un container su Container-Optimized OS che deve essere accessibile sulla rete e non utilizzi l'opzione --net=host di Docker, esegui il container con l'opzione -p di Docker. Con questa opzione, Docker configura automaticamente il firewall host per esporre la tua applicazione sulla rete. Consulta il riferimento per l'esecuzione di Docker per scoprire di più sulle opzioni di esecuzione di Docker.

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

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

Esecuzione dei container nello spazio dei nomi di rete dell'host

Se stai eseguendo il deployment di un container su Container-Optimized OS che deve essere accessibile sulla rete e utilizzi l'opzione --net=host di Docker, devi configurare in modo esplicito il firewall host.

Puoi configurare il firewall host con comandi iptables standard. Come con la maggior parte delle distribuzioni GNU/Linux, le regole firewall configurate con comandi iptables non verranno mantenute tra i riavvii. Per assicurarti che il firewall host sia configurato correttamente a ogni avvio, configuralo nella configurazione di cloud-init. Esamina il seguente esempio di 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 in esecuzione Container-Optimized OS comporterà i seguenti comportamenti per ogni avvio:

  • Il firewall host verrà configurato in modo da consentire le connessioni TCP in entrata sulla porta 80.
  • Un container nginx rimane in ascolto sulla porta 80 e risponde alle richieste HTTP in entrata.

Consulta Creazione e configurazione di istanze per scoprire di più sull'utilizzo di cloud-init su Container-Optimized OS.