docker 跨主机通信方案
[toc]
retference
https://www.jianshu.com/p/92c9945ac861
https://segmentfault.com/a/1190000011406037
https://blog.csdn.net/qq_15800363/article/details/78712262
https://www.cnblogs.com/goldsunshine/p/13630767.html
https://www.cnblogs.com/CaesarLinsa/p/12901330.html
1. 添加路由
ip route add 172.17.1.0/24 via 192.168.1.179 dev eth0
2. 通过ovs打隧道
实例
server1 192.168.1.79
server2 192.168.1.179
container1 10.0.1.1
container2 10.0.1.2
第一步: 两台机器都做,ovs接管网卡,并且挪入新建的桥中
ovs-vsctl add-br br-int
ovs-vsctl add-port br-int eth0
ifconfig br-int 192.168.1.179 netmask 255.255.255.0 # 这里地址和掩码与eth0的配置一致
ifconfig br-int up
ifconfig eth0 0.0.0.0
route add default gw 192.168.1.1
第二步,相互创建创建vxlan隧道,remoteip 写对端
ovs-vsctl add-port br-int vx1 -- set interface vx1 type=vxlan options:remote_ip=192.168.1.79
第三步,不同server分别启动容器79和179,并配置ip,然后ping
docker run -itd \
--network='none' \
--name="t79" \
--privileged \
busybox /bin/sh
ovs-docker add-port br-int eth0 ihep --ipaddress=10.0.1.1/24
docker run -itd \
--network='none' \
--name="t179" \
--privileged \
busybox /bin/sh
ovs-docker add-port br-int eth0 ihep --ipaddress=10.0.1.2/24
docker run -it t79 ping 10.0.1.2
vxlan 和 gre的区别:
vxlan 是把二层信息封装到了udp包中,多了50字节的包长度;14以太网+20ip头+8udp头+8vxlan头;gre是把二层信息封装到了ip包的payload中
vxlan
VXLAN概念:Virtualextensible Local Area Network,虚拟扩展局域网。IETF定义NVO3标准技术之一,采用MAC-in-UDP报文封装模式,通过将二层报文使用三层协议封装实现二层网络在三层范围内扩展,满足数据中心大二层虚拟机迁移和多租户需求;VXLAN技术可以基于三层网络结构来构建二层虚拟网络,通过VLAN技术可以将处于不同网段网络设备整合在同一个逻辑链路层网络中,对于终端用户而言,这些网络设备似乎“真实地”部署在了同一个链路层网络中。
gre
GRE(Generic Routing Encapsulation):通用路由封装协议。定义了在一种网络层协议上封装另一种协议(或同一种协议)。例如:对某些网络层协议(如IP和IPX)的数据报进行封装,使这些被封装的数据报能够在另一个网络层协议(如IP)中传输