Dois host do docker de NICs, IP de origem do contêiner fixo, sem conexão com a segunda sub-rede

2

Temos o seguinte cenário, um host do Docker com duas NICs em duas sub-redes, ens8: IP 192.168.100.74/24 e ens9: IP 172.20.102.24/25 , a ponte padrão docker0 IP 172.17.0.1/16 e uma segunda ponte app_net IP 172.21.0.1/24 . 192.168.100.1 é o gateway padrão no host (gateway de internet).

O contêiner docker tem um IP de saída fixo usando o SNAT, consulte Quatro maneiras de conectar um contêiner docker a uma rede local - Usando NAT . Isso é feito por dois comandos, designe o endereço de destino à interface do host ip addr add 192.168.100.234/24 dev ens8 e adicione a regra iptables iptables -t nat -I POSTROUTING -s 172.21.0.4 -j SNAT --to-source 192.168.100.234 . Os contêineres são criados usando IPs da bridge app_net.

No host, posso pingar / rastrear os IPs na sub-rede 192.168.100.x e em 172.20.102.x e na Internet, por exemplo, google.com. Dentro de um contêiner, eu posso pingar / traceroute IPs na sub-rede 192.168.100.x , eu também posso pingar google.com, mas não consigo pingar nada em 172.20.102.x , exceto 172.20.102.24 . Veja a seguinte saída.

    # traceroute -I 192.168.100.10
    traceroute to 192.168.100.10 (192.168.100.10), 30 hops max, 46 byte packets
    1  172.21.0.1 (172.21.0.1)  0.004 ms  0.003 ms  0.002 ms
    2  192.168.100.10 (192.168.100.10)  0.180 ms  0.158 ms  0.028 ms

    # traceroute -I google.com
    traceroute to google.com (216.58.214.46), 30 hops max, 46 byte packets
    1  172.21.0.1 (172.21.0.1)  0.004 ms  0.013 ms  0.002 ms
    2  fritz.box (192.168.100.1)  2.144 ms  3.114 ms  2.697 ms
    3  server.provider.net (xx.yy.250.5)  6.947 ms  7.042 ms  4.305 ms
    4  etc...

    # traceroute -I 172.20.102.24
    traceroute to 172.20.102.24 (172.20.102.24), 30 hops max, 46 byte packets
    1  172.20.102.24 (172.20.102.24)  0.004 ms  0.003 ms  0.002 ms

    # traceroute -I 172.20.102.9
    traceroute to 172.20.102.9 (172.20.102.9), 30 hops max, 46 byte packets
    1  172.21.0.1 (172.21.0.1)  0.004 ms  0.003 ms  0.002 ms
    2  *  *  *
    3  *  *  * (etc. no response)

Se eu não adicionar a regra SNAT do iptables, os containers podem pingar / rastrear tudo, também as máquinas na sub-rede 172.20.102.x .

Eu encontrei um artigo sobre vários NICs e docker (#) com um despojado da solução no serverFault, mas nem isso, nem uma análise profunda da docker networking avançada (#) me deu uma pista, por que não consigo acessar outras máquinas no ens9 sub-rede, exceto a própria placa de rede de dentro de um contêiner docker.

Estou sentindo falta de algo ou esse cenário de rede está errado?

(#) Não é permitido postar mais de dois links por causa da reputação, mas o link serverFault juntamente com o Google "Docker em várias interfaces de rede" deve ajudar a encontrar os links.

    
por skipperTux 28.04.2017 / 16:14

0 respostas