OpenStack-Neutron组件

neutron

OpenStack 网络服务 (neutron) 提供了一个 API,允许用户在云中设置和定义网络连接和寻址。网络服务的项目代号是 neutron。OpenStack 网络负责创建和管理虚拟网络基础设施,包括由 OpenStack Compute 服务 (nova) 管理的设备的网络、交换机、子网和路由器。还可以使用防火墙或虚拟专用网络 (VPN) 等高级服务

Neutron 的架构由多个核心组件组成,各司其职,协同工作:

(1)Neutron Server

  • 提供 RESTful API,供用户和管理员进行网络相关的操作,例如创建网络、子网、路由等。
  • 将用户请求转发给后端的插件或服务进行具体实现。

(2)插件(Plugins)

Neutron 的灵活性依赖于插件机制,可以根据不同的底层网络技术选择不同的插件。

  • 核心插件(Core Plugin):负责实现虚拟网络和子网的创建和管理。
  • 服务插件(Service Plugin):支持额外的网络服务,如负载均衡(LBaaS)、防火墙(FWaaS)、虚拟专用网络(VPNaaS)等。

(3)代理(Agents)

Neutron 的代理运行在每个计算节点和网络节点上,用于实现具体的网络功能:

  • DHCP Agent:管理 DHCP 服务,为虚拟机分配 IP 地址。
  • L3 Agent:处理路由和 NAT 服务,实现外部网络连接。
  • Open vSwitch(OVS)Agent 或 Linux Bridge Agent:负责虚拟交换机的配置和流量转发。
  • Metadata Agent:为虚拟机提供元数据服务。

在 OpenStack Neutron 中,有提供商网络(Provider Network) 和 自助服务网络(Self-Service Network)两种不同的网络配置模式,分别适用于不同的使用场景和需求。它们的主要区别在于网络连接方式和实现的功能。

提供商网络(Provider Network):提供商网络直接映射到物理网络,通常由云管理员预先配置。用户(租户)可以将虚拟机连接到提供商网络,直接访问外部网络。

特点

  • 简单高效:流量直接从虚拟机发送到物理网络,无需中间路由。
    不支持 NAT:虚拟机需要使用物理网络中的 IP 地址。
    租户隔离有限:租户网络间可能共享相同的物理网络。

典型场景

  • 用于小型或简单部署,网络隔离需求较低。
    适合服务提供商或公共云场景,提供直接的外网连接。

