Isso provavelmente será mais fácil de explicar com um diagrama, então esta é a configuração básica :
Existem 2 containers 10.0.0.1 & 10.0.0.2 rodando dentro de uma máquina host, e eu também criei uma ponte linux br0 .
Cada um dos contêineres vê sua própria interface de rede como eth0, mas a máquina host a vê como vethxxxx . Observando a imagem na configuração básica, não há conectividade entre os contêineres.
O que posso fazer facilmente é adicionar as duas interfaces veth na ponte usando brctl addif , e elas poderão se comunicar imediatamente, mas isso não é exatamente o que estou procurando fazer.
O que eu quero fazer é poder ter um controle mais granular sobre o encaminhamento entre os containers; para emular um switch gerenciado no br0 controlado pela máquina host. Se fossem máquinas físicas, acredito que isso poderia ser feito usando nmcli com algo como:
nmcli connection add type ethernet slave-type bridge con-name br0-port1 ifname <port name> master br0
e, em seguida, conecte os cabos das máquinas nas portas usadas nesse comando.
Existe uma maneira de alcançar efetivamente a mesma configuração virtualmente (como na foto nº 3)?
Você não pode "anexar" uma interface veth a uma porta de ponte; você pode torná-lo uma porta de ponte adicionando-o a uma ponte.
Uma interface veth é efetivamente um cabo ethernet virtual que funciona entre um par de portas. A maneira como você normalmente os usa no contexto de contêineres é que uma extremidade do "cabo" fica
eth0
dentro do contêiner e a outra extremidade é adicionada como uma porta de ponte, então você acaba com:Um dispositivo linux bridge age como um switch gerenciado no qual você pode configurar vlans por porta , controlar stp por porta, etc.