如何配置集成容器的OVN网络?

OVN 容器网络模型

根据官方的OVN架构文档,OVN的容器网络选择使用VLAN Trunk作为连接到容器主机VM的方式,并要求来自每个容器的流量被隔离在一个唯一的VLAN内。这也意味着在OVN和容器主机之间必须对VLAN信息进行同步,以确保它们在同一时间给特定容器使用哪个VLAN tag。通过这种方式,它对容器主机施加了一定程度的控制,以确保主机上的容器被相互隔离。

我把OVN实现步骤细分为三步:

  • 创建一个连接主机VM的逻辑端口。
  • 为容器定义逻辑端口,将它们映射到“父”虚拟机逻辑端口,并定义要使用的VLAN tag。
  • OVN配置OVS流,将被VLAN标记的流量从“父”虚拟机的逻辑端口映射到目标容器的逻辑端口。

下图描述了这种设计:

当前环境信息

在开始之前,请花点时间看一下当前环境信息。

物理网络拓扑:

OVN 逻辑网络拓扑:

定义逻辑网络

在本次实验中,我将创建一个新的伪“虚拟机”,vm5,它将托管我们的伪“容器”。新虚拟机将接入到现有的DMZ交换机,和vm1和vm2相邻。 我们将对新虚拟机及其容器使用DHCP。在为vm5创建逻辑端口之前,我们需要查看在上一篇文章中为DMZ网络创建的DHCP选项。 我们将直接查询OVN北向数据库以获取此DHCP选项相关信息。

我这个实验环境的输出结果是:

我们获取到了192.16.255.128/26”网络的UUID(在我的环境是c0c29381-c945-4507-922a-cb87f76c4581)。 捕获此UUID以在稍后的命令中使用。

让我们为vm5创建逻辑端口。 你现在应该对这些命令不陌生了。 请务必将{uuid}替换为上述DHCP选项条目中的UUID。

在ubuntu1上执行:

现在我们将为在vm5上运行的容器创建逻辑端口。 此过程几乎与创建正常的逻辑端口相同,需要注意有几个新的命令。

在ubuntu1上进行如下操作:

因此,唯一的区别是为容器逻辑端口设置了一个parent_name和vlan tag。 您可以通过查看数据库条目来验证这些。

我这个实验环境的输出结果是:

配置 vm5

关于这个实验的第一件事情是,我们没有使用真正的虚拟机,而是直接在Ubuntu主机上把ovs内部端口模拟成虚拟机。 对于vm1,vm2,vm3和vm4,我们直接在br-int上创建这些内部端口,但对于vm5,我们的实验要求有点不同,因此我们将使用专用的ovs网桥。 这个br-vm5的网桥不会由OVN管理,并且将模拟真实的容器主机VM内部的ovs网桥。 此网桥将为VM及其容器提供本地网络连接,并将执行VLAN tagging。

配置完成之后就是下图:

我的实验配置很简单,我把容器都放在同一个逻辑交换机上。然而没有要求必须这样做,其实我可以将容器逻辑端口放置在任一台逻辑交换机上。

第一步是创建vm5。 
在ubuntu2主机上进行如下操作:

通过ping vm5的默认网关来验证网络连通性:

配置“容器”

现在vm5已经启动了,我们可以配置它的伪“容器”。 除了vlan相关配置之外,它们看起来几乎完全和我们的伪“虚拟机”们一模一样。

测试网络连通性:

结语

如果按照ovn官方架构文档,直接在虚拟机管理程序上运行容器,或者直接用patch端口连接到集成网桥,那么在网络规模特别大的情况下,OVN系统可能会崩溃。

“嵌套”网络解决方案是很好的,因为它大大减少了集成桥上的VIF的数量,从而最小化容器本身的性能损失。

最后再说明一下,本实验的重点不是建立一个完全真实的容器环境,而是展示OVN的内置的容器网络功能集。

原文地址:https://www.cnblogs.com/liuhongru/p/11121832.html