网络走向

  • 虚拟机\] -\> \[提供商网络\] -\> \[物理网络\] -\> \[外部网络/互联网

自助服务网络(Self-Service Network):自助服务网络是租户可以自由创建和管理的虚拟网络,提供高级网络功能,如路由、NAT 和多租户隔离。

特点

  • 完全隔离:每个租户的网络相互独立。
    支持 NAT:租户网络可以通过路由器访问外部网络。
    灵活性高:租户可以创建自己的网络、子网和路由器。

典型场景

  • 用于复杂的多租户部署,网络隔离需求较高。
    适合企业私有云或混合云场景,需要提供高级网络服务。

网络走向

  • 虚拟机\] -\> \[租户网络\] -\> \[路由器/NAT\] -\> \[外部网络/互联网

两者的核心区别在于,自助服务网络可以完全虚拟化,自定义所有的网络信息提供给实例使用,而提供商网络则需要受限于所映射到的物理网络

网络驱动

在 OpenStack Neutron 中,网络驱动(Network Driver) 是指负责与底层网络基础设施交互的插件或模块。这些驱动抽象了底层网络设备的差异,为 Neutron 提供统一的网络管理接口,允许使用多种网络技术(如 VLAN、VXLAN、GRE)和第三方网络设备,如LInux Bridge,Open vSwitch以及OVN等,本文着重使用OVS和OVN为网络驱动

Linux Bridge

官网文档

Linux Bridge是Linux内核自带的一种虚拟网络桥接技术,用于将多个网络设备(如网卡和虚拟网卡)连接在一起,形成一个逻辑上的二层网络交换机。在openstack中Linux 桥接机制驱动程序仅使用 Linux 桥接器和veth对作为互连设备。第 2 层代理管理每个计算节点和任何其他提供第 3 层(路由)、DHCP、元数据或其他网络服务的节点上的 Linux 桥接器

  • 优点

    简单易用:配置和管理相对简单,适合小规模部署。

    稳定性高:作为Linux内核的一部分,稳定性和兼容性有保障。

    开销低:对系统资源消耗较小。

  • 缺点

    功能有限:不支持复杂的网络功能。

    扩展性差:不适合大规模数据中心的需求。

工作原理

Linux Bridge通过创建虚拟网桥(Bridge)将多个网络设备连接在一起。数据包在进入网桥后,根据MAC地址表进行转发。如果目的MAC地址在表中,则直接转发;如果不在,则进行广播。Linux Bridge主要工作在二层(数据链路层),不涉及三层(网络层)的路由功能。

OVS(Open vSwitch)

OVS是一种高性能的多层虚拟交换机,用于在虚拟环境中提供网络连接。它支持标准的管理接口和协议,如NetFlow、sFlow、IPFIX、RSTP和LACP,适用于各种网络虚拟化方案。

  • 优点

    高性能:OVS优化了虚拟网络环境中的数据包处理流程,性能优异。

    可扩展性:支持大规模的网络拓扑,适合大规模数据中心。

    功能丰富:支持多种网络协议和高级网络功能,如QoS(服务质量)、ACL(访问控制列表)等。

    广泛应用:被许多虚拟化平台和云环境广泛采用。

  • 缺点

    复杂性高:配置和管理相对复杂,需要一定的学习成本。

    调试难度大:由于功能强大,问题排查和调试较为复杂。

工作原理

OVS使用流表(Flow Table)来管理网络数据包的转发。数据包进入OVS后,首先匹配流表项,如果匹配成功,则按照流表项的指示进行处理;如果没有匹配到,则会发送到控制平面进行进一步处理。OVS还支持分布式网络控制,可以通过控制器(如OpenDaylight)集中管理网络策略。

配置OVS为openstack网络驱动

官网文档

安装相关软件包

bash 复制代码
apt install -y neutron-server neutron-plugin-ml2  neutron-l3-agent neutron-dhcp-agent  neutron-metadata-agent neutron-openvswitch-agent

部分配置示例如下:详细配置参考博文

bridge_mappings将物理网络的接口(Physical_NAME)和OVS网桥(OVS_NAME)进行映射

bash 复制代码
cat > /etc/neutron/plugins/ml2/openvswitch_agent.ini << eof
[DEFAULT]
[agent]
l2_population = True
tunnel_types = vxlan
prevent_arp_spoofing = True
[dhcp]
[network_log]
[ovs]
local_ip = $HOST_IP
bridge_mappings = $Physical_NAME:$OVS_NAME
[securitygroup]
eof

在L3和dhcp代理中指定接口驱动为OVS

bash 复制代码
cat > /etc/neutron/l3_agent.ini << eof
[DEFAULT]
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
external_network_bridge =
[agent]
[network_log]
[ovs]
eof
bash 复制代码
cat > /etc/neutron/dhcp_agent.ini << eof
[DEFAULT]
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True
[agent]
[ovs]
eof

启动所有neutron组件

bash 复制代码
# 提供neutron服务
service neutron-server restart
# 提供ovs服务
service neutron-openvswitch-agent restart
# 提供地址动态服务
service neutron-dhcp-agent restart
# 提供元数据服务
service neutron-metadata-agent restart
# 提供三层网络服务
service neutron-l3-agent restart

查看所有网络代理

bash 复制代码
root@controller:~# openstack network agent list
+---------------------+--------------------+------------+-------------------+-------+-------+-----------------------+
| ID                  | Agent Type         | Host       | Availability Zone | Alive | State | Binary                |
+---------------------+--------------------+------------+-------------------+-------+-------+-----------------------+
| 6634d908-9f70-4d5a- | Metadata agent     | controller | None              | :-)   | UP    | neutron-metadata-     |
| aeaa-2db98b55a510   |                    |            |                   |       |       | agent                 |
| 7e77e98a-4ba0-40a4- | Open vSwitch agent | controller | None              | :-)   | UP    | neutron-openvswitch-  |
| 8f7c-8f7c8b833666   |                    |            |                   |       |       | agent                 |
| caa6995a-cc15-4c2f- | L3 agent           | controller | nova              | :-)   | UP    | neutron-l3-agent      |
| 85ab-e64e05d0771e   |                    |            |                   |       |       |                       |
| f69c784e-b1ba-47e6- | DHCP agent         | controller | nova              | :-)   | UP    | neutron-dhcp-agent    |
| a203-379e5744153a   |                    |            |                   |       |       |                       |
+---------------------+--------------------+------------+-------------------+-------+-------+-----------------------+
OVN(Open Virtual Network)

