本文档介绍如何使用Open vSwitch允许两个位于不同宿主机的虚拟机通过基于端口的GRE隧道进行通信。

注意:

本指南介绍配置GRE隧道所需的步骤。相同的方法可用于配置Open vSwitch支持的任何其它隧道协议。

在这里插入图片描述

建立

本指南假设环境配置如下所述。

两个物理网络

  • 传输网络
    以太网网络,用于运行OVS的主机之间的隧道通信。取决于正在使用的隧道协议(本文使用GRE),可能需要修改物理交换机的一些配置(例如,需要调整MTU值)。物理交换设备的配置不在本文的讨论范围内。

  • 管理网络

    严格来说,这个网络是不需要的,但它是一个简单的方法为物理主机提供远程访问的IP地址,因为IP地址不能直接分配给作为OVS网桥成员的物理接口。

两个物理主机

当前环境假定使用两个名为host1host2的主机。两个主机都是运行Open vSwitch的hypervisor。每台主机都有两个NIC,eth0和`eth1``,配置如下:

  • eth0连接到传输网络。eth0的IP地址用于通过传输网络与主机2通信。

  • eth1连接到管理网络。eth1的IP地址用于到达进行管理的物理主机。

四个虚拟机

每个主机将运行两个虚拟机(VM)。vm1vm2运行在主机host1,而vm3vm4运行在host2

每个虚拟机都有一个在物理主机上显示为Linux设备(如tap0)的单一接口。

注意:
对于Xen/XenServer,VM接口以Linux设备的形式出现,名称类似与vif1.0。其它Linux系统可能会将这些接口显示为vnet0vnet1等。

配置步骤

在开始之前,你需要确保知道分配到host1host2上的eth0接口的IP地址,因为在配置过程中需要用到。

host1上执行以下配置。

#. 创建OVS网桥:

   $ ovs-vsctl add-br br0

注意:

  你不需要添加`eth0`到OVS网桥下.

#. 启动host1主机上的vm1vm2. 如果这两个虚拟机没有自动关联到OVS,关联他们到你刚刚创建的OVS网桥上 (以下的命令假定 tap0 对应 vm1 以及 tap1 对应 vm2)::

   $ ovs-vsctl add-port br0 tap0
   $ ovs-vsctl add-port br0 tap1

#. 添加一个GRE隧道端口:

   $ ovs-vsctl add-port br0 gre0 \
       -- set interface gre0 type=gre options:remote_ip=<IP of eth0 on host2>

使用相同的基本步骤,在host2主机上创建镜像配置:

#. 创建OVS网桥, 但是不在网桥上添加任何物理接口:

   $ ovs-vsctl add-br br0

#. 启动host2主机上的vm3vm4, 如果需要将他们的接口添加到OVS网桥(再次, tap0 对应于 vm3 以及 tap1 对应于 vm4)::

   $ ovs-vsctl add-port br0 tap0
   $ ovs-vsctl add-port br0 tap1

#. 在host2上创建GRE隧道接口, 这次在指定remote_ip远端IP地址时,使用host1上``eth0`接口的IP地址:

   $ ovs-vsctl add-port br0 gre0 \
     -- set interface gre0 type=gre options:remote_ip=<IP of eth0 on host1>

测试

无论虚拟机是否在同一主机上或不同主机上运行,四个虚拟机直接的PING操作都应正常工作。

使用ip route show(或等效命令),在虚拟机内部运行的操作系统的路由表不应显示主机使用的IP子网的任何信息,仅显示在虚拟机操作系统中配置的IP子网。为了帮助说明这一点,最好在客户虚拟机中使用与主机系统完全不同的IP子网。

排错

如果不同主机上的虚拟机之间的连接不能工作,请检查以下项目:

  • 确保host1host2通过eth0的网络连接(连接到传输网络的NIC)。这可能需要使用额外的IP路由或IP路由规则。

  • 确保host1上的gre0指向host2上的eth0,并且host2上的gre0指向’host1’上的eth0

  • 确保所有虚拟机都被分配了同一子网中的IP地址;此配置中不需要IP路由功能。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