🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质:CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥🎈支持我:可点赞👍、可收藏⭐️、可留言📝
📜模块化层2 (ML2)简介
模块化层2 (ML2)插件是一个支持使用各种技术的框架。例如,管理员可以使用OpenStack网络可用的各种插拔与Open vSwitch(一种提供虚拟交换的技术)或Cisco设备进行交互。
📑ML2驱动程序和网络类型
ML2框架简化了对第2层(L2)网络技术的支持。该框架创建了一个抽象层,它将网络类型的管理与用于访问这些网络的机制分离开来。该框架允许多个机制驱动程序同时访问相同的网络。ML2的实现允许公司和制造商开发他们自己的插件
ML2插件目前包括以下网络类型的驱动程序:
-
flat:flat网络是不支持配置的网络。传统的第二层以太网是flat网络。连接到flat网络的服务器侦听广播流量,并可以相互联系。在OpenStack术语中,flat网络将实例连接到现有的第2层网络或提供者网络。
-
VLAN:VLAN网络使用VLAN进行配置。VLAN标识符(ID)被分配给每个网络。从OpenStack网络配置中定义的范围中选择ID。管理员必须配置网络交换机以中继相应的vlan。
-
GRE 和 VXLAN :这些网络类似于VLAN网络。GRE和VXLAN是封装网络流量的覆盖网络。两个网络都接收一个唯一的虚拟网络标识符(VNI)。但是不同于vlan,覆盖网络不需要OpenStack环境和第二层交换机之间的任何同步。
-
Geneve:Geneve(通用网络虚拟化封装)解决了其他网络类型的限制。Geneve只定义了一种封装格式。与所有其他网络类型不同,它不包括任何控制平面的规范。所有封装的数据包都使用标准的网络设备转发。像VLAN, GRE和VXLAN网络,Geneve网络接收一个唯一的隧道标识符(VIN)。隧道端点之间只进行通信。Geneve是OVN的默认隧道程序。
📜开放虚拟网络(OVN)简介
OVN是一个开源项目,由开放vSwitch团队发起。其想法是为虚拟交换的虚拟化创建一个供应商中立的协议。它提供了2层和3层联网,而其他软件定义网络(SDN)解决方案通常只提供2层或3层。OVN允许安全组的实现,包括DHCP服务,L3路由和NAT,在Red Hat OpenStack中,OVN独家使用了Geneve隧道覆盖网络。
OVN是Red Hat OpenStack的默认SDN解决方案。它将OVS ML2驱动器和neutron代理替换为OVN ML2驱动器。到OVN的过渡是自然而无缝的,因为它继承了OpenStack中已经实现的现有的Open vSwitch技术。与其他SDN解决方案相比,可扩展性得到改善,因为它不使用neutron代理。相反,它使用ovn-controller和OVS流来实现所有功能。它连接到vm和容器,而不提供物理网络资源,这有助于提高性能。
📑OVN架构
使用OVN ML2插件将OpenStack网络配置转换为OVN逻辑网络配置。插件在控制节点上运行。
OVN北行(NB)数据库存储逻辑OVN网络配置,它从OVN ML2插接中获得该配置。插拔在控制节点上运行,并监听TCP端口6641。
OVN向北服务将逻辑网络配置从OVN NB数据库转换为逻辑路径流。ovn-northd使用逻辑路径流填充向南的OVN数据库。服务在控制节点上运行。
OVN南行(SB)数据库监听6642端口。ovn-controller连接到南向的数据库,控制和监控网络流量。这个服务在定义OS::Tripleo::Services::OVNController的所有计算和网关节点上运行。
OVN元数据代理生成HAProxy实例。这些实例管理OVS接口、网络命名空间和HAProxy进程。它运行在定义OS::TripleO:Sservices::OVNMetadataAgent的所有计算和网关节点上。
📑OVN数据库
OVN数据库安装在一个中央位置。数据库可以安装在物理节点、虚拟节点或集群上。位置的选择取决于各种因素,包括云基础设施的大小、云的地理分布、通信量和所需的性能。管理程序必须运行Open vSwitch, OVN才能工作。
OVN数据库包括两个部分:向北的数据库和向南的数据库。北行数据库从neutron插件接收关于逻辑网络配置的信息。它有两个客户端,neutron插入和ovn-northd。ovn-northd客户端连接到OVN向北的数据库和OVN向南的数据库。它将逻辑网络配置转化为逻辑数据路径流并存储在OVN南向数据库中。
OVN南行数据库是整个系统的中心。它还有两个客户端,ovn-northd和ovn-controller服务。每个虚拟机监控程序都有自己的ovn-controller。数据库包含三种类型的数据:
-
指定如何到达云上节点的物理网络表。
-
指定逻辑数据路径的逻辑网络表。
-
将逻辑网络组件的位置连接到物理网络的绑定表。
物理网络表和绑定表由管理程序填充。逻辑网络表由ovn-northd填充。
📑OVN和OpenFlow
在Red Hat OpenStack中,OVN是通过OpenFlow协议管理的。OpenFlow协议用于对Open vSwitch管道进行编程,因此定义了应该如何处理网络流量。存在一系列流表,其中每个流都有一个优先级、一个匹配项和一组操作。优先级最高的流将首先执行。OpenFlow能够动态重写流表,允许根据需要添加和删除网络函数。
📑OVN逻辑流
手工编程OpenFlow管道或流是一项乏味的任务。在OpenStack环境中手工创建它们将非常复杂、耗时,而且很难日常管理。一个SDN控制器,如OVN,自动创建跨所有交换机和网络组件的流。OVN还负责实现安全策略。
逻辑流与OpenFlow非常相似。他们有优先级、匹配和行动。逻辑流还描述了整个网络的详细行为。OVN以逻辑流创建整个网络,这些流分布到每个虚拟机监控程序上的ovn-controller。每个ovn-controller将逻辑流转换为OpenFlow流,详细说明如何到达其他管理程序。
OVN定义了逻辑交换机和端口,其中创建了一个入口和一个出口管道。假设目的地在同一个管理程序上,则执行出口管道。如果目的地在另一个管理程序上,则通过Geneve隧道发送数据包,并在远程主机上执行出口管道。
使用ovs-vsctl list open命令查找ovn-remote参数的IP地址。必须设置OVN_SB_DC环境变量才能使用OVN命令。设置环境变量,然后使用ovn-sbctl lflow-list命令查看逻辑流。
📜比较 ML2/OVS 两个 ML2/OVN
ML2使用OVS和ML2使用OVN之间有很多区别。这些差异会影响管理员执行各种任务的方式。这些更改在故障排除过程中尤其重要。OpenFlow规则管理传出和传入流量、安全策略实现、DHCP和NAT,这意味着规则的数量比OVS增加了很多。
📑关键的不同点
组件 | ML2/OVS | ML2/OVN |
---|---|---|
代理/服务器 互联 | 使用RabbitMQ消息传递后端 | 使用了ovsdb协议 |
L3HA 数据平面 | 通过创建grouter命名空间实现 | ovn-controller设置OpenFlow规则 |
DVR API | “分布式”标志可以由管理员修改 | 所有流量都是分布式的。 |
DVR数据平面 | 由命名空间、veth对和iptables规则组成。 | 由计算节点上的OpenFlow规则组成。 |
东/西 流量 | 当DVR关闭时,流量通过网络节点路由 | 流量在所有情况下都是分布的 |
元数据服务 | 控制器节点上的DHCP命名空间支持。 | 在ovnmeta-xxx命名空间内的所有计算节点上运行。 |
DHCP服务 | 由dhcp-xxx命名空间提供,在每个命名空间内运行一个dnsmasq进程。 | 使用ovn-controller解释的OpenFlow规则,并分布在所有计算节点上 |
📜OVN网关路由器
OVN网关连接覆盖到物理网络,由ovn-northd管理。有两种方法可以将覆盖网络连接到物理网络。使用第二层桥接一个OVN逻辑交换机到一个VLAN,或在第三层提供一个连接OVN路由器和物理网络。
📑OVN有三种NAT:
-
DNAT:改变了数据包的目的地址
-
SNAT:改变了一个包的源地址
-
SNAT-DNAT:外部IP映射到内部IP,反之亦然。
OVN OpenFlow流管理所有类型的NAT。使用ovn-sbctl lflow-list命令来查看相关的流。每个创建的虚拟机都有SNAT和DNAT流。
注意,inport和outport参数对应于一个路由器端口用于provider-datacentre网络。使用ovn-nbctl lr-nat-list-neutron-54a04000-17ea-44df-8c79-d18164e6a1f2命令列出特定路由器上的NATs。
使用ovn-nbctl Ir-list命令列出路由器。
📜安全组介绍
安全组和安全规则过滤发送到或从OpenStack网络端口接收的网络流量的类型和方向。对安全组的支持由OVN和OpenStack neutron执行。
注意:默认情况下,该组删除所有入站流量,并允许所有出站流量。
📑实现安全组
在OpenStack的早期版本中,OVS和ML2使用iptables规则实现了对安全组的支持。iptables规则只能应用于Linux网桥,因此vm使用tap设备连接到Linux网桥,然后Linux网桥使用veth对连接到OVS网桥。这些额外的层导致了更复杂的体系结构。
为了在OVS中实现了防火墙而删除这些额外的层。然而,OVS的设计只是为了支持无状态匹配,而防火墙需要数据包的状态。要在OVS中实现防火墙,必须支持有状态匹配。Linux中的conntrack模块被整合到OVS中以提供有状态匹配。这个模块也被iptables使用,用于跟踪所有连接。该模块不执行策略,而是关心连接是否是新的、已建立的或相关的。它将连接的状态添加到包的元数据中,从而允许OVS对有状态流量执行无状态匹配。
与之前版本的OVS一样,流量进入OVS流表。但是,要实施安全策略,OVS现在需要更多的信息,特别是数据包相对于现有连接的状态。新的OpenFlow扩展向conntrack模块发送一个动作,在那里连接的状态被添加到包和连接跟踪表中。然后包被发送回OVS流表,其中包含连接状态,并根据OpenFlow流执行安全策略。
📑Conntrack集成
-
流量进入OVN。
-
数据包被发送到conntrack模块进行处理。
-
数据包元数据用状态信息更新。
-
包连同元数据中包含的状态信息返回给OVN。
连接跟踪器可以包含多个区域,处理重叠的网络;例如,租户网络。每个区域包含自己的连接跟踪器表。
使用ovn命令查看安全组实现的OpenFlow流。使用ovn-vsctl list open命令来查找OVN DB的IP地址。为北部和南部数据库设置环境变量。
使用ovn-nbctl来查看逻辑拓扑。请注意列出的端口,特别是provider-datacentre。物理拓扑显示了绑定到OpenStack环境的逻辑端口。
列出OpenStack网络。注意,在两个输出中,provider-datacentre的ID是相同的。
要理解实现安全组的逻辑流,请列出OpenStack服务器和OpenStack端口。使用ovn-sbctl lflow-list命令列出OpenFlow规则。找到TCP安全规则的OpenFlow清单。
在来自ovn-sbctl lflow-list命令的相同输出中,查找ICMP协议的OpenFlow流。
要查看特定网络的所有安全规则,首先使用ovn-nbctl ls-list命令列出所有现有的交换机。找到网络的ID,然后使用ovn-nbctl acl-list neutron-2fa7885c-c49d-452d-8501-3cbo2582ebf4命令列出安全规则
注意:如果没有连接到网络的虚拟机,那么网络将不包含任何安全规则。规则仅在创建第一个虚拟机时应用。如果从网络中删除了虚拟机,OVN会自动删除该虚拟机的所有规则。
📜OVN DHCP
OVN实现了DHCPv4支持,从而消除了对DHCP代理的需要。虚拟网络不再需要DHCP命名空间或dnsmasq进程。要使用DHCP特性,必须将ovn_native_dhcp参数设置为True。DHCPv4选项在运行ovn-controller的每个计算节点上都是一致的。这意味着DHCP支持是完全分布的。来自vm的DHCP请求也由ovn-controller处理。
在OVN向北的DB上的DHCP选项表存储DHCP选项。如果enable_dhcp选项设置为True,那么在创建子网时,数据库将创建一个新条目。存储在options列中的DHCPv4选项包括ovn-controller在接收到DHCPv4请求时发送的应答。
ovn-northd服务为定义DHCP选项的每个逻辑端口添加逻辑流。它向入口管道添加了两个阶段:ls_ in_dhcp_options和Is_in_dhcp_response。每个单独的实例都存在逻辑流。put_dhcp_opts操作将DHCP请求转换为应答。通过put_dhcp_opts OVN操作,无效数据包保持不变。
ovs-vswitchd向ovn-controller发送一个DHCP请求包。ovn-controller提取IP和DHCP选项,帧应答,并将数据包发送回交换机。接收到数据包后,ovs-vswitchd执行下一条管道: Is_in_dhcp_response。flag.loopback = 1流发送DHCP包到VM端口。
📜OVN负载均衡
OVN负载均衡提供基本的负载均衡服务。它使用基于散列的算法来均衡请求。均衡看起来是随机的,因为散列是使用客户机请求的头计算的。在连接期间,单个客户端的请求由相同的负载均衡器处理。负载均衡应用于逻辑交换机或逻辑路由器。
如果OVN负载均衡器应用于逻辑路由器,则该路由器必须是网关路由器。这意味着负载均衡是一个集中的服务。
如果将OVN负载均衡器应用于逻辑交换机,那么将分配负载均衡器,因为它应用于多个OVS主机。在这种情况下,只评估来自VIF的入口流量,这意味着它必须应用于客户端逻辑交换机。在大规模环境中OVN负载均衡器必须应用于多个逻辑交换机。OVN负载均衡器也是使用OpenFlow流实现的。
📜OVN元数据
名为neutron-ovn-metadata-agent的元数据代理在每个控制节点上运行。这个代理启动HAProxy实例。HAProxy实例管理OVS接口、网络命名空间和HAProxy进程。neutron-ovn-metadata-agent也是HAProxy和Nova元数据API服务之间的连接。HAProxy在元数据APl请求中添加头信息,并将其转发给neutron-ovn-metadata-agent代理。
实例通过静态路由到达元数据命名空间。这些实例将流量定向到169.254.169.254,但是流量被重定向到该网络元数据端口的IP地址。
neutron-ovn-metadata-agent代理确保元数据代理正在运行。它还监视向南的数据库的端口绑定表。对于将底盘列设置为正在运行代理的主机的条目,neutron-ovn-metadata-agent代理确保一个元数据代理实例正在运行neutron网络数据路径,记录所有代理运行的网络。这是通过更新南向数据库中的neutron-metadata-proxy-networks密钥来实现的。不再需要的任何元数据代理都会被neutron-ovn-metadata-agent自动删除。
代理维护向北数据库的连接。当创建一个新的网络时,也会创建一个新的OVN本地端口。此本地端口充当元数据代理。当网络被移除时,本地端口也被移除。如果DHCP设置设置为False,则无论如何都会创建元数据端口(如果启用了元数据服务)。
📜课本练习
-
部署具有公共访问权的实例。
-
创建安全组规则并检查OpenFlow流以获取安全策略。
-
检查DHCP的OpenFlow规则
-
查看OpenFlow中的路由表。
[student@workstation ~]$ lab networking-ovn setup
Setting up workstation for lab exercise work:
• Verifying project: finance.................................. SUCCESS
• Creating user env file: developer1-finance-rc............... SUCCESS
• Creating keypair: example-keypair........................... SUCCESS
. Creating flavor: default.................................... SUCCESS
. Creating image: rhel7....................................... SUCCESS
. Creating internal network: finance-network1................. SUCCESS
. Creating subnet: finance-subnet1............................ SUCCESS
. Creating external network: provider-datacentre.............. SUCCESS
. Creating router: finance-router1............................ SUCCESS
. Creating security group: default............................ SUCCESS
. Creating security group rule: SSH........................... SUCCESS
. Creating security group rule ICMP: icmp..................... SUCCESS
📑1.作为developer1用户,确认finance-network1存在,并检查网络的安全组规则。
[student@workstation ~]$ source developer1-finance-rc
[student@workstation ~(developer1-finance)]$ openstack network list -c ID -c Name
+--------------------------------------+---------------------+
| ID | Name |
+--------------------------------------+---------------------+
| 7a6556ab-6083-403e-acfc-79caf3873660 | finance-network1 |
| d55f6d1e-c29e-4825-8de4-01dd95f8a220 | provider-storage |
| fc5472ee-98d9-4f6b-9bc9-544ca18aefb3 | provider-datacentre |
+--------------------------------------+---------------------+
[root@controller0 ~]# ovs-vsctl list open
_uuid : 6c237e8b-5014-42f1-9ac4-cc7728797597
bridges : [1d420f80-91e3-44ad-85ff-b311d90a7538, b1eb4d87-1b0b-4541-aca6-e9adefbe8172, b2474c7c-c50c-4a22-8826-f1f9233bf5ab, eb5acfd9-bc1c-444e-9045-8d48aa6d01c5, efed7252-c6fe-487c-a1bc-0b4e6ee9a6d3]
cur_cfg : 46
datapath_types : [netdev, system]
db_version : "7.15.1"
external_ids : {hostname="controller0.overcloud.example.com", ovn-bridge=br-int, ovn-bridge-mappings="datacentre:br-ex,vlanprovider1:br-eth3,vlanprovider2:br-eth4,storage:br-trunk", ovn-cms-options=enable-chassis-as-gw, ovn-encap-ip="172.24.2.1", ovn-encap-type=geneve, ovn-remote="tcp:172.24.1.50:6642", rundir="/var/run/openvswitch", system-id="85c87734-e866-4225-b305-471357c68b8a"}
iface_types : [geneve, gre, internal, lisp, patch, stt, system, tap, vxlan]
[root@controller0 ~]# export OVN_SB_DB=tcp:172.24.1.50:6642
[root@controller0 ~]# export OVN_NB_DB=tcp:172.24.1.50:6641
[root@controller0 ~]# ovn-nbctl ls-list
153db687-27fe-4f90-a3f0-2958c373dcc2 (neutron-7a6556ab-6083-403e-acfc-79caf3873660)
aca840be-670a-4eb3-9b36-4246c0eabb6c (neutron-9838d8ed-3e64-4196-87f0-a4bc59059be9)
b2cc3860-13f9-4eeb-b328-10dbc1f1b131 (neutron-d55f6d1e-c29e-4825-8de4-01dd95f8a220)
c5b32043-cd23-41ac-9197-ea41917870bb (neutron-e14d713e-c1f5-4800-8543-713563d7e82e)
f0f71887-2544-4f29-b46c-04b0aa0b2e52 (neutron-fc5472ee-98d9-4f6b-9bc9-544ca18aefb3)
[root@controller0 ~]# ovn-nbctl acl-list neutron-7a6556ab-6083-403e-acfc-79caf3873660
[root@controller0 ~]#
📑2. 在workstation终端上,作为developer1用户,创建一个名为finance-server1的新实例。
使用rhel7 镜像、默认风格、默认安全组和finance-network1网络。
[student@workstation ~(developer1-finance)]$ openstack server create --flavor default --image rhel7 --nic net-id=finance-network1 --security-group default --wait finance-server1
+-----------------------------+---------------------------------------------------------+
| Field | Value
+-----------------------------+---------------------------------------------------------+
| OS-DCF:diskConfig | MANUAL
| OS-EXT-AZ:availability_zone | nova
| OS-EXT-STS:power_state | Running
| OS-EXT-STS:task_state | None
| OS-EXT-STS:vm_state | active
| OS-SRV-USG:launched_at | 2020-10-27T15:30:29.000000
| OS-SRV-USG:terminated_at | None
| accessIPv4 |
| accessIPv6 |
| addresses | finance-network1=192.168.1.5
| adminPass | 7we6VaXXezF7
| config_drive |
| created | 2020-10-27T15:29:57Z
| flavor | default (e04380ed-b027-4a72-a697-4307bc014b6c)
| hostId | c439f7c83de10e6a305fc9bc9caefdef52c9f503e4aa5733eae8573c
| id | e997cf6c-67a7-4947-935f-d56abce814a9
| image | rhel7 (6b0128a9-4481-4ceb-b34e-ffe92e0dcfdd)
| key_name | None
| name | finance-server1
| progress | 0
| project_id | 3c003f65d8d64914a053f178fbbf953c
| properties |
| security_groups | name='default'
| status | ACTIVE
| updated | 2020-10-27T15:30:29Z
| user_id | e4035d555f6b88cf42ca4cacb9fa9999dca9787392222d2eb0875e4e34e6d76f
| volumes_attached |
+-----------------------------+---------------------------------------------------------+
📑3. 在controller0上,重新检查finance-network1网络交换机的安全策略。
在workstation上,列出与安全组规则相匹配的OpenFlow流的默认安全组的安全组规则。将inport和ourport参数匹配到各自的OpenStack实体
[student@workstation ~(developer1-finance)]$ openstack port list -c ID -c 'Fixed IP Addresses'
+--------------------------------------+------------------------------------------------+
| ID | Fixed IP Addresses
+--------------------------------------+------------------------------------------------+
| 3ad5f966-f682-4bc7-9f1e-2662cc2d950d | ip_address='192.168.1.1', subnet_id='4836a9dd-e01f-4a33-a971-fa49dec9ffd5' |
| 42671818-08d4-4a99-bd80-99a452ee40b3 | ip_address='192.168.1.2', subnet_id='4836a9dd-e01f-4a33-a971-fa49dec9ffd5' |
| 71467c2e-0460-4514-a6ce-e5885e60ccb3 | ip_address='192.168.1.5', subnet_id='4836a9dd-e01f-4a33-a971-fa49dec9ffd5' |
+--------------------------------------+------------------------------------------------+
[root@controller0 ~]# ovn-nbctl acl-list neutron-7a6556ab-6083-403e-acfc-79caf3873660
from-lport 1002 (inport == "71467c2e-0460-4514-a6ce-e5885e60ccb3" && ip4) allow-related
from-lport 1002 (inport == "71467c2e-0460-4514-a6ce-e5885e60ccb3" && ip4 && ip4.dst == {255.255.255.255, 192.168.1.0/24} && udp && udp.src == 68 && udp.dst == 67) allow
from-lport 1002 (inport == "71467c2e-0460-4514-a6ce-e5885e60ccb3" && ip6) allow-related
from-lport 1001 (inport == "71467c2e-0460-4514-a6ce-e5885e60ccb3" && ip) drop
to-lport 1002 (outport == "71467c2e-0460-4514-a6ce-e5885e60ccb3" && ip4 && ip4.src == $as_ip4_952467e9_b667_44ba_adb6_878c2e089308) allow-related
to-lport 1002 (outport == "71467c2e-0460-4514-a6ce-e5885e60ccb3" && ip4 && ip4.src == 0.0.0.0/0 && icmp4) allow-related
to-lport 1002 (outport == "71467c2e-0460-4514-a6ce-e5885e60ccb3" && ip4 && ip4.src == 0.0.0.0/0 && tcp && tcp.dst == 22) allow-related
to-lport 1002 (outport == "71467c2e-0460-4514-a6ce-e5885e60ccb3" && ip4 && ip4.src == 0.0.0.0/0 && tcp && tcp.dst == 443) allow-related
to-lport 1002 (outport == "71467c2e-0460-4514-a6ce-e5885e60ccb3" && ip4 && ip4.src == 0.0.0.0/0 && tcp && tcp.dst == 80) allow-related
to-lport 1002 (outport == "71467c2e-0460-4514-a6ce-e5885e60ccb3" && ip6 && ip6.src == $as_ip6_952467e9_b667_44ba_adb6_878c2e089308) allow-related
to-lport 1001 (outport == "71467c2e-0460-4514-a6ce-e5885e60ccb3" && ip) drop
[student@workstation ~(developer1-finance)]$ openstack security group rule list -f json
[
{
"IP Range": "0.0.0.0/0",
"Security Group": "952467e9-b667-44ba-adb6-878c2e089308",
"Port Range": "22:22",
"IP Protocol": "tcp",
"Remote Security Group": null,
"ID": "212e6328-edc5-4e54-ac11-6c7e18254328"
},
{
"IP Range": null,
"Security Group": "952467e9-b667-44ba-adb6-878c2e089308",
"Port Range": "",
"IP Protocol": null,
"Remote Security Group": null,
"ID": "24a91078-c261-4ec6-8f91-040044532cb1"
},
{
"IP Range": null,
"Security Group": "952467e9-b667-44ba-adb6-878c2e089308",
"Port Range": "",
"IP Protocol": null,
"Remote Security Group": "952467e9-b667-44ba-adb6-878c2e089308",
"ID": "40a2dbc0-2ec0-440d-b8df-ad69c6cedf0e"
},
{
"IP Range": "0.0.0.0/0",
"Security Group": "952467e9-b667-44ba-adb6-878c2e089308",
"Port Range": "443:443",
"IP Protocol": "tcp",
"Remote Security Group": null,
"ID": "6b8aa744-cd3a-449f-bdca-dc75d70b1621"
},
{
"IP Range": "0.0.0.0/0",
"Security Group": "952467e9-b667-44ba-adb6-878c2e089308",
"Port Range": "80:80",
"IP Protocol": "tcp",
"Remote Security Group": null,
"ID": "6de5bdd1-dc72-4c1c-af07-cd900c96ffa8"
},
{
"IP Range": null,
"Security Group": "952467e9-b667-44ba-adb6-878c2e089308",
"Port Range": "",
"IP Protocol": null,
"Remote Security Group": "952467e9-b667-44ba-adb6-878c2e089308",
"ID": "a6587b8a-4c6b-4b7c-a809-fb8da6fb8602"
},
{
"IP Range": null,
"Security Group": "952467e9-b667-44ba-adb6-878c2e089308",
"Port Range": "",
"IP Protocol": null,
"Remote Security Group": null,
"ID": "b125b62d-c9e0-44e6-a512-1b6da133f3cc"
},
{
"IP Range": "0.0.0.0/0",
"Security Group": "952467e9-b667-44ba-adb6-878c2e089308",
"Port Range": "",
"IP Protocol": "icmp",
"Remote Security Group": null,
"ID": "bcd0c999-dc5d-498c-8646-9c1faf9f5797"
}
]
📑4. 在finance-network1网络上创建第二个实例。在controller0节点上,列出安全规则流。
[student@workstation ~(developer1-finance)]$ openstack server create --flavor default --image rhel7 --nic net-id=finance-network1 --wait finance-server2
+-----------------------------+---------------------------------------------------------+
| Field | Value
+-----------------------------+---------------------------------------------------------+
| OS-DCF:diskConfig | MANUAL
| OS-EXT-AZ:availability_zone | nova
| OS-EXT-STS:power_state | Running
| OS-EXT-STS:task_state | None
| OS-EXT-STS:vm_state | active
| OS-SRV-USG:launched_at | 2020-10-27T15:44:42.000000
| OS-SRV-USG:terminated_at | None
| accessIPv4 |
| accessIPv6 |
| addresses | finance-network1=192.168.1.12
| adminPass | bsPAZRuFfA89
| config_drive |
| created | 2020-10-27T15:43:59Z
| flavor | default (e04380ed-b027-4a72-a697-4307bc014b6c)
| hostId | 3eb57302ddddc3af1fdc763eee541c699f0866f6458e3b5c9a722611
| id | 7a9ee0f5-1869-418f-9ae7-117d08a44499
| image | rhel7 (6b0128a9-4481-4ceb-b34e-ffe92e0dcfdd)
| key_name | None
| name | finance-server2
| progress | 0
| project_id | 3c003f65d8d64914a053f178fbbf953c
| properties |
| security_groups | name='default'
| status | ACTIVE
| updated | 2020-10-27T15:44:42Z
| user_id | e4035d555f6b88cf42ca4cacb9fa9999dca9787392222d2eb0875e4e34e6d76f
| volumes_attached |
+-----------------------------+---------------------------------------------------------+
[student@workstation ~(developer1-finance)]$ openstack port list -c ID -c 'Fixed IP Addresses'
+--------------------------------------+------------------------------------------------+
| ID | Fixed IP Addresses
+--------------------------------------+------------------------------------------------+
| 3ad5f966-f682-4bc7-9f1e-2662cc2d950d | ip_address='192.168.1.1', subnet_id='4836a9dd-e01f-4a33-a971-fa49dec9ffd5' |
| 42671818-08d4-4a99-bd80-99a452ee40b3 | ip_address='192.168.1.2', subnet_id='4836a9dd-e01f-4a33-a971-fa49dec9ffd5' |
| 71467c2e-0460-4514-a6ce-e5885e60ccb3 | ip_address='192.168.1.5', subnet_id='4836a9dd-e01f-4a33-a971-fa49dec9ffd5' |
| 9ce01db2-7b5d-4d3f-ac08-9541d7d8fbf1 | ip_address='192.168.1.12', subnet_id='4836a9dd-e01f-4a33-a971-fa49dec9ffd5' |
+--------------------------------------+------------------------------------------------+
[root@controller0 ~]# ovn-nbctl acl-list neutron-7a6556ab-6083-403e-acfc-79caf3873660
…………
to-lport 1002 (outport == "9ce01db2-7b5d-4d3f-ac08-9541d7d8fbf1" && ip4 && ip4.src == $as_ip4_952467e9_b667_44ba_adb6_878c2e089308) allow-related
to-lport 1002 (outport == "9ce01db2-7b5d-4d3f-ac08-9541d7d8fbf1" && ip4 && ip4.src == 0.0.0.0/0 && icmp4) allow-related
to-lport 1002 (outport == "9ce01db2-7b5d-4d3f-ac08-9541d7d8fbf1" && ip4 && ip4.src == 0.0.0.0/0 && tcp && tcp.dst == 22) allow-related
to-lport 1002 (outport == "9ce01db2-7b5d-4d3f-ac08-9541d7d8fbf1" && ip4 && ip4.src == 0.0.0.0/0 && tcp && tcp.dst == 443) allow-related
to-lport 1002 (outport == "9ce01db2-7b5d-4d3f-ac08-9541d7d8fbf1" && ip4 && ip4.src == 0.0.0.0/0 && tcp && tcp.dst == 80) allow-related
to-lport 1002 (outport == "9ce01db2-7b5d-4d3f-ac08-9541d7d8fbf1" && ip6 && ip6.src == $as_ip6_952467e9_b667_44ba_adb6_878c2e089308) allow-related
to-lport 1001 (outport == "71467c2e-0460-4514-a6ce-e5885e60ccb3" && ip) drop
to-lport 1001 (outport == "9ce01db2-7b5d-4d3f-ac08-9541d7d8fbf1" && ip) drop
…………
📑5. 在workstation上,在provider-datacentre网络上创建一个浮动IP地址。将浮动IP连接到finance-server1。
使用openstack server list命令验证添加了浮动IP地址。
[student@workstation ~(developer1-finance)]$ openstack network list
+--------------------------------------+---------------------+--------------------------+
| ID | Name | Subnets
+--------------------------------------+---------------------+--------------------------+
| 7a6556ab-6083-403e-acfc-79caf3873660 | finance-network1 | 4836a9dd-e01f-4a33-a971-fa49dec9ffd5 |
| d55f6d1e-c29e-4825-8de4-01dd95f8a220 | provider-storage | 6e5af9b0-67ef-4e1e-9eda-7d6633091d11 |
| fc5472ee-98d9-4f6b-9bc9-544ca18aefb3 | provider-datacentre | 30c03fa5-0897-426a-8c81-75cf9cc333f1 |
+--------------------------------------+---------------------+--------------------------+
[student@workstation ~(developer1-finance)]$ openstack floating ip create provider-datacentre
+---------------------+--------------------------------------+
| Field | Value |
+---------------------+--------------------------------------+
| created_at | 2020-10-27T15:51:12Z |
| description | |
| fixed_ip_address | None |
| floating_ip_address | 172.25.250.107 |
| floating_network_id | fc5472ee-98d9-4f6b-9bc9-544ca18aefb3 |
| id | 00799d8c-56cb-4c62-b238-1f5396231f66 |
| name | 172.25.250.107 |
| port_id | None |
| project_id | 3c003f65d8d64914a053f178fbbf953c |
| qos_policy_id | None |
| revision_number | 0 |
| router_id | None |
| status | DOWN |
| subnet_id | None |
| updated_at | 2020-10-27T15:51:12Z |
+---------------------+--------------------------------------+
[student@workstation ~(developer1-finance)]$ openstack server add floating ip finance-server1 172.25.250.107
[student@workstation ~(developer1-finance)]$ openstack server list -c ID -c Name -c Networks
+--------------------------------------+-----------------+------------------------------+
| ID | Name | Networks
+--------------------------------------+-----------------+------------------------------+
| 7a9ee0f5-1869-418f-9ae7-117d08a44499 | finance-server2 | finance-network1=192.168.1.12
| e997cf6c-67a7-4947-935f-d56abce814a9 | finance-server1 | finance-network1=192.168.1.5, 172.25.250.107
+--------------------------------------+-----------------+------------------------------+
📑6. 在controller0上,列出用于路由的OpenFlow流,并查看finance-network1网络交换机的路由表。
在controller0上,使用ovn-nbctl show命令来显示向北数据库内容的简要概述。。
在controller0上,使用ovn-sbctl lflow-list命令列出流。找到finance-server1的SNAT和DNAT流。找到路由流的最简单方法是将ovn-sbctl命令的输出重定向到一个文件。打开文件并使用搜索功能。请注意,浮动IP地址和内部IP地址都有OpenFlow规则。
[root@controller0 ~]# ovn-sbctl lflow-list > flow.txt
[root@controller0 ~]# less flow.txt
table=3 (lr_in_unsnat ), priority=100 , match=(ip && ip4.dst == 172.25.250.106 && inport == "l
rp-c88f518d-fac0-448f-9876-a40f469b00e9" && is_chassis_resident("cr-lrp-c88f518d-fac0-448f-9876-a40f469
b00e9")), action=(ct_snat;)
table=3 (lr_in_unsnat ), priority=100 , match=(ip && ip4.dst == 172.25.250.107 && inport == "l
rp-c88f518d-fac0-448f-9876-a40f469b00e9"), action=(ct_snat;)
………..
table=4 (lr_in_dnat ), priority=100 , match=(ip && ip4.dst == 172.25.250.107 && inport == "l
rp-c88f518d-fac0-448f-9876-a40f469b00e9"), action=(ct_dnat(192.168.1.5);)
table=4 (lr_in_dnat ), priority=50 , match=(ip && ip4.dst == 172.25.250.107), action=(reg9[
0] = 1; next;)
table=4 (lr_in_dnat ), priority=0 , match=(1), action=(next;)
………
table=0 (lr_out_undnat ), priority=100 , match=(ip && ip4.src == 192.168.1.5 && outport == "lrp
-c88f518d-fac0-448f-9876-a40f469b00e9"), action=(eth.src = fa:16:3e:85:3b:1b; ct_dnat;)
table=0 (lr_out_undnat ), priority=0 , match=(1), action=(next;)
table=1 (lr_out_snat ), priority=33 , match=(ip && ip4.src == 192.168.1.5 && outport == "lrp
-c88f518d-fac0-448f-9876-a40f469b00e9"), action=(eth.src = fa:16:3e:85:3b:1b; ct_snat(172.25.250.107);)
从上一步使用的SNAT或DNAT提取中,注意finance-server1使用的lrp inport和outport。在controller0上,使用ovn-nbctl show命令列出向北的数据库的内容。
[root@controller0 ~]# ovn-nbctl show
switch f0f71887-2544-4f29-b46c-04b0aa0b2e52 (neutron-fc5472ee-98d9-4f6b-9bc9-544ca18aefb3) (aka provider-datacentre)
port provnet-fc5472ee-98d9-4f6b-9bc9-544ca18aefb3
type: localnet
addresses: ["unknown"]
port c88f518d-fac0-448f-9876-a40f469b00e9
type: router
router-port: lrp-c88f518d-fac0-448f-9876-a40f469b00e9
port d3a97fff-95de-447c-a962-01b43e0299de
type: localport
addresses: ["fa:16:3e:dc:ab:47"]
📑7. 显示finance-router1的路由表。
[student@workstation ~(developer1-finance)]$ openstack router list -c ID -c Name
+--------------------------------------+-----------------+
| ID | Name |
+--------------------------------------+-----------------+
| e05522ef-8a15-4b7d-87d5-50506144b76b | finance-router1 |
+--------------------------------------+-----------------+
[root@controller0 ~]# ovn-nbctl lr-list
adedf86a-aa9d-443d-9b2b-14698a3cf9fa (neutron-e05522ef-8a15-4b7d-87d5-50506144b76b)
[root@controller0 ~]# ovn-nbctl lr-nat-list neutron-e05522ef-8a15-4b7d-87d5-50506144b76b
TYPE EXTERNAL_IP LOGICAL_IP EXTERNAL_MAC LOGICAL_PORT
dnat_and_snat 172.25.250.107 192.168.1.5 fa:16:3e:85:3b:1b 71467c2e-0460-4514-a6ce-e5885e60ccb3
snat 172.25.250.106 192.168.1.0/24
[student@workstation ~(developer1-finance)]$ openstack port list -c ID -c 'Fixed IP Addresses'
+--------------------------------------+------------------------------------------------+
| ID | Fixed IP Addresses
+--------------------------------------+------------------------------------------------+
| 3ad5f966-f682-4bc7-9f1e-2662cc2d950d | ip_address='192.168.1.1', subnet_id='4836a9dd-e01f-4a33-a971-fa49dec9ffd5' |
| 42671818-08d4-4a99-bd80-99a452ee40b3 | ip_address='192.168.1.2', subnet_id='4836a9dd-e01f-4a33-a971-fa49dec9ffd5' |
| 71467c2e-0460-4514-a6ce-e5885e60ccb3 | ip_address='192.168.1.5', subnet_id='4836a9dd-e01f-4a33-a971-fa49dec9ffd5' |
| 9ce01db2-7b5d-4d3f-ac08-9541d7d8fbf1 | ip_address='192.168.1.12', subnet_id='4836a9dd-e01f-4a33-a971-fa49dec9ffd5' |
+--------------------------------------+------------------------------------------------+
📑8. 在controller0上,使用ovn-sbctl命令列出逻辑流。将输出重定向到一个名为dhcp. txt文件。
查找ls_in_dhcp_options、ls_in_dhcp_response和put_dhcp_opts选择finance-server1的选项。
[root@controller0 ~]# ovn-sbctl lflow-list > dhcp.txt
[root@controller0 ~]# egrep 'ls_in_dhcp_options|ls_in_dhcp_response|put_dhcp_opts|192.168.1.5' dhcp.txt
📑清除实验
[student@workstation ~]$ lab networking-ovn cleanup
💡总结
RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。
以上就是【金鱼哥】对 第六章 管理OPENSTACK网络–开放虚拟网络(OVN)简介 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。
💾红帽认证专栏系列:
RHCSA专栏:戏说 RHCSA 认证
RHCE专栏:戏说 RHCE 认证
此文章收录在RHCA专栏:RHCA 回忆录
如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。
如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!文章来源:https://www.toymoban.com/news/detail-431343.html
文章来源地址https://www.toymoban.com/news/detail-431343.html
到了这里,关于CL210管理OPENSTACK网络--开放虚拟网络(OVN)简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!