como associar uma interface de rede do Docker a uma interface de rede Linux (eth5) no host Linux?

2

Meu host Linux possui 8 interfaces Ethernet, eth0 - eth7. Estou executando três contêineres do Docker 1.9 neste host Linux.
Como posso associar uma interface de rede dentro de um contêiner Docker a uma interface de rede física específica do Linux (digamos, eth5) no host, na Camada 3 (camada IP)?

O motivo da conexão na Camada 3 é:
1. para poder configurar a interface de rede do Docker usando o DHCP
e
2. para que todo o tráfego IP de entrada na interface física do host (eth5) seja encaminhado para a interface Docker associada (não desejo fazer o mapeamento de porta usando NAT, que direcionará o tráfego APENAS para uma porta TCP / UDP específica para a interface do Docker)

Basicamente, como conectar uma interface de rede do Docker a um dispositivo de rede do Linux (host) específico (digamos, eth5) na Camada 3 / Camada 2?

    
por Adi 17.12.2015 / 05:58

1 resposta

1

Existem várias maneiras de fazer isso:

  1. Usando pontes do Linux (brctl)

  2. Usando o Open vSwitch (ovs-vsctl)

  3. Usando MACVLAN

  4. Usando IPVLAN (introduzido no kernel 3.19, mas não estável até 4.2 ou posterior)

MACVLAN e IPVLAN são suportadas como módulos do kernel Linux

MACVLAN: Isso possibilita a criação de interfaces de rede virtuais que “se apegam” a uma interface de rede física ( eth5 na pergunta acima). Cada interface virtual tem seu próprio endereço MAC - distinto do endereço MAC da interface física. Quadros enviados para ou a partir das interfaces virtuais são mapeados para a interface física.

Enquanto no Linux uma interface já pode ter vários endereços, um MACVLAN permite isolar ainda mais o tráfego que pode ser visto em uma interface desse tipo. Uma MACVLAN só conseguirá ver o tráfego com um endereço MAC que corresponda a essa interface, evitando que processos / contêineres em outras interfaces escutem o tráfego destinado a outra MACVLAN.

IPVLAN: Conceitualmente muito semelhante ao driver macvlan com uma grande exceção que usa L3 para muxing / demuxing entre escravos. O dispositivo mestre compartilha o L2 MAC com seus dispositivos escravos. Isso permite a criação de dispositivos virtuais fora de uma interface principal e os pacotes são entregues com base no endereço IP L3 dest nos pacotes. Todas as interfaces (incluindo a interface principal) compartilham L2, tornando-a transparente para um switch L2 conectado.

Para IPVLAN, a documentação canônica é: link

Atualmente, o Docker suporta MACVLAN e IPVLAN na versão experimental; eles estão entrando no GA em breve

Para mais informações sobre MACVLAN e IPVLAN (incluindo comandos específicos), veja o excelente blogpost de Brent Salisbury: link

    
por 02.06.2016 / 00:50