不同主机下容器间通信2021.07

首先有两个主机,host1地址为192.168.90.91,而host2地址则为192.168.91.13

1.分别配置容器、网桥,连接并启用设备:

在host1上:

docker run -itd --net=none --privileged=true --name=test1 ubu /bin/bash

pid1=`docker inspect -f {{.State.Pid}} test1`

ln -s /proc/$pid1/ns/net /var/run/netns/test1

ip link add tap1 type veth peer name tapb1

ip link add name br1 type bridge

ip link set tapb1 master br1

ip link set tap1 netns test1

ip link set br1 up

ip link set tapb1  up

ip netns exec test1 ip link set tap1 up


在host2上:

docker run -itd --net=none --privileged=true --name=test2 ubu /bin/bash

pid2=`docker inspect -f {{.State.Pid}} test2`

ln -s /proc/$pid2/ns/net /var/run/netns/test2

ip link add tap2 type veth peer name tapb2

ip link add name br2 type bridge

ip link set tapb2 master br2

ip link set tap2 netns test2

ip link set br2 up

ip link set tapb2  up

ip netns exec test2 ip link set tap2 up

2.设置ip,并添加默认路由

在host1上:

ip netns exec test1 ip addr add 30.0.1.1/24 dev tap1

ip addr add 30.0.1.2/24 dev br1

ip netns exec test1 ip route add default via 30.0.1.2


在host2上:

ip netns exec test2 ip addr add 30.0.2.1/24 dev tap2

ip addr add 30.0.2.2/24 dev br2

ip netns exec test2 ip route add default via 30.0.2.2

3.添加规则,同外界通信

在host1上:

iptables -A FORWARD -i br1 ! -o br1 -j ACCEPT

iptables -A FORWARD -o br1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

iptables -t nat -A POSTROUTING -s 30.0.1.0/24 ! -o br1 -j MASQUERADE


在host2上:

iptables -A FORWARD -i br2 ! -o br2 -j ACCEPT

iptables -A FORWARD -o br2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

iptables -t nat -A POSTROUTING -s 30.0.2.0/24 ! -o br2 -j MASQUERADE

此时已打通各容器和对应主机的通信,有两种方式来使不同主机容器间通信 (重启容器网络设备都没了)

一、路由表及防火墙方式


1.主机添加路由规则

host1:

route add  -net 30.0.2.0 netmask 255.255.255.0 gw 192.168.90.13

host2:

route add  -net 30.0.1.0 netmask 255.255.255.0 gw 192.168.90.91

2.主机添加NAT表规则(非必须命令)

host1:

iptables -t -nat -F POSTROUTING

iptables -t nat -A POSTROUTING -s 30.0.1.0/24 ! -d 30.0.0.0/16 -j MASQUERADE

host2:

iptables -t -nat -F POSTROUTING

iptables -t nat -A POSTROUTING -s 30.0.2.0/24 ! -d 30.0.0.0/16 -j MASQUERADE

二、点对点vxlan方式


建立如图网络配置,注意此时容器在同一网段

host1:

ip link add vxlan1 type vxlan id 10 remote 192.168.90.13 dstport 4789 dev enp0s31f6

ip link set vxlan1 up

ip link set vxlan1 master br1


host2:

ip link add vxlan1 type vxlan id 10 remote 192.168.90.91 dstport 4789 dev enp0s31f6

ip link set vxlan1 up

ip link set vxlan1 master br2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容