使用 libvirt / openvswitch 在两台主机和两台虚拟机之间设置私有网络
Setup private networking between two hosts and two VMs with libvirt / openvswitch
我有两个节点和两个虚拟机
kvm01
-nic1 123.123.123.1
VM1
-vnet1 123.123.123.2 (public) -vnet2 10.0.0.1 (private)
kvm02
-nic1 123.123.123.2
VM2
-vnet1 123.123.123.4 (public) -vnet2 10.0.0.2 (private)
如何设置 openvswitch 网络,使 VM1 和 VM2 在专用网络上,但主机位于两个不同的位置?
编辑:
运行 这个命令:
# ovs-vsctl add-port br-private vxlan1 -- \
set Interface vxlan1 type=vxlan options:remote_ip=123.123.123.2
导致此 OVS 配置:
root@backup01:~# ovs-vsctl show
6276bd0a-920b-469d-a4e0-90d990dd8f94
Bridge "br-private1"
Port "vxlan1"
Interface "vxlan1"
type: vxlan
options: {remote_host="107.150.29.72"}
Port "br-private1"
Interface "br-private1"
type: internal
ovs_version: "2.3.0"
root@kvmssd01:~# ovs-vsctl show
da6399d4-1435-437d-90d7-3e75c443389b
Bridge br-private
Port "vxlan1"
Interface "vxlan1"
type: vxlan
options: {remote_host="107.150.29.68"}
Port br-private
Interface br-private
type: internal
ovs_version: "2.3.0"
使用这个内核:
root@backup01:~# uname -r
3.16.0-4-amd64
有了这个模块:
root@backup01:~# modinfo openvswitch
filename: /lib/modules/3.16.0-4-amd64/kernel/net/openvswitch/openvswitch.ko
license: GPL
description: Open vSwitch switching datapath
depends: libcrc32c,vxlan,gre
intree: Y
vermagic: 3.16.0-4-amd64 SMP mod_unload modversions
而这个版本的 OVS:
root@backup01:~# ovs-vsctl --version
ovs-vsctl (Open vSwitch) 2.3.0
Compiled Dec 19 2014 03:59:10
DB Schema 7.6.0
导致这些错误:
root@backup01:~# ovs-vswitchd logs
2015-07-23T16:34:59Z|00001|reconnect|INFO|logs: connecting...
2015-07-23T16:34:59Z|00002|reconnect|INFO|logs: connection attempt failed
(Address family not supported by protocol)
2015-07-23T16:34:59Z|00003|reconnect|INFO|logs: waiting 1 seconds before reconnect
2015-07-23T16:35:00Z|00004|reconnect|INFO|logs: connecting...
2015-07-23T16:35:00Z|00005|reconnect|INFO|logs: connection attempt failed
(Address family not supported by protocol)
2015-07-23T16:35:00Z|00006|reconnect|INFO|logs: waiting 2 seconds before reconnect
lsmod
输出:
# lsmod | grep openvswitch
openvswitch 63932 0
gre 12777 1 openvswitch
vxlan 35053 1 openvswitch
libcrc32c 12426 1 openvswitch
一种选择是在两台主机上的 OVS 网桥之间建立 VXLAN 隧道。
创建 OVS 桥
在每台主机上,创建一个 OVS 网桥,供私有网络使用:
ovs-vsctl add-br br-private
当您创建 libvirt VM 时,将每个来宾上的 vnet2
附加到 br-private
网桥。使用 virt-install
这看起来像:
virt-install ... -w bridge=br-private,virtualport_type=openvswitch
如果您使用其他机制创建来宾,则相应的 XML 如下所示:
<interface type='bridge'>
< source bridge='br-private'/>
< virtualport type='openvswitch'/>
< /interface>
正在创建 VXLAN 隧道
现在创建一个从 kvm01
到 kvm02
的 VXLAN 隧道。在 kvm01
:
ovs-vsctl add-port br-private vxlan1 -- \
set Interface vxlan1 type=vxlan options:remote_ip=123.123.123.2
在 kvm02
上:
ovs-vsctl add-port br-private vxlan1 -- \
set Interface vxlan1 type=vxlan options:remote_ip=123.123.123.1
有了这条隧道并且您的访客已连接到 br-private
,
您已经创建了一个跨越多个主机的虚拟网络。
请注意,VXLAN 在 UDP 端口 4789 上运行,因此您可能需要修改防火墙配置以允许这些连接。
完成的 OVS 配置将如下所示:
# ovs-vsctl show
ac885d3d-b636-4bb1-a75e-37f361af87e3
Bridge br-private
Port "vxlan1"
Interface "vxlan1"
type: vxlan
options: {remote_ip="192.168.122.107"}
Port br-private
Interface br-private
type: internal
Port vnet2
Interface vnet2
ovs_version: "2.3.2"
...虽然当然使用您的主机 IP 地址,而不是我测试环境中的这个地址。
我有两个节点和两个虚拟机
kvm01
-nic1 123.123.123.1
VM1
-vnet1 123.123.123.2 (public) -vnet2 10.0.0.1 (private)
kvm02
-nic1 123.123.123.2
VM2
-vnet1 123.123.123.4 (public) -vnet2 10.0.0.2 (private)
如何设置 openvswitch 网络,使 VM1 和 VM2 在专用网络上,但主机位于两个不同的位置?
编辑:
运行 这个命令:
# ovs-vsctl add-port br-private vxlan1 -- \
set Interface vxlan1 type=vxlan options:remote_ip=123.123.123.2
导致此 OVS 配置:
root@backup01:~# ovs-vsctl show
6276bd0a-920b-469d-a4e0-90d990dd8f94
Bridge "br-private1"
Port "vxlan1"
Interface "vxlan1"
type: vxlan
options: {remote_host="107.150.29.72"}
Port "br-private1"
Interface "br-private1"
type: internal
ovs_version: "2.3.0"
root@kvmssd01:~# ovs-vsctl show
da6399d4-1435-437d-90d7-3e75c443389b
Bridge br-private
Port "vxlan1"
Interface "vxlan1"
type: vxlan
options: {remote_host="107.150.29.68"}
Port br-private
Interface br-private
type: internal
ovs_version: "2.3.0"
使用这个内核:
root@backup01:~# uname -r
3.16.0-4-amd64
有了这个模块:
root@backup01:~# modinfo openvswitch
filename: /lib/modules/3.16.0-4-amd64/kernel/net/openvswitch/openvswitch.ko
license: GPL
description: Open vSwitch switching datapath
depends: libcrc32c,vxlan,gre
intree: Y
vermagic: 3.16.0-4-amd64 SMP mod_unload modversions
而这个版本的 OVS:
root@backup01:~# ovs-vsctl --version
ovs-vsctl (Open vSwitch) 2.3.0
Compiled Dec 19 2014 03:59:10
DB Schema 7.6.0
导致这些错误:
root@backup01:~# ovs-vswitchd logs
2015-07-23T16:34:59Z|00001|reconnect|INFO|logs: connecting...
2015-07-23T16:34:59Z|00002|reconnect|INFO|logs: connection attempt failed
(Address family not supported by protocol)
2015-07-23T16:34:59Z|00003|reconnect|INFO|logs: waiting 1 seconds before reconnect
2015-07-23T16:35:00Z|00004|reconnect|INFO|logs: connecting...
2015-07-23T16:35:00Z|00005|reconnect|INFO|logs: connection attempt failed
(Address family not supported by protocol)
2015-07-23T16:35:00Z|00006|reconnect|INFO|logs: waiting 2 seconds before reconnect
lsmod
输出:
# lsmod | grep openvswitch
openvswitch 63932 0
gre 12777 1 openvswitch
vxlan 35053 1 openvswitch
libcrc32c 12426 1 openvswitch
一种选择是在两台主机上的 OVS 网桥之间建立 VXLAN 隧道。
创建 OVS 桥
在每台主机上,创建一个 OVS 网桥,供私有网络使用:
ovs-vsctl add-br br-private
当您创建 libvirt VM 时,将每个来宾上的 vnet2
附加到 br-private
网桥。使用 virt-install
这看起来像:
virt-install ... -w bridge=br-private,virtualport_type=openvswitch
如果您使用其他机制创建来宾,则相应的 XML 如下所示:
<interface type='bridge'>
< source bridge='br-private'/>
< virtualport type='openvswitch'/>
< /interface>
正在创建 VXLAN 隧道
现在创建一个从 kvm01
到 kvm02
的 VXLAN 隧道。在 kvm01
:
ovs-vsctl add-port br-private vxlan1 -- \
set Interface vxlan1 type=vxlan options:remote_ip=123.123.123.2
在 kvm02
上:
ovs-vsctl add-port br-private vxlan1 -- \
set Interface vxlan1 type=vxlan options:remote_ip=123.123.123.1
有了这条隧道并且您的访客已连接到 br-private
,
您已经创建了一个跨越多个主机的虚拟网络。
请注意,VXLAN 在 UDP 端口 4789 上运行,因此您可能需要修改防火墙配置以允许这些连接。
完成的 OVS 配置将如下所示:
# ovs-vsctl show
ac885d3d-b636-4bb1-a75e-37f361af87e3
Bridge br-private
Port "vxlan1"
Interface "vxlan1"
type: vxlan
options: {remote_ip="192.168.122.107"}
Port br-private
Interface br-private
type: internal
Port vnet2
Interface vnet2
ovs_version: "2.3.2"
...虽然当然使用您的主机 IP 地址,而不是我测试环境中的这个地址。