容器跨主机通信

容器跨主机通信

1、macvlan方式

场景1:

容器分配在docker管理的vlan中无法与宿主机互通,无法上外网,只能与同vlan中容器通信

一个macvlan只能绑定一个物理接口

环境信息:192.167.86.5,192.168.86.7

192.167.86.5操作如下:

docker network create -d macvlan --subnet=172.18.1.0/24 --gateway=172.18.1.1 -o parent=eth0 macvlan_net

docker run -itd --name test-1 --net macvlan_net --ip=172.18.1.10 alpine:latest

参数解释:
-d macvlan 指定创建网络类型
--subnet= 指定子网
-gateway 指定网关
-o parent=eth0 指定宿主机物理接口
macvlan_net 创建子网
192.167.86.7操作如下:

docker network create -d macvlan --subnet=172.18.1.0/24 --gateway=172.18.1.1 -o parent=eth0 macvlan_net

docker run -itd --name test-2 --net macvlan_net --ip=172.18.1.20 alpine:latest

测试:

docker exec -it test-1 ping 172.18.1.20
docker exec -it test-1 ping 192.168.86.7
docker exec -it test-1 ping baidu.com

docker exec -it test-2 ping 172.18.1.10
docker exec -it test-1 ping 192.168.86.5
docker exec -it test-1 ping baidu.com

清理测试环境

docker rm -f test-1
docker rm -f test-2
 docker network rm macvlan_net

场景2:
环境信息:192.167.86.5,192.168.86.7
设置macvlan子网和宿主机完全同网段,容器和同网段其他设备互通,但是无法和宿主机互通(走的是本地的路由器)

192.168.86.5操作如下:
docker network create -d macvlan --subnet=192.168.86.0/24 --gateway=192.168.86.2 -o parent=eth0 macvlan_host_net

docker run -itd --name test-1 --net macvlan_host_net --ip=192.168.86.111 alpine:latest
192.168.86.7操作如下:
docker network create -d macvlan --subnet=192.168.86.0/24 --gateway=192.168.86.2 -o parent=eth0 macvlan_host_net

docker run -itd --name test-2 --net macvlan_host_net --ip=192.168.86.111 alpine:latest

测试:

docker exec -it test-1 ping 192.168.86.111
docker exec -it test-1 ping 192.168.86.7
docker exec -it test-1 ping baidu.com

docker exec -it test-2 ping 192.168.86.222
docker exec -it test-2 ping 192.168.86.5
docker exec -it test-2 ping baidu.com
2、多macvlan

场景:192.168.86.5、192.168.86.7
1、192.168.86.5操作

1、创建vlan id为50的vlan
ip link add link eth0 name eth0.50 type vlan id 50
ip addr 可以查看到vlan相关接口

2、docker创建macvlan网络(物理接口为vlanid的网卡eth0.50)

docker network create -d macvlan --subnet=172.99.0.0/24 --gateway=172.99.0.1 -o parent=eth0.50 macvlan_net99

docker run -itd --name test-1 --net macvlan_net99  --ip=172.99.0.88 alpine:latest

2、192.168.86.7操作

1、创建vlan id为50的vlan
ip link add link eth0 name eth0.50 type vlan id 50
ip addr 可以查看到vlan相关接口

2、docker创建macvlan网络(物理接口为vlanid的网卡eth0.50)

docker network create -d macvlan --subnet=172.99.0.0/24 --gateway=172.99.0.1 -o parent=eth0.50 macvlan_net99

docker run -itd --name test-2 --net macvlan_net99  --ip=172.99.0.99 alpine:latest
三、openvswitch方式

环境:centos7 192.168.86.5(172.17.1.1/24)、192.168.86.7(172.17.2.1/24)

每台机器都操作
1、修改docker默认网段
cat /etc/docker/daemon.json
{
  "bip":"172.17.1.1/24"
}
cat /etc/docker/daemon.json
{
  "bip":"172.17.2.1/24"
}

2、安装openvswitch
yum install wget openssl-devel  python-sphinx gcc make python-devel openssl-devel kernel-devel graphviz kernel-debug-devel autoconf automake rpm-build redhat-rpm-config libtool python-twisted-core python-zope-interface PyQt4 desktop-file-utils libcap-ng-devel groff checkpolicy selinux-policy-devel gcc-c++ python-six unbound unbound-devel -y

wget https://www.openvswitch.org/releases/openvswitch-2.11.0.tar.gz
mkdir -p ~/rpmbuild/SOURCES
mv openvswitch-2.11.0.tar.gz rpmbuild/SOURCES/
cd rpmbuild/SOURCES/
tar -xf openvswitch-2.11.0.tar.gz
rpmbuild -bb --nocheck openvswitch-2.11.0/rhel/openvswitch-fedora.spec

 yum -y localinstall rpmbuild/RPMS/x86_64/openvswitch-2.11.0-1.el7.x86_64.rpm

systemctl start openvswitch.service
systemctl enable openvswitch.service
ovs-vsctl --version

3、创建网桥并激活
ovs-vsctl add-br br0
ip link set dev br0 up
192.168.86.5操作

4、将gre虚拟接口接入网桥br0,并设置接口类型和对端ip地址(远程ip地址指定对端)
ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.86.7

5、添加docker0网桥到ovs网桥br0
yum -y install bridge-utils 
brctl addif docker0 br0

6、添加静态路由
ip route add 172.17.0.0/16 dev docker0
192.168.86.7操作

7、将gre虚拟接口接入网桥br0,并设置接口类型和对端ip地址(远程ip地址指定对端)
ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.86.5

8、添加docker0网桥到ovs网桥br0
brctl addif docker0 br0

9、添加静态路由
ip route add 172.17.0.0/16 dev docker0

10、验证互通
11、工作原理
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值