OVN是由OVS社区开发的一个网络虚拟化项目,旨在为虚拟网络提供高级网络功能和集中化管理。它建立在OVS之上,提供了额外的控制平面来管理和配置虚拟网络。

  • 优点

    高级功能:支持VXLAN、分布式路由、防火墙等高级网络功能。

    集中化管理:通过控制平面集中管理网络策略,简化大规模部署。

    动态扩展:适应动态变化的云环境,支持自动化网络配置。

  • 缺点

    依赖性强:依赖于OVS,要求较高的系统资源和配置。

    学习曲线陡峭:需要掌握OVS和OVN的配置和管理,学习成本较高。

工作原理

OVN通过中央控制器和多个本地节点来实现网络虚拟化。中央控制器负责管理全局网络策略和配置,本地节点负责具体的数据包转发和处理。OVN使用OVS作为数据平面,通过OVN Southbound和Northbound数据库与控制器通信,实现网络配置的同步和下发

配置OVN为openstack网络驱动

官网文档

配置配置信息如下:详细文档可参考博文

bash 复制代码
apt install -y neutron-server neutron-plugin-ml2 python3-neutronclient ovn-central openvswitch-switch

配置网络服务器组件。网络服务将 OVN 实现为 ML2 驱动程序,并且需要配置Geneve网络, Geneve ID 范围和最大报头大小(1:65536)。

bash 复制代码
cat > /etc/neutron/plugins/ml2/ml2_conf.ini << eof
[DEFAULT]
[ml2]
type_drivers = flat,vlan,vxlan,gre,geneve
tenant_network_types = geneve
mechanism_drivers = ovn
extension_drivers = port_security
overlay_ip_version = 4
[ml2_type_flat]
flat_networks = $Physical_NAME
[ml2_type_geneve]
vni_ranges = $MinGeneveID:$MaxGeneveID
max_header_size = 38
[ml2_type_gre]
[ml2_type_vlan]
[ml2_type_vxlan]
[ovs_driver]
[securitygroup]
enable_ipset = true
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
[sriov_driver]
[ovn]
ovn_nb_connection = tcp:$HOST_IP:6641
ovn_sb_connection = tcp:$HOST_IP:6642
ovn_l3_scheduler = leastloaded
ovn_metadata_enabled = True
eof

重启网络服务

bash 复制代码
systemctl restart openvswitch-switch
systemctl restart ovn-central ovn-northd

查看代理如下:openstack的所有网络代理服务都由OVN进行统一管理

bash 复制代码
root@controller:~# openstack network agent list
+---------------------+---------------------+------------+-------------------+-------+-------+-----------------------+
| ID                  | Agent Type          | Host       | Availability Zone | Alive | State | Binary                |
+---------------------+---------------------+------------+-------------------+-------+-------+-----------------------+
| d1acca20-0865-4ec8- | OVN Controller      | controller |                   | :-)   | UP    | ovn-controller        |
| 8160-139b2229683d   | agent               |            |                   |       |       |                       |
| 0317c15d-8da7-562e- | OVN Metadata agent  | controller |                   | :-)   | UP    | neutron-ovn-metadata- |
| b9f6-b82b2184ab9b   |                     |            |                   |       |       | agent                 |
+---------------------+---------------------+------------+-------------------+-------+-------+-----------------------+

