如何将OVN虚拟网络连接到外部网络?

译者简介:郑敏先,就职于诺云系统(上海)有限公司。工作地点为南京的诺云研发中心。担任解决方案工程师。

概览

基于我的前2篇文章中的实验环境,我现在将一个OVN网关路由器(OVN Gateway Router)添加进来。 此网关路由器将提供从我们的overlay网络访问实验室物理网络的功能。

实验环境

为了演示网关路由器,我们需要向Ubuntu主机添加另一个物理网络:在每台主机eth1网卡添加网络10.127.0.128/25。
最终的物理网络拓扑如下图所示。

OVN L3 Gateway介绍

OVN网关用作overlay网络和物理网络之间的上行/下行通道。它有两个功能:

  • L2将OVN逻辑交换机桥接到VLAN中;
  • L3在OVN路由器和物理网络之间提供三层链路。

为了达成实验的目标,我们将重点介绍如何创建一个三层网关,其会作为我们的物理网络和逻辑网络之间的分界点。
与分布式逻辑路由器(DLR)不同,OVN网关路由器集中在单个主机(chassis)上,因此它可以提供尚不支持分布式的服务(NAT,负载平衡等)。

但是OVN网关发布的时候,还存在着某些限制:

  • 网关路由器仅可以经由逻辑交换机连接到其他路由器,而DLR已经可以经由一条链路直连路由器。社区正在进行相关工作来解决掉这个限制。
  • OVN支持多个网关路由器绑定到环境中,这意味着可以逻辑空间执行入站ECMP路由。然而,OVN当前不支持网关路由器之间的出站ECMP。这个特性也同样是OVN未来需要加强的。

使ubuntu1成为OVN主机

我们使用ubuntu1作为OVN网关路由器主机,而不是虚拟机。

首先为相应主机角色安装正确的OVN包:

然后注册到OVN Central(ubuntu1自身):

测试网络连通性:

此外,如果OVN没有自动创建集成网桥,还需要手工创建集成网桥:

OVN 逻辑网络设计

让我们在开始配置之前看一下为本次实验设计的网络架构。

我们创建的OVN逻辑网络拓扑如下图所示:

正如您所看到的,我们添加了以下新组件:

  • OVN网关路由器(edge1)
  • 逻辑交换机(transit),用于连接edge1和tenant1路由器
  • 逻辑交换机(outside),用于将edge1连接到实验室网络

添加L3 Gateway

如上图所述,gatway路由器将绑定到一个特定的 chassis(在我们的例子中是ubuntu1)。 为了完成这个绑定,我们需要找到ubuntu1的 chassis ID。 使用ubuntu1中的ovn-sbctl show命令,您应该能看到类似于此的输出:

复制ubuntu1主机的chassis UUID供下文使用。

创建新的逻辑路由器。 请务必使用有效的UUID替换{chassis_id}。

在ubuntu1进行如下操作:

注意ubuntu1主机上的端口绑定。
现在可以测试从ubuntu2上的vm1到edge1的网络连通性:

连接到 “data”网络

我们将使用ubuntu1的eth1接口作为我们在edge1路由器和“数据”网络之间的连接点。 为了实现这一点,我们需要将OVN设置为通过专用OVS桥直接使用eth1接口。 这种类型的连接在OVN中称为“localnet”。

在ubuntu1进行如下操作:

从vm1测试到edge1-outside的网络连通性

让Ubuntu主机访问“data”网络

对于ubuntu2 / ubuntu3,实际上只需要配置一个参数:给它们的物理网卡(本文中的eth1)设置一个IP。

对于ubuntu1,我们将在br-eth1接口上设置一个IP。

在ubuntu1上:

在ubuntu2上:

在ubuntu3上:

在ubuntu1 上测试到 edge1的网络连通性

配置NAT

让我们看看从vm1 ping ubuntu1时会发生什么:

不出所料,这不工作。 为什么不行? 让我们看一下来自ubuntu1的tcpdump的输出结果:

我们可以看到请求进来,但是我们的响应通过不同的接口返回(在tcpdump输出中看不到)。

这是因为ubuntu1没有到172.16.255.130的路由,并且通过其自己的默认网关进行响应。

我们有2种方法来解决这个问题:

  • 在Ubuntu主机上添加静态路由
  • 在OVN网关路由器上设置NAT

我们将选择第2种方法,因为它比管理静态路由更容易些。

OVN有3种类型的NAT可以配置:

  • DNAT ——用于将请求从外部可见的IP转换为内部IP
  • SNAT ——用于将请求从一个或多个内部IP转换为外部可见的IP
  • SNAT-DNAT ——用于创建“静态NAT”,将外部IP映射到内部IP,反之亦然

由于我们不需要(或希望)公共网络能够直接访问我们的内部虚拟机,因此我们将重点放在允许从我们的虚拟机进行出站SNAT。 为了创建NAT规则,我们需要直接操纵OVN北向数据库。 语法有点奇怪,但我稍后会解释的。

在ubuntu1上:

简而言之,此命令在北向数据库的“nat”表中创建一个条目,再将同时产生的UUID存储在ovsdb的变量“@nat”中。

然后将存储在@nat中的UUID添加到北向数据库的“logical_router”表中的“edge1”条目的“nat”字段。

如果你想知道北向数据库的细节,那么一定要去查阅ovn-nb的手册页。ovn-nbctl的手册页还解释了上面使用的命令语法。

从vm1测试网络连通性:

如上所示,我们现在可以从内部虚拟机ping通外部网络。

结语

overlay网络几乎是完全没有用的,除非你能将它们连接到外部世界。 OVN网关提供用于进行这种连接的手段。在下一篇文章中,我将介绍OVN的另一个重要功能:OVN负载均衡器。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/19216.html
分享到:
相关文章
条评论

登录后才可以评论

zhengmx100 发表于17-05-15
0