docke跨主机通信之gre隧道
GRE简介
GRE可以对网络层的任何协议来进行封装,类似LVS的IPIP协议,在原有的数据报上增加GRE协议数据报。然后在网络上传输,到达对端后,解开GRE数据报头,得到真实的数据报。其中的mac地址也不会因为在网络上传输而丢失原来的源mac地址。
实验环境
selinux disabled
iptables -t nat -F;iptables -F
主机 | docker0地址 | 物理机地址 |
---|---|---|
docker1 | 172.17.0.1 | 192.168.88.130 |
docker2 | 172.18.0.1 | 192.168.88.131 |
拓扑图
实验步骤
-
安装openvswitch
- yum install gcc make python-devel openssl-devel kernel-devel graphviz kernel-debug-devel autoconf automake rpm-build redhat-rpm-config libtool
- 构建RPM包:rpmbuild -bb rhel/openvswitch.spec
- rpm -ihv openvswitch-2.5.0-1.x86_64.rpm
-
启动openvswitch:service openvswitch start
-
添加ovs网桥: ovs-vsctl add-br ovs0
-
构建gre隧道: ovs-vsctl add-port ovs0 gre0 -- set interface gre0 type=gre options:remote_ip=192.168.88.131 #对端物理机网络
-
ovs0桥接到docker0上: brctl addif docker0 ovs0
-
启动网卡:
- ip link set dev ovs0 up
- ip link set dev docker0 up
-
添加路由:route add -net 172.18.0.0/16 dev docker0 #对端docker0网络
测试
docker run -it centos /bin/bash
ping 对端container的IP