OpenStack 网络管理(理论):Linux 网络虚拟化是 Neutron 的地基

来源:《OpenStack 管理手册》网络管理章节 + 《OpenStack 实验手册》第 6 章 + PPT《07 OpenStack 网络管理》。

Neutron 是 OpenStack 九大核心服务里公认最难的一个------但拆开看,它的地基就是四个 Linux 网络虚拟化技术,主体就是「概念 + 架构 + 流量」三件事。这篇讲理论和架构,实操篇见第 2 篇。

一、先分清:物理网络 vs 虚拟网络

物理服务器虚拟化以后,一台机器里住着一堆虚拟机,网络这件事也跟着被「虚拟」了一份:

物理世界 虚拟世界 说明
Switch 物理交换机 vSwitch 虚拟交换机 物理交换机有 cisco、华为等品牌;虚拟交换机有 linuxbridge、OVS、OVN 等软件
NIC 网卡 vNIC 虚拟网卡 虚拟机的「网卡」,接在 vSwitch 的端口上

Neutron 最核心的工作,就是对二层物理网络的抽象与管理:各个 vNIC 连接在 vSwitch 的端口上,vSwitch 再通过物理服务器的物理网卡访问外部物理网络。理解了这条链,后面所有概念都是在这条链上加功能。

二、Linux 网络虚拟化四大件

Neutron 自己不发明网络技术,它把 Linux 系统上现成的网络虚拟化技术组织起来用。四大件分三类:

2.1 网卡虚拟化:TAP / TUN / VETH-PAIR

设备 层级 特点
TAP 二层 模拟一个二层网络设备,可以接收和发送以太网帧
TUN 三层 模拟一个三层网络设备,只操作 IP 包
VETH-PAIR 成对 一端发出的网包会被另一端接收,像一根「虚拟网线」

三句话理解:

  1. TAP/TUN 在主机内虚拟了一套网络接口,和物理接口没区别------可以配 IP、可以路由流量,只是流量只在主机内流通;
  2. TUN 只操作三层的 IP 包,TAP 操作二层的以太网帧------记住「TAP 二层、TUN 三层」;
  3. VETH-PAIR 成对出现、一端进一端出,专门用来连接不同的虚拟网络组件------连 Linux Bridge、连 OVS、连容器,OpenStack Neutron 就是用它构建复杂网络拓扑的。

2.2 交换机虚拟化:Linux Bridge 与 Open vSwitch

Linux Bridge:工作于二层的网络设备,功能类似物理交换机。

  • Bridge 可以绑定 Linux 上的其他网络设备(eth0、tap0、tap1......),把它们虚拟化成自己的端口------相当于往物理交换机上插网线;
  • 收到数据包后交给 br0,br0 根据 MAC 地址与端口的映射关系转发;
  • 工作在二层,所以绑上去的从设备不需要再设 IP,只需给 br0 设 IP------即使 eth0 原本有自己的 IP,绑进 bridge 后也会失效,只有目的地址为 br0 IP 的包才会被 Linux 接收;
  • 管理命令 brctl:brctl addbr BRIDGE 建桥、brctl addif BRIDGE DEVICE 加接口。

Open vSwitch(OVS):产品级的虚拟交换机。

  • Linux Bridge 适合小规模、主机内部通信;OVS 适合大规模、多主机间通信(华为 FusionCompute 的 DVS 就基于 OVS);
  • 为什么有了 Linux Bridge 还要 OVS?因为 OVS 让云环境的虚拟网络管理、状态和流量监控更容易:可以像配置物理交换机一样把 VM 分到不同 VLAN、给端口配 QoS,还支持 NetFlow、sFlow 等标准管理接口;
  • OVS 在各种虚拟化平台上实现了分布式虚拟交换机------一台物理服务器上的 vSwitch 可以透明地与另一台上的 vSwitch 连在一起;
  • 管理命令 ovs-vsctl:add-br 建桥、add-port 加端口、show 查看配置、dump-flows 查流表。

2.3 网络隔离:Network Namespace

Network Namespace(网络命名空间)是 Linux 的网络隔离机制:每个 namespace 有自己独立的网卡、路由表。

它在 Neutron 里的重要性:Neutron 的 router 就是用 network namespace 实现的。由此产生一个经典结论------不同 network 的 subnet CIDR 可以重叠而不冲突,因为不同 router 的路由表是独立的(详见第四节的 subnet 部分)。

三、Neutron 是什么:定位与功能

3.1 为什么需要 Neutron

传统网络管理靠管理员手工配置维护硬件设备;而云环境(特别是多租户场景)里,用户随时可能创建、修改、删除网络,连通性和隔离没法靠手工保证。「软件定义网络(SDN)」的灵活性和自动化优势使它成为云时代网络管理的主流。

