Como configurar o firewall do host

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.