linux 内核从3.7之后就内部集成了vxlan功能,所以Docker可以使用linux内核提供的vxlan驱动,经过配置创建vxlan网络。
而从Docker自Docker Engine 1.9之后,就自带overlay网络的驱动了,也才有了可以直接使用docker create network命令创建overlay类型的网络
在这里我们除了创建单纯的vxlan网络,我们可以手动模拟overlay驱动,利用namespace自己创建overlay网络,这里会遇到很多坑,但对于学习vxlan甚至是linux网络知识都很有帮助。
另外,受环境所限这里我只试验了点对点类型的vxlan网络,但对于理解vxlan往还是够用啦
0,在某两家云服务供应商上买了2台计算云,centos 7,这样的环境稍显复杂,因为计算云的机器都是绑定的VIP,其自身接口的ip都是小网ip,互相不认识的小网ip......
master节点 minion节点
VIP: 188.x.x.113 ---中间网络------ 106.y.y.3
IP(eth0): 172.21.0.3 172.16.0.4
MAC(eth0): 52:54:00:6b:df:04 fa:16:3e:a8:1f:98
1,linux内核版本越高越好,如果不够,可以用如下命令进行升级
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y
2, 安装必要的工具,比如
ln -s /var/run/docker/netns/ /var/run/netns
所谓点对点vxlan网络,表示每个vtep只有一个伙伴,它只与这个伙伴建立一个隧道。
【实操】
master:
//创建一个vxlan类型的接口作为vtep,vxlan id即VNI为200,指定隧道的另一端ip为minion的VIP,建立隧道的物理接口为eth0
ip link add vxlan20 type vxlan id 200 dstport 4789 remote 106.y.y.3 dev eth0
ip addr add 10.20.1.2/24 dev vxlan20
ip link set vxlan20 up
minion:
ip link add vxlan20 type vxlan id 200 remote 188.x.x.113 dstport 4789 dev eth0 ip addr add 10.20.1.3/24 dev vxlan20 ip link set vxlan20 up
【验证】#ping 10.20.1.3 OK的,抓包也可以看到经过vxlan封装的报文
【解析】:
此种情况属于vtep之间的直接通信,arp包和icmp包都被vtep即vxlan20进行了vxlan封装。
这部分的实验很有必要,可以说明一点,我的linux内核是支持vxlan的。这很重要,因为在开始我就使用多namespace + veth pair方式搭建环境,但总是不通,查了好多资料都说是版本问题,所以我这才舍弃自己的虚拟机上花钱购买了计算云,然后又是升级内核版本等等....
直到这种最简单方式的情况下发现是OK的,我才意识到,我解决问题的方向早就偏了....
【实操】
master:
ip link add vxlan10 type vxlan id 100 remote 106.y.y.3 dstport 4789 dev eth0
ip link add br-vx type bridge
ip link set vxlan10 master br-vx
ip link set vxlan10 up
ip link set br-vx up
ip netns add ns100
ip link add veth10 type veth peer name veth11
ip link set dev veth10 master br-vx
ip link set dev veth10 up
ip link set dev veth11 netns ns100
ip netns exec ns100 ip addr add 10.20.0.10/24 dev veth11
ip netns exec ns100 ip link set dev veth11 up
ip netns exec ns100 ip link set lo up
minion:
ip link add vxlan10 type vxlan id 100 remote 188.x.x.113 dstport 4789 dev eth0
ip link add br-vx type bridge
ip link set vxlan10 master br-vx
ip link set vxlan10 up
ip link set br-vx up
ip netns add ns100
ip link add veth10 type veth peer name veth11
ip link set dev veth10 master br-vx
ip link set dev veth10 up
ip link set dev veth11 netns ns100
ip netns exec ns100 ip addr add 10.20.0.11/24 dev veth11
ip netns exec ns100 ip link set veth11 up
ip netns exec ns100 ip link set lo up
【爬坑系列】之vxlan网络实现与Docker的overlay网络
原文:https://www.cnblogs.com/shuiguizi/p/10923841.html