Neutron 的设计目标是实现「网络即服务(Networking as a Service,NaaS)」:设计上遵循基于 SDN 实现网络虚拟化的原则,实现上充分利用 Linux 系统的各种网络技术。

3.2 四大功能

功能 说明
二层交换 Switching 实例通过虚拟交换机接入虚拟二层网络;支持 Linux Bridge 和 OVS,可创建 VLAN 网络和基于隧道的 Overlay 网络(VxLAN、GRE)
三层路由 Routing 虚拟路由器(router)实现跨网段通信,通过 IP forwarding、iptables 实现路由和 NAT
负载均衡 LBaaS Grizzly 版本首次引入 Load-Balancing-as-a-Service,把负载分发到多个实例;不同实现以 Plugin 形式集成,目前默认是 HAProxy
防火墙 Firewalling 两条路线:安全组(Security Group) 用 iptables 限制进出实例 的包;FWaaS 限制进出虚拟路由器的包

注意防火墙两条线的区别:安全组管「实例的口」,FWaaS 管「路由器的口」------都是 iptables 实现,管的对象不同。

四、核心概念:Network / Subnet / Port / Router / 两种 IP

4.1 Network:隔离的二层广播域

Network 是一个隔离的二层广播域,支持五种类型:

类型 特点 记忆点
local 与其他网络和节点隔离,同节点同网络才能通 单机测试用
flat 无 VLAN tagging,可跨节点 不打标签
VLAN 802.1q tagging,二层广播域,可跨节点 应用最广泛
VxLAN 隧道 overlay 网络,用 VNI(segmentation ID)区分,二层包封装成 UDP 传输 克服 VLAN 与物理网络设施的限制
GRE 与 VxLAN 类似的 overlay,用 IP 封装(不是 UDP) 和 VxLAN 成对记

三条补充规则:

  1. 不同 network 之间在二层上是隔离的------比如 VLAN 网络会给 network A、B 分不同的 VLAN ID,A 的广播包不会跑到 B;但借助路由器,不同 network 在三层上可以通信;
  2. Network 必须属于某个 Project(租户),Project 与 Network 是 1 对多;
  3. 实现选择上:Linux Bridge 只支持 VxLAN(不支持 GRE),OVS 两者都支持。

4.2 Subnet:IP 地址段

Subnet 是 IPv4 或 IPv6 地址段,实例的 IP 从 subnet 中分配,每个 subnet 要定义地址范围和掩码。

Network 与 Subnet 是 1 对多 :一个 subnet 只属于一个 network;一个 network 可以有多个 subnet(不同 IP 段),但 CIDR 不能重叠。

  • 同一 network 内:10.10.1.0/24 和 10.10.1.0/24 两个 subnet------无效(CIDR 重叠);
  • 不同 network 间:两个 network 各自一个 10.10.1.0/24------有效。

CIDR 重叠为什么不会冲突?因为 Neutron 的 router 用 network namespace 实现,每个 router 有自己独立的路由表:两个 subnet 走同一个 router,只有指定的一个可被路由;走不同 router,各自都能路由。

4.3 Port:虚拟交换机上的端口

Port 可以看做虚拟交换机上的一个端口,上面定义了 MAC 地址和 IP 地址。实例的虚拟网卡 VIF(Virtual Interface)绑定到 port 时,port 把 MAC 和 IP 分配给 VIF。

Subnet 与 Port 是 1 对多:一个 port 必须属于某个 subnet,一个 subnet 可以有多个 port。

4.4 资源概念链(背下来)

text 复制代码
Project 1:m Network 1:m Subnet 1:m Port 1:1 VIF (m:1 Instance)

4.5 Fixed IP 与 Floating IP

Fixed IP Floating IP
来源 从所属 subnet 分配 从外部网络(External) 分配
用途 实例间内部通信 外部访问实例
变化 创建即固定 动态绑定/解绑,映射到 Fixed IP

4.6 安全组(Security Group)

  • 通过 iptables 限制进出实例的网络包;
  • default 安全组的默认行为:允许所有出口流量,入口只放「来自内部」的流量------外部默认进不来,这就是实验里要自建安全组放行 ICMP/TCP 的原因(实操篇展开)。

4.7 Provider 网络与 Self-service 网络

  • Provider Network(提供商网络):由管理员创建、映射到数据中心现有物理网络的网络,虚拟机直接「骑」在真实网络上;
  • Self-service Network(自助网络):租户自己创建的虚拟网络,对外通信要经过虚拟路由器 + 外部网络做 SNAT/浮动 IP。

五、Neutron 架构:一个请求怎么变成真实网络

与 OpenStack 其他服务一样,Neutron 采用分布式架构,由多个组件共同对外提供网络服务:

