Quando olho para o docker_gwbridge
, vejo que todos os contêineres nesse host são membros da ponte.
bridge name bridge id STP enabled interfaces
docker_gwbridge 8000.0242e581b3f5 no veth0987748
veth21aa5ea
veth358d367
veth473e3a5
vetha199713
vethf482f5f
vethf4ceab6
No entanto, como pode ser que uma interface física no host não seja membro dessa ponte? A documentação descreve essa rede como a ponte de saída para o tráfego que sai de um cluster de enxame do Docker. Ou seja, o tráfego que provavelmente sairá do host. Qual mecanismo está garantindo que os pacotes que entram no docker_gwbridge
(de qualquer contêiner) eventualmente deixem o host em uma interface física quando nenhuma interface física participa da ponte?
O mecanismo usado pelo Docker é o iptables. As regras do Iptables são adicionadas pelo Docker para que os pacotes do docker_gwbridge sejam encaminhados e então natted (masquerade) quando o tráfego for enviado para o mundo exterior.
Aqui está um trecho da saída do
docker network inspect docker_gwbridge
Você pode ver que o docker usa a rede 172.20.0.0/16 e que com.docker.network.bridge.enable_ip_masquerade está definido como true.
O Docker cria as seguintes regras:
Portanto, embora nenhuma interface física esteja conectada à ponte, o tráfego nessa ponte pode ser roteado/encaminhado e, como está definido para ser natted (masquerade), o tráfego será colocado na interface física associada ao endereço nat.