物理网络

物理网络(Provider Network): 这些网络通常由管理员创建,用于提供外部网络连接。常用的网络类型包括 flat 和 vlan(需要配合物理交换机处于同一vlan即可通信外网)。也可以理解为提供商网络

flat

Flat 网络是一种简单的网络配置类型,在这种配置中,所有虚拟机实例共享一个物理网络,不进行任何网络隔离或 VLAN 标记。所有的流量都在同一个二层广播域内传输。

  • 优点

    简单易用:配置和管理简单,不需要复杂的网络配置。

    兼容性好:与现有的物理网络基础设施兼容性较好。

    低开销:没有额外的网络标记和隔离开销。

  • 缺点

    缺乏隔离:所有虚拟机实例共享同一个广播域,缺乏网络隔离,安全性较低。

    可扩展性差:由于没有网络隔离,广播域较大,网络性能和可扩展性受到限制。

    冲突风险:多个租户共享同一个网络,IP 地址冲突风险增加。

工作原理

在 Flat 网络中,Neutron 不会对流量进行任何标记或隔离。所有虚拟机实例直接连接到物理网络,使用同一个网络范围内的 IP 地址。这种配置适用于小规模和对网络隔离要求不高的环境。

vlan

VLAN(Virtual Local Area Network)网络通过在物理网络上划分多个逻辑网络,实现网络隔离和分段。每个 VLAN 使用一个唯一的 VLAN ID 来标识,确保不同 VLAN 之间的流量隔离。

  • 优点

    网络隔离:通过 VLAN ID 实现网络隔离,提高安全性。

    可扩展性好:支持多达 4096 个 VLAN ID,适合大规模部署。

    性能较好:物理网络设备通常对 VLAN 有硬件加速支持,性能较好。

  • 缺点

    配置复杂:需要在物理交换机和 OpenStack 中进行 VLAN 配置,增加了管理复杂性。

    依赖物理网络设备:需要物理交换机支持 VLAN,并进行相应配置。

    资源消耗:每个 VLAN 需要独立的广播域,可能增加广播流量。

工作原理

在 VLAN 网络中,Neutron 使用 VLAN ID 对流量进行标记,不同 VLAN 的流量在物理网络上通过 VLAN 标签进行隔离。物理交换机配置为允许这些 VLAN ID 的流量通过,并根据 VLAN ID 进行转发和隔离。

租户网络

租户网络(Tenant Network): 这些网络通常由用户创建,用于隔离不同租户的流量。常用的隧道类型包括 vxlan, gre, 和 geneve。也可以理解为自助服务网络

VXLAN

是一种网络虚拟化技术,用于在大规模云计算环境中构建虚拟私有网络(VPN)和覆盖网络(Overlay Network)。VXLAN 的主要目的是扩展 VLAN 的数量限制和跨物理网络的 VLAN 通信限制,以实现更大规模的虚拟化和网络隔离。以下是关于 VXLAN 的主要特点、工作原理和应用场景的介绍:

主要特点

  • 扩展性:VXLAN 可以扩展到数百万个虚拟网络标识(VNI),远远超过传统 VLAN 的数量限制。
  • 隔离性:VXLAN 提供逻辑隔离,允许在同一物理网络上创建多个虚拟网络,实现不同用户或应用之间的隔离。
  • 跨网络通信:VXLAN 可以在不同物理网络之间建立虚拟隧道,实现跨网络的 VLAN 通信,扩展了 VLAN 的范围。
  • 软件定义网络(SDN)支持:VXLAN 与 SDN 技术结合使用,可以通过 SDN 控制器进行动态网络管理和流量控制。

工作原理

  • VXLAN 标识符(VNI):每个 VXLAN 网络有一个唯一的 VNI 作为标识符,用于区分不同的虚拟网络。
  • VTEP(VXLAN Tunnel Endpoint):VTEP 是 VXLAN 的边界设备,负责在物理网络和虚拟网络之间转发 VXLAN 数据包。
  • UDP 封装:VXLAN 使用 UDP 封装数据包,将虚拟网络的数据包打包成 UDP 包,在物理网络上传输。
  • VXLAN Header:在 UDP 包中添加 VXLAN 头部,包含 VNI 和其他控制信息,用于标识和识别虚拟网络。

