当前位置: 首页 > news >正文

OpenStack Neutron 中的核心概念:Network、Subnet 和 Port

一、核心概念详解

在传统物理网络中,我们有交换机、VLAN、子网、网卡等概念。Neutron 将这些概念抽象并虚拟化,形成了自己的一套模型。

1. Network

概念:
Network 是一个二层广播域,可以理解为一个虚拟的交换机。连接到同一个 Network 的虚拟机,相当于都接在了同一个交换机上,它们之间可以在二层直接通信。

关键点:

  • 隔离性: 默认情况下,不同的 Network 之间是完全隔离的。一个 Network 内的流量不能直接到达另一个 Network,除非通过路由器。
  • 类型:
    • Provider Network: 由云管理员创建,直接映射到物理网络基础设施(如物理网络的某个 VLAN 或 Flat 网络)。通常用于连接外部网络或提供特定的网络服务。
    • Tenant Network: 由普通用户创建,完全虚拟化的网络。Neutron 负责其生命周期管理,用户无需关心底层物理网络细节。根据配置,可以分为:
      • Local: 仅限于单个计算节点,不同节点上的 VM 即使在同一 Local Network 也无法通信。
      • Flat: 无标签的非 VLAN 网络,所有 VM 都在同一个二层网络中。
      • VLAN: 使用 802.1Q VLAN 标签进行隔离,是最常见的类型。
      • VXLAN/GRE: 使用 overlay 隧道技术,克服了 VLAN ID 数量(4096)的限制,非常适合大规模云环境。
2. Subnet

概念:
Subnet 是一个三层 IP 地址块,关联在一个 Network 上。它定义了 Network 的 IP 地址范围、网关、DNS 等三层属性。

关键点:

  • 关联关系: 一个 Subnet 必须且只能属于一个 Network。但一个 Network 可以有多个 Subnet,这被称为多子网网络。
  • 功能:
    • IP 地址管理: Neutron 的 DHCP 服务会从 Subnet 的地址池中为虚拟机分配 IP 地址。
    • 网关: 指定了该子网访问外部网络的出口。
    • DNS: 为虚拟机配置 DNS 服务器。

举例:
一个 Network 就像一个办公大楼,而 Subnet 就像是这栋大楼里的不同楼层,每个楼层有自己独立的房间号范围(IP 地址段)和一个通往楼梯/电梯间的出口(网关)。

3. Port

概念:
Port 是 Network 上的一个虚拟交换机端口。它代表一个虚拟网络接口卡的连接点。当虚拟机的虚拟网卡连接到 Network 时,Neutron 就会创建一个 Port。

关键点:

  • 核心属性:
    • MAC 地址: 每个 Port 都有一个唯一的 MAC 地址。
    • IP 地址: 一个或多个来自关联 Subnet 的 IP 地址会绑定到该 Port。
    • 状态: 标识 Port 是否活跃。
    • 安全组: 定义了一组防火墙规则,控制进出该 Port 的流量。
    • 绑定信息: 记录了该 Port 最终被连接到哪个计算节点的哪个虚拟交换机上(例如,OVS 的某个端口)。
  • 实体化: 当 Nova 启动一个虚拟机并为其指定一个网络时,它会在 Neutron 上为该网络创建一个 Port(或使用已存在的 Port),然后将这个 Port 的信息传递给 Hypervisor。Hypervisor 据此创建虚拟网卡并将其“插”入虚拟网络中。

举例:
继续上面的比喻,Port 就是大楼(Network)每个楼层(Subnet)墙壁上的一个网络插座。虚拟机的网线(虚拟网卡)就插在这个插座上。插座上标明了唯一的物理地址(MAC 地址)和分配到的 IP 地址。


二、Port 的实现机制(重点)

Port 的实现是 Neutron 最核心和最复杂的地方,它连接了抽象的网络模型和具体的虚拟化网络数据平面。

1. 创建流程

当 Nova 要启动一个虚拟机并连接到某个网络时,Port 的创建和绑定流程如下:

  1. Nova API 调用: 用户通过 Nova 启动 VM,指定网络(--nic port-id=...--net-id=...)。
  2. Nova 调用 Neutron: Nova 计算服务向 Neutron API 发送请求,创建(或查询)一个 Port。
  3. Neutron Server 处理:
    • Neutron Server 接收到请求,在其数据库中创建 Port 记录,分配 MAC 和 IP 地址。
    • 根据 Port 上配置的安全组规则,生成对应的 iptables/Open vSwitch 流表规则(这些规则稍后会被下发)。
    • 如果网络配置了 DHCP,Neutron 会通知 DHCP Agent 更新其配置。
  4. 信息返回 Nova: 创建成功的 Port 信息(包括 MAC, IP, Binding Profile 等)返回给 Nova。
  5. Nova 调度并通知 Hypervisor: Nova 调度器选择一台计算节点,然后将 VM 的启动信息(包括 Port 的详细信息)传递给该节点上的 Nova-Compute 服务。
  6. Hypervisor 创建虚拟设备:
    • Nova-Compute 驱动 Hypervisor(如 KVM/QEMU)创建虚拟机,并为其创建虚拟网卡。
    • 在 Linux Bridge 或 OVS 环境下,会创建一个对应的虚拟设备接口。
  7. Neutron Agent 进行绑定:
    • 计算节点上的 Neutron Agent(如 OVS Agent 或 Linux Bridge Agent)会检测到新的 Port 需要被“插”入虚拟交换机。
    • 绑定: Agent 会执行命令,将上一步创建的虚拟设备接口(tapXXXXvnetX)连接到对应的虚拟交换机(br-int)上,并应用之前生成的安全组和网络策略规则。