组件 职责
Neutron Server 对外提供 OpenStack 网络 API,接收请求并调用 Plugin 处理
Plugin 处理 Server 发来的请求,维护 OpenStack 逻辑网络状态,并调用 Agent 处理请求;分 Core Plugin (核心二层/三层实现)和 Service Plugin(路由器、防火墙、LBaaS 等扩展服务)
Agent 处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能
Network Provider 提供网络服务的虚拟或物理网络设备:Linux Bridge、OVS 或支持 Neutron 的物理交换机
Queue Server、Plugin、Agent 之间通过消息队列通信和调用
Database 存放网络状态信息:Network、Subnet、Port、Router 等

记住处理链路:API → Server → Plugin →(消息队列)→ Agent → Provider------「API 管接单,Plugin 管调度,Agent 管干活」。

六、典型场景:流量到底怎么走

理论部分的落脚点是会分析流量走向。两个最典型的场景组合:

Linux Bridge + Flat/VLAN 网络:实例 vNIC → TAP 设备 → Linux Bridge → 物理网卡。Flat 网络不打标签直接出物理网络;VLAN 网络在桥上打 802.1q 标签后出去。

Open vSwitch + VXLAN 网络:实例 vNIC → VETH/Br-int → OVS 打 VNI 封装成 UDP → 物理网络 → 对端 OVS 解封装。跨节点的「同网段」其实是隧道在三层网络上又拉出来的一层二层。

南北向与东西向:

  • 南北向流量:实例与外部网络之间的流量。用 Fixed IP 时出去走 SNAT;外部进来访问要用 Floating IP(DNAT 映射);
  • 东西向流量 :实例之间的流量。同一个网络 里直接二层交换可达;不同网络要经 router 三层路由。

一句话总结:二层看交换机(同网),三层看路由器(跨网),进出看 NAT(南北),隔离看安全组(门口)。

七、命令速查(理论篇涉及的基础命令)

命令 关键选项/参数 说明
brctl addbr BRIDGE --- 创建 Linux Bridge(需 bridge-utils)
brctl addif BRIDGE DEVICE --- 把设备(如 eth0、tap0)加入桥
ovs-vsctl add-br BRIDGE --- 创建 OVS 网桥
ovs-vsctl add-port BRIDGE PORT --- 往 OVS 网桥加端口
ovs-vsctl show --- 查看 OVS 配置全貌
ovs-vsctl dump-flows BRIDGE --- 查看流表(转发规则)
ip netns 相关 --- 查看/操作 network namespace(router 的实现载体)

📖 建网络、子网、路由器、浮动 IP、安全组的实操命令与界面步骤,见第 2 篇《Neutron 网络管理(实操)》;架构与九大服务总览见《OpenStack 装了却说不清它是什么?》7.8 节。

附:关键英文全称

缩写 全称 含义
NaaS Networking as a Service 网络即服务,Neutron 的设计目标
SDN Software-Defined Networking 软件定义网络
NIC Network Interface Card 网卡
vNIC / VIF Virtual NIC / Virtual Interface 虚拟网卡 / 虚拟网络接口
OVS Open vSwitch 开源虚拟交换机
VNI VXLAN Network Identifier VxLAN 的分段 ID
LBaaS Load-Balancing as a Service 负载均衡服务(默认 HAProxy)
FWaaS Firewall as a Service 防火墙服务(管路由器,区别于安全组)
SNAT / DNAT Source / Destination NAT 源地址转换(出去)/ 目的地址转换(浮动 IP 进来)
相关推荐
Android系统攻城狮2 小时前
Linux FFmpeg深度解析之avcodec_flush_buffers调用流程与实战(十九)
linux·运维·服务器·ffmpeg·车载音视频·ffmpeg音视频进阶
QXWZ_IA3 小时前
边坡监测预算有限时的建设顺序:虚拟基准站与成本账
网络·数据库
水饺编程4 小时前
第2章:Linux 基础,解压缩【.tar.bz2】压缩包文件
linux·c语言·汇编
Y3815326624 小时前
用 httpx 写 SerpBase 异步客户端:连接池与超时配置
运维·服务器·数据库
Zevalin爱灰灰4 小时前
Linux入门第二部分(ARM裸机篇) 第二章 Cortex-A7 MPCore架构与ARM汇编基础
linux·汇编·arm开发·嵌入式
倔强的石头1064 小时前
【Linux指南】进程通信系列(七):System V 信号量 —— 同步互斥的内核原语
linux·运维·服务器
GeW4 小时前
从"补短板"到"强优势"Linux与数据库认证成为产业跃迁人才支点
linux·数据库
PellyKoo6 小时前
【Ubuntu】GTX 1080 Ti 显卡占用为0但功率高达60W的排查与解决
linux·运维·ubuntu
聪明蛋子哟7 小时前
大模型应用“最后一公里”:从Prompt工程到MCP协议,如何实现跨系统的高可用集成?
网络·prompt