应用场景

云计算环境:VXLAN 在大规模云计算环境中广泛应用,用于构建多租户虚拟网络和覆盖网络,提供网络隔离和灵活性。

数据中心网络:VXLAN 可以帮助构建高度可扩展和灵活的数据中心网络,支持动态迁移和负载均衡。

软件定义网络(SDN):VXLAN 结合 SDN 技术,可以实现网络的编程化管理和自动化配置。

跨数据中心连接:通过 VXLAN 虚拟隧道,可以实现跨数据中心的 VLAN 通信和连接。

总体而言,VXLAN 是一种高度灵活、可扩展的网络虚拟化技术,适用于大规模云计算环境和软件定义网络场景,为构建安全、高效的虚拟网络提供了重要的技术支持。

GRE

GRE 是一种隧道协议,用于在不同的网络之间传输数据包。它通过封装二层数据包,并在三层网络上传输,不进行加密。

  • 优点

    简单易用:配置和管理相对简单,适用于跨多个网络的隧道传输。

    广泛支持:被许多网络设备和操作系统支持,适用性广泛。

  • 缺点

    性能开销:封装和解封装数据包会增加处理开销,影响性能。

    安全性低:GRE 本身不提供加密,数据包在传输过程中可能被拦截。

工作原理

GRE 隧道通过在原始数据包外部增加一个 GRE 头部,并在三层网络上传输。数据包到达目的地后,GRE 头部被移除,恢复原始数据包并进行处理。GRE 隧道端点负责封装和解封装数据包。

Geneve

Geneve 是一种新兴的网络虚拟化封装协议,设计目的是结合 VXLAN 和 GRE 的优点,并提供更大的灵活性和扩展性。它支持可扩展的头部字段,适应未来的发展需求。

  • 优点

    高灵活性:支持可扩展的头部字段,可以根据需求增加新的功能。

    兼容性好:设计时考虑了与现有网络虚拟化协议的兼容性。

    未来适应性:能够适应未来网络虚拟化技术的发展需求。

  • 缺点

    实现复杂:由于其灵活性和扩展性,实现和配置相对复杂。

    支持有限:作为新兴技术,尚未得到广泛支持。

工作原理

Geneve 通过封装二层数据包,并在三层网络上传输。Geneve 头部包含了基本的封装信息和可选的扩展字段,允许更灵活的功能扩展。Geneve 隧道端点负责封装和解封装数据包。

三者比较:

配置所有网络示例

官网文档参数配置示例

实验环境:Ubuntu2404-ovs网络-openstackC版为例

powershell 复制代码
vim /etc/neutron/plugins/ml2/ml2_conf.ini

开启所有网络类型的支持

powershell 复制代码
[DEFAULT]
[ml2]
type_drivers = flat,vlan,vxlan,gre,geneve  #所有网络支持的类型
tenant_network_types = gre  #租户网络类型,注意下面对应的类型参数要开启,下面配置全开。可配置多个类型
mechanism_drivers = openvswitch,l2population
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider    #provider为用于和物理网络进行映射的标志,可自定义名称
[ml2_type_geneve]
vni_ranges = 1:1000
max_header_size = 38
[ml2_type_gre]
tunnel_id_ranges = 1:1000
[ml2_type_vlan]
network_vlan_ranges = provider:100:200   #vlan网络的网段
[ml2_type_vxlan]
vni_ranges = 1:1000
[ovs_driver]
[securitygroup]
enable_ipset = true
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
[sriov_driver]
powershell 复制代码
vim /etc/neutron/plugins/ml2/openvswitch_agent.ini

指定具体的租户网络类型

powershell 复制代码
[DEFAULT]
[agent]
l2_population = True
tunnel_types = vxlan  #配置租户网络类型,可配置多个类型
prevent_arp_spoofing = True
[dhcp]
[network_log]
[ovs]
local_ip = 192.168.200.195
bridge_mappings = provider:br-ens34
[securitygroup]