至此,一个逻辑上的 Port 在物理(计算节点)上完成了实体化。

2. 数据平面实现

Port 的具体实现依赖于 Neutron 使用的底层插件和代理。

以 Open vSwitch 为例:

  1. 虚拟交换机: 每个计算节点上有一个集成桥 br-int
  2. Port 的实体: 当虚拟机启动时,Hypervisor 会创建一个 tap 设备(例如 tap12345678-ab)。这个 tap 设备的一端在宿主机的网络命名空间中,另一端作为虚拟机的虚拟网卡。
  3. 连接: Neutron OVS Agent 会将这个 tap 设备作为端口添加到 br-int 上。这个 OVS 端口就是 Neutron Port 在数据平面的具体体现。
  4. 流表与安全组: OVS Agent 会在 br-int 上设置流表规则,这些规则实现了安全组(如丢弃非法流量)和网络隔离(如 VLAN 标签的添加和剥离)。

以 Linux Bridge 为例:

  1. 虚拟交换机: 每个计算节点上有一个 Linux Bridge(例如 brqXXXX)。
  2. Port 的实体: 同样会创建一个 tap 设备。
  3. 连接: 通过 brctl addif 命令将 tap 设备加入到对应的 Linux Bridge 中。这个在 Bridge 上的 tap 接口就是 Port 的实体。
  4. 安全组: 安全组通常通过 iptables 规则在 tap 设备上实现。
3. 高级特性与 Port

Port 是实现 Neutron 高级网络功能的基础:

  • 允许地址对: 允许一个 Port 拥有多个 IP 地址,常用于负载均衡或高可用场景。
  • 端口安全: 控制哪些 MAC 和 IP 地址可以通过该 Port 进行通信。
  • VNIC 类型: 除了普通的 virtio,还支持 SR-IOV 的 direct 类型。对于 SR-IOV,Port 的创建会直接绑定到物理网卡上的一个 VF,从而实现近乎原生性能的网络。
  • 绑定主机: 管理员可以将 Port 固定绑定到特定主机,这对于需要特定物理位置的服务(如 DVR 中的路由器命名空间)至关重要。

总结

概念抽象层级功能物理类比
NetworkL2定义二层广播域和隔离交换机
SubnetL3定义IP地址段、网关、DNS子网/IP网段
PortL1/L2虚拟网络的接入点,承载MAC/IP,应用安全策略交换机端口/网络插座

Port 的实现精髓在于:
它是一个连接 Neutron 控制平面(API、数据库)和数据平面(OVS、Linux Bridge、iptables)的纽带。Neutron Server 在逻辑上定义 Port 的所有属性,而各个计算节点上的 Neutron Agent 则负责将这些属性“翻译”并应用到具体的网络设备上,从而将一个抽象的“端口”概念,变成了一个实实在在可以转发网络数据包的接口。

http://www.dtcms.com/a/478218.html

相关文章:

  • JVM(十)-- 类的加载器
  • 软考刷题--数据库
  • 重庆建网站公司做网站的等级保护要多少钱
  • 标签之文本(本文为个人学习笔记,内容整理自哔哩哔哩UP主【非学者勿扰】的公开课程。 > 所有知识点归属原作者,仅作非商业用途分享)
  • 论文阅读---CARLA:用于时间序列异常检测的自监督对比表示学习方法
  • 做微信推送的网站wordpress 默认相册
  • 15 【C++11 新特性】统一的列表初始化和统一的声明
  • OpenCV计算机视觉实战(26)——OpenCV与机器学习
  • ACE会成为下一代上下文工程技术吗?
  • GitHub 热榜项目 - 日榜(2025-10-13)
  • 网站首页关键如何优化网络促销的方法有哪些
  • CTFSHOW WEB 2
  • 学术研究者的AI记录工具对比评测
  • mianf网站换友网站
  • 旧电脑变废为宝:Puter+cpolar打造你的专属云盘
  • springboot考试管理系统-计算机毕业设计源码84001
  • 手写MyBatis第106弹:#{}预编译安全机制 vs ${}字符串替换风险 - 源码级深度解析
  • 【Pytorch】数学运算
  • 金泉网站建设开发手机网站开发注意
  • 当Excel遇上大语言模型:ExcelAgentTemplate架构深度剖析与实战指南
  • 新农村建设在哪个网站申请vi设计包含的内容
  • 达梦数据库相关术语及管理操作
  • 百度网站推广公司济南网络优化推广
  • 【SpringBoot从初学者到专家的成长14】SpringBoot项目结构介绍
  • mongodb一个服务器部署多个节点
  • 基金网站制作工程承包公司
  • 成都企业网站建设价格搜索引擎收录
  • 第9章:两条道路的风景:技术与管理的真实世界(4)
  • 基于frenet坐标系的规划与避障
  • 从本地到云端:Fiora+cpolar打造真正的私密社交通讯站