🎹 个人简介:大家好,我是 金鱼哥,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
AI 代码解读
📑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 ~]#
AI 代码解读
📑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 | +-----------------------------+---------------------------------------------------------+
AI 代码解读
📑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" } ]
AI 代码解读
📑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 …………
AI 代码解读
📑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 +--------------------------------------+-----------------+------------------------------+
AI 代码解读
📑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);)
AI 代码解读
从上一步使用的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"]
AI 代码解读
📑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' | +--------------------------------------+------------------------------------------------+
AI 代码解读
📑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
AI 代码解读
📑清除实验
[student@workstation ~]$ lab networking-ovn cleanup
AI 代码解读
💡总结
RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。
以上就是【金鱼哥】对 第六章 管理OPENSTACK网络--开放虚拟网络(OVN)简介 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。
💾 红帽认证专栏系列:
RHCSA专栏: 戏说 RHCSA 认证
RHCE专栏: 戏说 RHCE 认证
此文章收录在RHCA专栏: RHCA 回忆录
如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。
如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!