此时在界面的项目(租户)中创建的网络默认为vxlan,段id会随机分配

而在管理员界面则可以创建指定的网络类型,例如Flat物理网络

子网信息要与物理网卡相对应:

  • 子网地址为实际映射的物理网卡接口,本实验中对应ens34网卡,net模式
  • 网关对应net模式的网关,本文为:192.168.200.2

分配地址池,dns信息等

创建vlan网络

与Flat网络一样的配置方式,但需要注意的是,vlan网络需要用于实际的路由器或者交换机中

创建GRE网络

该网络和vxlan一样,可完全自定义

创建Geneve网络


实例测试

创建一台实例,使用vxlan网络模式,注意租户网络现在只能用vxlan,在配置文件中指定tunnel_types = vxlan,配置实现实例能访问外网以及远程连接

此时创建的实例只能ping自身网关

如果需要上网和本地远程连接,则需要绑定浮动IP(类似于公有云的公网IP)

  • 创建路由,接口绑定到Flat网络上
  • 此时创建的虚拟路由可以进行ping通,使用Flat网络的分配的地址作为外部网关
  • 增加内部接口到虚拟路由中
  • 此时实例即可实现上网
  • 将实例绑定浮动IP


  • 配置安全组策略,放通ssh规则
  • 此时实例即可实现远程访问
连接接口

创建的实例可以增加接口,也就是网卡,点击创建快照旁边的下拉框,点击连接接口,可以指定网卡,以及具体的网段


  • 还可以分离接口
指定IP创建实例

正常创建实例获取的IP都是随机分配的,本实验通过指定IP地址来创建实例

  • 创建端口,并指定IP10.0.0.10
  • 创建实例 ,并在网络接口中指定该端口
  • 实例创建成功
  • 控制台查看实例IP为:10.0.0.10

网络走向(访问外网)

本实验中采用ovs网络驱动,整个网络涉及到的组件如下:

  • br-int:OVS集成网桥
  • br-en34:OVS外部网桥
  • tap设备:Linux本身的虚拟网络接口
  • qr-xxx:路由器命名空间中的接口
  • qg-xxx:路由器命名空间连接外网的接口
  • ens34:宿主机的第二张网卡,使用VMware的net模式,可访问外网

当实例发出访问外网请求后,数据包走向如下:总共可为三个阶段,实例到OVS网桥,OVS网桥到ens34网卡,最终实现上网,拓扑图如下:

【实例内部】 → tap设备 →【 br-int → qr-xxx → 路由器命名空间 → qg-xxx → br-ens34】 → 【物理网卡 ens34】→ 外网

具体过程:

  1. 数据包从虚拟机内部发出,经过libvirt创建的tap设备(成对出现,用于两个设备之间的通信)

这个时候实例和OVS网桥之间是使用tap设备来进行一个连接的!

  • 首先查看实例的网卡eth0,对应的mac地址为fe:16:3e:ae:f9:ae,这个就是tap设备
  • 此时查看宿主机的tap设备对应的mac地址也为fe:16:3e:ae:f9:ae,且绑定的网桥为ovs-system
    TAP 设备绑定到 ovs-system 是因为它已经被添加到 Open vSwitch 的某个具体网桥中,而 ovs-system 是内核中管理这些网桥的顶层接口。在 Linux 网络体系中,所有与 OVS 相关的网络接口都会在 ovs-system 中标记为"主设备"
bash 复制代码
root@controller:~# ip link show tap7836cb8a-5b
18: tap7836cb8a-5b: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master ovs-system state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether fe:16:3e:ae:f9:ae brd ff:ff:ff:ff:ff:ff

现在所查看到的是实例上的设备和绑定在OVS网桥上的设备,他俩共享一个mac地址,以确保网络流量的透明性和一致性

  1. 通过OVS网桥的br-int设备
  • 查看ovs网桥信息:此时可以查看到在br-int下面有一个接口设备为tap7836cb8a-5b,正是和实例相对应的
