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)中传输

你可能感兴趣的:(docker 跨主机通信方案)