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

栏目: 服务器 · 发布时间: 7年前

内容简介:如何配置集成容器的OVN网络?

概览

接着我的上一篇文章,本文讨论的主题是集成的容器的OVN。 在本实验结束时,我们将创建一个容器主机“VM”(虚拟机),其中包含一对容器。 这些容器将直接绑定到OVN逻辑交换机中,并且可以直接从逻辑网络内的所有虚拟机访问。

OVN 容器网络模型

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

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

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

下图描述了这种设计:

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

当前环境信息

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

物理网络拓扑:

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

OVN 逻辑网络拓扑:

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

定义逻辑网络

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

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

root@ubuntu1:~# ovn-nbctl list DHCP_Options 
_uuid               : 7e32cec4-957e-46fa-a4cc-34218e1e17c8 
cidr                : "172.16.255.192/26" 
external_ids        : {} 
options             : {lease_time="3600", router="172.16.255.193", server_id="172.16.255.193", server_mac="02:ac:10:ff:01:93"} 
  
_uuid               : c0c29381-c945-4507-922a-cb87f76c4581 
cidr                : "172.16.255.128/26" 
external_ids        : {} 
options             : {lease_time="3600", router="172.16.255.129", server_id="172.16.255.129", server_mac="02:ac:10:ff:01:29"} 

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

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

在ubuntu1上执行:

ovn-nbctl lsp-add dmz dmz-vm5 
ovn-nbctl lsp-set-addresses dmz-vm5 "02:ac:10:ff:01:32 172.16.255.132" 
ovn-nbctl lsp-set-port-security dmz-vm5 "02:ac:10:ff:01:32 172.16.255.132" 
ovn-nbctl lsp-set-dhcpv4-options dmz-vm5 {uuid} 

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

在ubuntu1上进行如下操作:

# 创建逻辑端口c51 
ovn-nbctl lsp-add dmz dmz-c51 
ovn-nbctl lsp-set-addresses dmz-c51 "02:ac:10:ff:01:33 172.16.255.133" 
ovn-nbctl lsp-set-port-security dmz-c51 "02:ac:10:ff:01:33 172.16.255.133" 
ovn-nbctl lsp-set-dhcpv4-options dmz-c51 {uuid} 
  
#设置c51的父逻辑端口和vlan tag 
ovn-nbctl set Logical_Switch_Port dmz-c51 parent_name=dmz-vm5 
ovn-nbctl set Logical_Switch_Port dmz-c51 tag=51 
  
#创建逻辑端口c52 
ovn-nbctl lsp-add dmz dmz-c52 
ovn-nbctl lsp-set-addresses dmz-c52 "02:ac:10:ff:01:34 172.16.255.134" 
ovn-nbctl lsp-set-port-security dmz-c52 "02:ac:10:ff:01:34 172.16.255.134" 
ovn-nbctl lsp-set-dhcpv4-options dmz-c52 {uuid} 
  
#设置c52的父逻辑端口和vlan tag 
ovn-nbctl set Logical_Switch_Port dmz-c52 parent_name=dmz-vm5 
ovn-nbctl set Logical_Switch_Port dmz-c52 tag=52 

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

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

root@ubuntu1:~# ovn-nbctl find Logical_Switch_Port name="dmz-c51" 
_uuid               : ea604369-14a9-4e25-998f-ec99c2e7e47e 
addresses           : ["02:ac:10:ff:01:31 172.16.255.133"] 
dhcpv4_options      : c0c29381-c945-4507-922a-cb87f76c4581 
dhcpv6_options      : [] 
dynamic_addresses   : [] 
enabled             : [] 
external_ids        : {} 
name                : "dmz-c51" 
options             : {} 
parent_name         : "dmz-vm5" 
port_security       : ["02:ac:10:ff:01:31 172.16.255.133"] 
tag                 : 51 
tag_request         : [] 
type                : "" 
up                  : false 

配置 vm5

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

配置完成之后就是下图:

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

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

第一步是创建vm5。

在ubuntu2主机上进行如下操作:

#为vm5创建网桥 
ovs-vsctl add-br br-vm5 
  
#在br-vm5上创建到br-int的patch端口 
ovs-vsctl add-port br-vm5 brvm5-brint -- set Interface brvm5-brint type=patch options:peer=brint-brvm5 
  
#在br-int上创建到br-vm5 patch端口。 因为与vm5的连接的,所以将外部id设置为dmz-vm5。 
ovs-vsctl add-port br-int brint-brvm5 -- set Interface brint-brvm5 type=patch options:peer=brvm5-brint 
ovs-vsctl set Interface brint-brvm5 external_ids:iface-id=dmz-vm5 
  
#在命名空间中创建vm5。 vm5流量将被进行untag操作 
ovs-vsctl add-port br-vm5 vm5 -- set interface vm5 type=internal 
ip link set vm5 address 02:ac:10:ff:01:32 
ip netns add vm5 
ip link set vm5 netns vm5 
ip netns exec vm5 dhclient vm5 

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

root@ubuntu2:~# ip netns exec vm5 ping 172.16.255.129 
PING 172.16.255.129 (172.16.255.129) 56(84) bytes of data. 
64 bytes from 172.16.255.129: icmp_seq=1 ttl=254 time=0.797 ms 
64 bytes from 172.16.255.129: icmp_seq=2 ttl=254 time=0.509 ms 
64 bytes from 172.16.255.129: icmp_seq=3 ttl=254 time=0.404 ms 

配置“容器”

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

#在命名空间中创建c51。 c51流量将打上vlan 51的tag 
ip netns add c51 
ovs-vsctl add-port br-vm5 c51 tag=51 -- set interface c51 type=internal 
ip link set c51 address 02:ac:10:ff:01:33 
ip link set c51 netns c51 
ip netns exec vm5 dhclient c51 
  
#在命名空间中创建c52。 c52流量将打上vlan 52的tag 
ip netns add c52 
ovs-vsctl add-port br-vm5 c52 tag=52 -- set interface c52 type=internal 
ip link set c52 address 02:ac:10:ff:01:34 
ip link set c52 netns c52 
ip netns exec c52 dhclient c52 

测试网络连通性:

root@ubuntu2:~# ip netns exec c51 ping 172.16.255.129 
PING 172.16.255.129 (172.16.255.129) 56(84) bytes of data. 
64 bytes from 172.16.255.129: icmp_seq=1 ttl=254 time=1.33 ms 
64 bytes from 172.16.255.129: icmp_seq=2 ttl=254 time=0.420 ms 
64 bytes from 172.16.255.129: icmp_seq=3 ttl=254 time=0.371 ms 
  
root@ubuntu2:~# ip netns exec c52 ping 172.16.255.129 
PING 172.16.255.129 (172.16.255.129) 56(84) bytes of data. 
64 bytes from 172.16.255.129: icmp_seq=1 ttl=254 time=1.53 ms 
64 bytes from 172.16.255.129: icmp_seq=2 ttl=254 time=0.533 ms 
64 bytes from 172.16.255.129: icmp_seq=3 ttl=254 time=0.355 ms 

结语

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

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

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

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JavaScript & jQuery

JavaScript & jQuery

David Sawyer McFarland / O Reilly / 2011-10-28 / USD 39.99

You don't need programming experience to add interactive and visual effects to your web pages with JavaScript. This Missing Manual shows you how the jQuery library makes JavaScript programming fun, ea......一起来看看 《JavaScript & jQuery》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

SHA 加密
SHA 加密

SHA 加密工具