bash 复制代码
root@controller:~# ovs-vsctl show
dd8f26a9-0d62-489e-a1a1-58dc758803fa
---------------------
    Bridge br-int
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        datapath_type: system
---------------------
        Port tap7836cb8a-5b
            tag: 1
            Interface tap7836cb8a-5b
        Port qg-84fa952b-fe
            tag: 2
            Interface qg-84fa952b-fe
                type: internal
----------------
    ovs_version: "3.3.0"
  • 网桥完整信息如下:
bash 复制代码
root@controller:~# ovs-vsctl show
dd8f26a9-0d62-489e-a1a1-58dc758803fa
    Manager "ptcp:6640:127.0.0.1"
        is_connected: true
    Bridge br-tun
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        datapath_type: system
        Port br-tun
            Interface br-tun
                type: internal
        Port patch-int
            Interface patch-int
                type: patch
                options: {peer=patch-tun}
    Bridge br-int
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        datapath_type: system
        Port int-br-ens34
            Interface int-br-ens34
                type: patch
                options: {peer=phy-br-ens34}
        Port br-int
            Interface br-int
                type: internal
        Port qr-30c38dbf-71
            tag: 1
            Interface qr-30c38dbf-71
                type: internal
        Port tapaa121f58-71
            tag: 2
            Interface tapaa121f58-71
                type: internal
        Port patch-tun
            Interface patch-tun
                type: patch
                options: {peer=patch-int}
        Port tapac1f73ba-9b
            tag: 1
            Interface tapac1f73ba-9b
                type: internal
        Port tap7836cb8a-5b
            tag: 1
            Interface tap7836cb8a-5b
        Port qg-84fa952b-fe
            tag: 2
            Interface qg-84fa952b-fe
                type: internal
    Bridge br-ens34
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        datapath_type: system
        Port br-ens34
            Interface br-ens34
                type: internal
        Port ens34
            Interface ens34
        Port phy-br-ens34
            Interface phy-br-ens34
                type: patch
                options: {peer=int-br-ens34}
    ovs_version: "3.3.0"
  1. 进入路由器命名空间的qr接口
  • 此时进入到路由器阶段,tap设备的网络是10.0.0.10,它通过路由器上绑定网关10.0.0.2进入到路由器,再由192.168.200.233出去,进行了一个NAT转换
  • 该路由器实质上一个独立的网络命名空间。该命名空间中会包含路由器相关的网络接口和路由规则,以实现网络隔离和功能。可以在宿主机上查看
bash 复制代码
root@controller:~# ip netns list
qdhcp-46e0e1f0-a005-48bc-b897-55b9ae59cea6 (id: 0)
qdhcp-6f1a1754-be1d-4978-9ba9-bc4efd82955f (id: 1)
qrouter-5be3bfc2-a1d7-4158-900a-13c8c20361c6 (id: 3)
root@controller:~# ip netns exec qrouter-5be3bfc2-a1d7-4158-900a-13c8c20361c6 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
14: qg-84fa952b-fe: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether fa:16:3e:21:d0:3a brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.233/24 brd 192.168.200.255 scope global qg-84fa952b-fe
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe21:d03a/64 scope link
       valid_lft forever preferred_lft forever
15: qr-30c38dbf-71: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether fa:16:3e:50:95:02 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.2/24 brd 10.0.0.255 scope global qr-30c38dbf-71
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe50:9502/64 scope link
       valid_lft forever preferred_lft forever
  • 而对应两个接口实质上也是成对的虚拟网络设备,存放在br-int网桥上
bash 复制代码
        Port qr-30c38dbf-71
            tag: 1
            Interface qr-30c38dbf-71
                type: internal
        Port qg-84fa952b-fe
            tag: 2
            Interface qg-84fa952b-fe
                type: internal
  1. qg接口由发往外部网桥br-ens34
  • qg接口存在于br-int网桥上,此时就需要br-int网桥将网络数据发送给br-ens34网桥,而ovs网桥之间通过patch接口实现
bash 复制代码
    Bridge br-int
    Port int-br-ens34
        Interface int-br-ens34
            type: patch
            options: {peer=phy-br-ens34}
