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接口。最后通过外部网桥的接口访问外网

相关推荐
LensonYuan25 分钟前
在Linux系统中无网络安装Nginx并配置负载均衡
linux·网络·nginx
君琴1 小时前
SOME/IP协议详解 基础解读 涵盖SOME/IP协议解析 SOME/IP通讯机制 协议特点 错误处理机制
网络·单片机·嵌入式硬件·网络协议
DX_水位流量监测1 小时前
雷达流量监测系统:精准监控水流,确保水资源安全
大数据·开发语言·网络·人工智能·安全·信息可视化
网络安全Max1 小时前
网络精英赛模拟练习
网络·安全·web安全
hgdlip1 小时前
网易云上显示的ip属地准吗?一次深度探讨‌
网络·网络协议·tcp/ip
IT 古月方源1 小时前
网络安全的学习路径 (包括资源)快速学习
运维·网络·学习·tcp/ip·安全·web安全·网络安全
Again_acme2 小时前
20250113面试鸭特训营第21天
服务器·网络·面试
网络安全-老纪2 小时前
网络安全的几种攻击方法
网络·数据库·web安全
来自于狂人2 小时前
Openstack持久存储之Swift
云计算·openstack·swift
ybq195133454312 小时前
javaEE-网络原理-IP协议
网络·网络协议·tcp/ip