Overlay网络是一种在现有物理网络(Underlay)之上构建的虚拟网络,通过隧道技术(如VXLAN)将二层/三层数据封装在IP报文中,实现跨物理主机的虚拟机或容器通信。其核心组件包括:
Vagrant是一款轻量级虚拟机管理工具,通过配置文件(Vagrantfile)快速创建、配置多台虚拟机,常用于开发环境的搭建与测试。两者结合的核心场景是:在Vagrant管理的多台虚拟机上部署Overlay网络,实现虚拟机或容器间的跨主机通信。
首先,通过Vagrant创建多台虚拟机(如node-1、node-2),并确保它们处于同一物理网络(如通过路由器分配IP)。示例Vagrantfile配置:
Vagrant.configure("2") do |config|
config.vm.define "node-1" do |node|
node.vm.box = "centos/7"
node.vm.network "private_network", ip: "192.168.2.15"
end
config.vm.define "node-2" do |node|
node.vm.box = "centos/7"
node.vm.network "private_network", ip: "192.168.2.16"
end
end
执行vagrant up启动虚拟机,通过vagrant ssh node-1进入节点,验证网络连通性(ping 192.168.2.16)。
Overlay网络需要控制平面维护主机可达性与隧道信息,常用工具为etcd(分布式键值存储)。在node-1上安装并配置etcd:
# 下载并解压etcd
wget https://github.com/etcd-io/etcd/releases/download/v3.3.12/etcd-v3.3.12-linux-amd64.tar.gz
tar -xvf etcd-v3.3.12-linux-amd64.tar.gz
sudo mv etcd-v3.3.12-linux-amd64/etcd* /usr/local/bin/
# 启动etcd服务
sudo systemctl start etcd
sudo systemctl enable etcd
通过etcdctl设置集群信息(如节点角色):
etcdctl put /overlay/nodes/node-1 '{"ip":"192.168.2.15","role":"master"}'
etcdctl put /overlay/nodes/node-2 '{"ip":"192.168.2.16","role":"worker"}'
在每台虚拟机上创建VXLAN接口(以node-1为例),并关联etcd中的控制信息:
# 添加VXLAN接口(VNI=1024,远程VTEP=192.168.2.16,本地接口=enp0s8)
sudo ip link add vxlan0 type vxlan id 1024 dstport 4789 remote 192.168.2.16 dev enp0s8
# 为VXLAN接口分配IP(Overlay网络段,如10.100.1.0/24)
sudo ip addr add 10.100.1.15/24 dev vxlan0
# 启动接口
sudo ip link set vxlan0 up
重复上述步骤在node-2上创建VXLAN接口(远程VTEP改为192.168.2.15),确保两端隧道互通。
在node-1的Overlay网络中添加路由,指向10.100.1.0/24网段:
sudo ip route add 10.100.1.0/24 dev vxlan0
通过ping或curl测试跨主机通信(如在node-1上ping 10.100.1.16,或在容器中访问另一节点的容器IP)。
若需在Overlay网络上运行容器,需配置Docker使用Overlay网络驱动。以node-1为例:
# 修改Docker配置文件(/etc/docker/daemon.json),添加etcd配置
echo '{
"cluster-store": "etcd://192.168.2.15:2379",
"cluster-advertise": "192.168.2.15:2375"
}' | sudo tee /etc/docker/daemon.json
# 重启Docker服务
sudo systemctl restart docker
# 创建Overlay网络(名称为overlay-net)
docker network create -d overlay overlay-net
在overlay-net网络中启动容器(如flask-app、redis),容器将自动通过Overlay隧道通信。
sudo sysctl -w net.ipv4.ip_forward=1),并允许UDP 4789端口(VXLAN默认端口)通信;通过以上步骤,可实现Vagrant管理的虚拟机与Overlay网络的配合使用,满足跨主机容器/虚拟机通信的需求。