conecte um contêiner docker a uma rede local

2

O que estou tentando fazer

Estou tentando disponibilizar meu contêiner para a rede em todos os dispositivos, não apenas no host do docker.

Informações

  • Minha sub-rede é 9.158.143.0/24
  • meu gateway é 9.1158.143.254
  • meu IP do host do docker é a interface principal 9.158.143.52 (ens160)
  • e o IP do meu contêiner é 9.158.143.65
  • docker-pid é o ID do processo do docker
  • docker id é o docker ip

O que estou tentando fazer

Estou tentando disponibilizar meu contêiner para a rede em todos os dispositivos, não apenas no host do docker.

Eu quero fazer a configuração do docker de modo que a janela de encaixe possa ser acessada (ssh no meu caso) de qualquer lugar da minha rede.

Etapas seguidas até agora

  1. Comece criando um novo dispositivo de ponte.

    • brctl addbr br-em1

    • conjunto de links ip br-em1 up

  2. adicione este dispositivo à sua ponte

    • brctl addif br-em1 ens160
  3. Configure a ponte com o endereço que costumava pertencer a ens160

    • ip addr del 9.158.143.52/24 dev ens160

    • ip addr add 9.158.143.52/24 dev br-em1

  4. mova a rota padrão para a ponte

    • ip route del default
    • ip route add default via 9.158.143.254 dev br-em1

Até este ponto tudo funciona. o host do docker tem conectividade de rede.

  1. docker run -itd --nome da web do ubuntu

  2. Crie um par de interfaces veth:

    • ip link adiciona web-int tipo veth peer nome web-ext
  3. brctl addif br-em1 web-ext

  4. Adicione a interface web-int ao namespace do contêiner:

    • conjunto de links ip netns $ (web docker-pid) dev web-int
  5. nsenter -t $ (web docker-pid) -n conjunto de links ip web-int

  6. nsenter -t $ (web docker-pid) -n addr ip add 9.158.143.65/24 dev web-int

Até agora veth é criado dentro do container docker e a internet está funcionando dentro do container.

  1. nsenter -t $ (web docker-pid) -n rota ip del default

  2. nsenter -t $ (web docker-pid) -n rota ip add default via 9.158.143.254 dev web-int

O problema

Estes são os passos seguidos. Após os últimos 2 passos, a Internet deixa de funcionar com o contêiner. Eu não sou capaz de ping máquina host docker de qualquer outra máquina na rede (que anteriormente estava trabalhando).

Existe alguma regra iptables que precisa ser adicionada a partir dessas etapas. Se sim, por favor ajude.

PS: meu docker0 ip é 172.17.0.1 Link usado: link (com dispositivos de ponte linux)

A imagem do Ubuntu usada tem o serviço ssh ativo e em execução.

    
por Ashish Karki 12.09.2017 / 19:58

1 resposta

0

A abordagem que tomei ao definir algo semelhante foi atribuir estaticamente endereços IP a cada contêiner. Em seguida, "empilhei" os endereços IP como IPs secundários na interface da ponte, vmbr0 .

Minha configuração de rede:

$ ip a l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:22:15:91:XX:XX brd ff:ff:ff:ff:ff:ff
    inet6 fe80::222:15ff:fe91:XXXX/64 scope link
       valid_lft forever preferred_lft forever
3: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 00:22:15:91:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global vmbr0
    inet 192.168.1.101/24 scope global secondary vmbr0
    inet 192.168.1.103/24 scope global secondary vmbr0
    inet6 fe80::222:15ff:fe91:c12d/64 scope link
       valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0

Eu adicionei esses IPs secundários da seguinte forma:

$ ip addr add 192.168.1.101/24 dev vmbr0
$ ip addr add 192.168.1.101/24 dev vmbr0

Gostaria de executar meus contêineres da seguinte forma:

$ docker run --name='bind' -d \
    -p 192.168.1.101:53:53/udp \
    -p 192.168.1.101:10000:10000 sameersbn/bind:latest
    
por 17.06.2018 / 03:42