overlay network base on linux virtual VXLan switch.
This is a toy used to learn VXLAN.
Virtual Extensible LAN (VXLAN) is a network virtualization technology that attempts to address the scalability problems associated with large cloud computing deployments. It uses a VLAN-like encapsulation technique to encapsulate OSI layer 2 Ethernet frames within layer 4 UDP datagrams.
VTEP
implementaionpacket encpasulates is not enought for L2 over L3. VXLan device need to implement the following features.
those features refered as VTEP
(VXLAN endpoints, which terminate VXLAN tunnels and may be either virtual or physical switch ports, are known as VXLAN tunnel endpoints (VTEPs)).
there are some variations of VETP
implementation, we use local agent and virtual VXLan switch run on Linux servers.
VTEP
in this project.Create the vxlan device, Then as each remote host is discovered (either on startup or when they are added), do the following
In this scheme the scaling of table entries is linear to the number of remote hosts - 1 route, 1 arp entry and 1 FDB entry per host.
use etcd
as the key-value store to exchange information when remote host status changed(add, delete, update, etc...).
get the lastest release binary.
Run
sudo ./vxlan -etcdEndpoint http://etcd:2379
you will get log similar to the following.
INFO[0000] Determining IP address of default interface
INFO[0000] Using interface with name eth0 and address 10.146.0.3
INFO[0000] Defaulting external address to interface address (10.146.0.3)
INFO[0000] VXLAN device already exists
INFO[0000] Returning existing device
INFO[0000] subnet key expired in: 2018-02-25 09:23:53.467058164 +0000 UTC
INFO[0000] create subnet: 10.10.238.0, net mask: 24
INFO[0000] MTU: 1410
INFO[0000] VXLan HardwareAddr: 1a:0f:87:98:5e:c7
INFO[0000] Running backend.
INFO[0000] adding subnet: 10.5.10.0/24 PublicIP: 10.140.0.3 VtepMAC: f6:ad:73:33:de:0b
INFO[0000] calling AddARP: 10.5.10.0, f6:ad:73:33:de:0b
INFO[0000] calling AddFDB: 10.140.0.3, f6:ad:73:33:de:0b
Docker daemon accepts --bip argument to configure the subnet of the docker0 bridge. It also accepts --mtu to set the MTU for docker0 and veth devices that it will be creating.
use subnet
and MTU
in log
INFO[0000] create subnet: 10.10.238.0, net mask: 24
INFO[0000] MTU: 1410
instead of 10.10.238.0/24
use 10.10.238.1/24
as the ip of the docker0 bridge.
dockerd --bip=${10.10.238.1/24} --mtu=1410 &
ip link
and see the vxlan section for more details.