Arquitetura de Rede no Docker: Modos Padrão, Ponte e Redes Personalizadas

O ecossistema de containers utiliza Namespaces do kernel Linux para separar contextos operacionais, incluindo isolamento completo de pilhas TCP/IP. Ao inicializar o daemon, três pontes lógicas são provisionadas automaticamente: bridge, host e none. Para cargas de trabalho comerciais ou arquiteturas de microsserviços, a implementação de topologias definidas pelo usuário torna-se imprescindível.

Pilotos de Rede Integrados

O motor oferece quatro drivers nativos que determinam o ciclo de vida e o roteamento do tráfego:

  • host: Remove a abstração de interface de rede. O processo containerizado opera diretamente no stack TCP/IP do anfitrião, reutilizando endereços e portas físicas. Oferece throughput máximo, porém compromete o isolamento de escutagem.
  • container: Agrupa dois ou mais processos dentro do mesmo contexto de rede. A comunicação interna ocore via interface lopoback, otimizando o consumo de memória e tabelas de roteamento.
  • none: Desabilita totalmente o subsistema de conectividade. Aplicável para jobs síncronos que dependem exclusivamente de volumes locais ou para sandboxing criptográfico.
  • bridge: Modalidade padrão. Reserva um segmento privado (geralmente RFC 1918), gera pares de dispositivos virtuais veth e os acopla a uma ponte nativa (docker0). Requisições externas atravessam tradução de endereços antes de alcançarem os pods.

Operação do Driver Bridge

O mecanismo de ponte baseia-se na criação de links duplos veth. Uma ponta reside no namespace do serviço (atribuída como eth0), enquanto a outra conecta-se ao switch virtual da máquina base. O IPAM (Address Management Protocol) assegina subendereço disponível e define o gateway padrao.

A exposição pública depende de manipulação direta no iptables:

  • SRC-NAT (MASQUERADE): Reescreve o cabeçalho de origem de pacotes saídos da faixa privada para o endereço físico da placa mestre, garantindo retorno adequado das respostas.
  • DST-NAT (DNAT): Intercepta fluxos entrantes nas portas mapeadas (via sinalizador -p) e os encaminha para o destino interno correspondente.

Isolamento e Política de Contenção

Por padrão, entidades vinculadas à mesma ponte intercambiam dados indiscriminadamente na camada L2. Restrições podem ser aplicadas passando --icc=false durante o boot do daemon. Além disso, regras de filtragem intermediária controlam permisividades entre domínios externos e privados.

Redes Definidas pelo Usuário

Substituir a interface genérica por alocações dedicadas permite resolver nomes de serviço automaticamente via servidor DNS embutido, elimina hardcoding de endereços e oferece governança refinada sobre políticas ingress/egress.

# Provisionamento da sub-rede customizada
$ docker network create --driver bridge \
  --subnet 10.30.1.0/24 \
  --gateway 10.30.1.1 \
  infraestrutura_app

Orquestração dos nós dependentes:

# Instância de cache distribuído
$ docker run -d --name memoria_volátil --network infraestrutura_app redis:7.4-alpine

"# Repositório transacional associado ao domínio lógico
$ docker run -d --name repo_primário --network infraestrutura_app \
  -e MYSQL_ROOT_PASSWORD=cripto456 \
  -v /opt/db/storage:/var/lib/mysql \
  mysql:8.4

Nesta arquitetura, clientes internos utilizam lookup direto pelos identificadores. Servidores DHCP/hosts estáticos deixam de ser requisito.

Configuração de Aplicações Conectadas

Ferramentas de desenvolvimento devem apontar para os alvos internos registrados. Seguem adaptações compatíveis para bases Java e .NET explorando descoberta dinâmica:

# Propriedades do Spring Boot
spring.datasource.url=jdbc:mysql://repo_primário:3306/projeto_base?serverTimezone=UTC
spring.redis.host=memoria_volátil
spring.redis.port=6379
{
  "ConnectionStrings": {
    "Persistencia": "Server=repo_primário;Port=3306;Uid=admin;Pwd=cripto456;Database=projeto_base;",
    "Armazenamento_Rápido": "memoria_volátil:6379"
  }
}

Replanejamento de instâncias entre domínios lógicos aocntece sem interrupção de processos ativos, viabilizando expansão horizontal e gestão de capacidade em ambientes orquestrados.

Tags: docker-redes driver-bridge iptables-nat docker-user-defined-networks linux-namespaces

Publicado em 9-21 18:18