Por padrão, o firewall do host do Container-Optimized OS permite conexões
de saída e aceita conexões de entrada somente pelo serviço SSH. Para
ver a configuração exata do firewall do host, execute sudo iptables -L
em uma
instância de VM que executa o Container-Optimized OS.
Lembre-se de que o firewall do host é diferente das regras de firewall da nuvem privada virtual (VPC, na sigla em inglês), que também precisam ser configuradas para que os aplicativos funcionem corretamente. Consulte a Visão geral das regras de firewall para saber mais sobre as regras de firewall da nuvem privada virtual.
Como executar contêineres no namespace de rede padrão do Docker
Se você estiver implantando um contêiner no Container-Optimized OS que precise ser
acessível pela rede e não estiver usando a opção --net=host
do Docker,
execute o contêiner com a opção -p
do Docker. Com essa opção, o Docker
configura automaticamente o firewall do host para expor o aplicativo na
rede. Consulte a
referência de execução do Docker para saber mais
sobre as opções de execução do Docker.
No exemplo a seguir, o contêiner nginx
poderá ser acessado na
rede na porta 80:
docker run --rm -d -p 80:80 --name=nginx nginx
Como executar contêineres no namespace de rede do host
Se você estiver implantando um contêiner no Container-Optimized OS que precise
ser acessado pela rede e estiver usando a opção --net=host
do Docker,
configure explicitamente o firewall do host.
É possível configurar o firewall do host com comandos iptables
padrão. Como
na maioria das distribuições do GNU/Linux, as regras de firewall configuradas com comandos iptables
não serão permanentes durante as reinicializações. Para garantir que o firewall do host esteja
configurado corretamente em cada inicialização, configure o firewall do host na
configuração do cloud-init
. Veja o exemplo cloud-init
a seguir.
#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
Usar essa configuração cloud-init
com uma VM executando
o Container-Optimized OS resultará nos seguintes comportamentos em cada
inicialização:
- O firewall do host será configurado para permitir conexões TCP de entrada na porta 80.
- Um contêiner
nginx
detectará a porta 80 e responderá às solicitações HTTP de entrada.
Consulte
Como criar e configurar instâncias
para saber mais sobre como usar cloud-init
no Container-Optimized OS.