bash 复制代码
    Bridge br-ens34
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        datapath_type: system
        Port br-ens34
            Interface br-ens34
                type: internal
        Port ens34
            Interface ens34
        Port phy-br-ens34
            Interface phy-br-ens34
                type: patch
                options: {peer=int-br-ens34}
  1. 最终通过物理网卡发往外网
  • 宿主机ens34接口信息如下:该网卡绑定在ovs的br-ens34网桥。当网络数据从br-int网桥发到br-ens34网桥后,br-ens34网桥从接口phy-br-ens34发送到宿主机的ens34上,此时就能从ens34访问外部网络
bash 复制代码
root@controller:~# ip a
--------
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP group default qlen 1000
    link/ether 00:0c:29:64:d5:3f brd ff:ff:ff:ff:ff:ff
    altname enp2s2
    inet6 fe80::20c:29ff:fe64:d53f/64 scope link
       valid_lft forever preferred_lft forever

网络走向(实例通信)

实例之间的通信则相对好理解一些:每个实例上面都有个一个tap设备,然后对应的另一个设备都在ovs网桥br-int,网桥就相当于一个中转站,使得网络可以通信

【实例A】---> 【br-int】---->【实例B】

【实例B】---> 【br-int】---->【实例A】

  • 创建两台实例,对应的网卡信息如下

  • 查看宿主机tap设备,mac信息可对应
bash 复制代码
root@controller:~# ip a
----------------------
18: tap7836cb8a-5b: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master ovs-system state UNKNOWN group default qlen 1000
    link/ether fe:16:3e:ae:f9:ae brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc16:3eff:feae:f9ae/64 scope link
       valid_lft forever preferred_lft forever
19: tap127a75da-32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master ovs-system state UNKNOWN group default qlen 1000
    link/ether fe:16:3e:f7:75:f2 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc16:3eff:fef7:75f2/64 scope link
       valid_lft forever preferred_lft forever
  • 查看ovs网桥br-int信息
bash 复制代码
root@controller:~# ovs-vsctl show
----------------
    Bridge br-int
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        datapath_type: system
        Port int-br-ens34
            Interface int-br-ens34
                type: patch
                options: {peer=phy-br-ens34}
----------------------------
        Port tap127a75da-32        #对应实例B信息
            tag: 1
            Interface tap127a75da-32
        Port tap7836cb8a-5b
            tag: 1
            Interface tap7836cb8a-5b    #对应实例A信息
        Port qg-84fa952b-fe
            tag: 2
            Interface qg-84fa952b-fe
                type: internal
---------------------

总的来说br-int网桥将各个实例给桥接起来,tap设备则是连接网桥的网线,从而达到各个实例相互通信,而访问外网则是将当前网桥与外部网桥br-ens34(该网桥上有连接访问外网的接口)进行连接,不同网桥的连接使用patch接口。最后通过外部网桥的接口访问外网

相关推荐
虚空之月&&轮舞者2 小时前
Python与矢量网络分析仪3671E:自动化测试(Vscode)
网络·vscode·python·射频工程
lisw056 小时前
网络化:DevOps 工程的必要基础(Networking: The Essential Foundation for DevOps Engineering)
网络·devops
驱动小百科8 小时前
WiFi出现感叹号上不了网怎么办 轻松恢复网络
网络·智能路由器·wifi出现感叹号怎么解决·wifi无法上网·电脑wifi
好多知识都想学8 小时前
协议路由与路由协议
网络·智能路由器
SZ1701102318 小时前
中继器的作用
服务器·网络·智能路由器
Huazzi.10 小时前
Ubuntu 22虚拟机【网络故障】快速解决指南
linux·网络·学习·ubuntu·bash·编程
熙曦Sakura10 小时前
【Linux网络】HTTP
linux·网络·http
毒果10 小时前
网络安全:账号密码与诈骗防范
网络·安全·web安全
八股文领域大手子10 小时前
SSL/TLS 证书与数字签名:构建互联网信任的详解
网络·网络协议·ssl
学渣6765610 小时前
TCP/IP 模型每层的封装格式
网络