Per impostazione predefinita, il firewall host di Container-Optimized OS consente le connessioni in uscita e accetta le connessioni in entrata solo tramite il servizio SSH. Puoi visualizzare l'esatta configurazione del firewall host eseguendo sudo iptables -L
su un'istanza VM che esegue Container-Optimized OS.
Tieni presente che il firewall host è diverso dalle regole firewall di 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 sulle regole firewall.
Esecuzione dei container nello spazio dei nomi di rete predefinito di Docker
Se esegui il deployment di un container su Container-Optimized OS che deve essere accessibile tramite la rete e non utilizzi l'opzione --net=host
di Docker, esegui il container con l'opzione -p
di Docker. Con questa opzione, Docker configurerà automaticamente il firewall host per esporre l'applicazione sulla rete. Consulta il riferimento per l'esecuzione di Docker per ulteriori informazioni sulle opzioni di esecuzione 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 esplicitamente il firewall host autonomamente.
Puoi configurare il firewall host con i comandi iptables
standard. Come con la maggior parte delle distribuzioni GNU/Linux, le regole firewall configurate con i comandi iptables
non verranno mantenute durante i riavvii. Per assicurarti che il firewall host sia configurato correttamente a ogni avvio, configura il firewall host nella configurazione di cloud-init
. Considera 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 che esegue
Container-Optimized OS comporterà i seguenti comportamenti a ogni
avvio:
- Il firewall host verrà configurato per 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.
Per saperne di più sull'utilizzo di cloud-init
in Container-Optimized OS, consulta Creazione e configurazione delle istanze.