Per impostazione predefinita, il firewall host di Container-Optimized OS consente
e accetta connessioni in entrata solo tramite il servizio SSH. Tu
può vedere 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 del firewall Virtual Private Cloud, che devono essere configurate anche per il corretto funzionamento delle applicazioni. Per saperne di più, consulta la panoramica delle regole firewall. Regole firewall per il virtual private cloud.
Esecuzione dei container 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. Con questa opzione, Docker configurerà automaticamente il firewall host in modo da esporre l'applicazione sulla rete. Consulta le
Riferimento esecuzione Docker per apprendere
di più sulle opzioni di esecuzione di Docker.
Nell'esempio seguente, il contenitore nginx
sarà accessibile sul
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 esegui il deployment di un container su Container-Optimized OS, è necessario
è accessibile sulla rete e stai utilizzando l'opzione --net=host
di Docker,
devi configurare esplicitamente il firewall dell'host autonomamente.
Puoi configurare il firewall dell'host con i comandi iptables
standard. Come con
la maggior parte delle distribuzioni GNU/Linux, regole firewall configurate con i comandi iptables
non verranno mantenuti tra 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 un sistema operativo ottimizzato per i container comporterà i seguenti comportamenti a ogni avvio:
- Il firewall host sarà 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
Creazione e configurazione delle istanze
per saperne di più sull'utilizzo di cloud-init
in Container-Optimized OS.