OVN tunnel

OVN tunnel

OVN 支持的 tunnel 类型有三种,分别是 Geneve,STT 和 VXLAN。HV 与 HV 之间的流量,只能用 Geneve 和 STT 两种,HV 和 VTEP 网关之间的流量除了用 Geneve 和 STT 外,还能用 VXLAN,这是为了兼容硬件 VTEP网关,因为大部分硬件 VTEP 网关只支持 VXLAN。

虽然 VXLAN 是数据中心常用的 tunnel 技术,但是 VXLAN header 是固定的,只能传递一个 VNID(VXLAN network identifier),如果想在 tunnel 里面传递更多的信息,VXLAN 实现不了。所以 OVN 选择了Geneve 和 STT,Geneve 的头部有个 option 字段,支持 TLV 格式,用户可以根据自己的需要进行扩展,而 STT的头部可以传递 64-bit 的数据,比 VXLAN 的 24-bit 大很多。

OVN tunnel 封装时使用了三种数据,

  • Logical datapath identifier(逻辑的数据通道标识符):datapath 是 OVS 里面的概念,报文需要送到 datapath 进行处理,一个 datapath 对应一个 OVN 里面的逻辑交换机或者逻辑路由器,类似于 tunnel ID。这个标识符有 24-bit,由 ovn-northd 分配的,全局唯一,保存在 Southbound DB 里面的表 Datapath_Binding 的列tunnel_key 里。
  • Logical input port identifier(逻辑的入端口标识符):进入 logical datapath 的端口标识符,15-bit 长,由 ovn-northd 分配的,在每个 datapath 里面唯一。它可用范围是 1-32767,0 预留给内部使用。保存在 Southbound DB 里面的表 Port_Binding 的列 tunnel_key 里。
  • Logical output port identifier(逻辑的出端口标识符):出 logical datapath 的端口标识符,16-bit 长,范围 0-32767 和 logical input port identifier 含义一样,范围 32768-65535 给组播组使用。对于每个 logical port,input port identifier 和 output port identifier 相同。

如果 tunnel 类型是 Geneve,Geneve header 里面的 VNI 字段填 logical datapath identifier,Option 字段填 logical input port identifier 和 logical output port identifier,TLV 的 class 为 0xffff,type 为 0,value 为 1-bit 0 + 15-bit logical input port identifier + 16-bit logical output port identifier。

如果 tunnel 类型是 STT,上面三个值填在 Context ID 字段,格式为 9-bit 0 + 15-bit logical input port identifier + 16-bit logical output port identifier + 24-bit logical datapath identifier。

OVS 的 tunnel 封装是由 Openflow 流表来做的,所以 ovn-controller 需要把这三个标识符写到本地 HV 的Openflow flow table 里面,对于每个进入 br-int 的报文,都会有这三个属性,logical datapathidentifier 和 logical input port identifier 在入口方向被赋值,分别存在 openflow metadata 字段和 Nicira 扩展寄存器 reg6 里面。报文经过 OVS 的 pipeline 处理后,如果需要从指定端口发出去,只需要把 Logical output port identifier 写在 Nicira 扩展寄存器reg7 里面。

OVN tunnel 里面所携带的 logical input port identifier 和 logical output port identifier 可以提高流表的查找效率,OVS 流表可以通过这两个值来处理报文,不需要解析报文的字段。

OVN 里面的 tunnel 类型是由 HV 上面的 ovn-controller 来设置的,并不是由OpenStack指定的,并且 OVN 里面的 tunnel ID 又由 OVN 自己分配的,所以用 neutron 创建 network 时指定 tunnel 类型和 tunnel ID(比如 vnid)是无用的,OVN 不做处理。

<think>我们正在讨论OVN(Open Virtual Network)的组件及其功能说明。根据提供的引用,OVN是一个基于Open vSwitch(OVS)的网络虚拟化解决方案,用于构建软件定义网络(SDN)。它提供了一套分布式的机制来管理和控制虚拟网络。以下将详细介绍OVN的主要组件及其功能。 ### OVN 核心组件介绍 #### 1. **OVN 北向数据库 (OVN Northbound Database, OVN_NB)** - **功能**:存储用户定义的网络配置(逻辑网络拓扑),包括逻辑交换机、逻辑路由器、ACL规则、负载均衡器等[^2]。 - **接口**:通过`ovn-nbctl`命令行工具或REST API进行配置。 - **示例配置**: ```bash # 创建逻辑交换机 ovn-nbctl ls-add ls1 # 添加负载均衡器到逻辑交换机 ovn-nbctl lb-add lb1 192.168.1.100:80 10.0.0.1:80,10.0.0.2:80 tcp ovn-nbctl ls-lb-add ls1 lb1 ``` #### 2. **OVN 南向数据库 (OVN Southbound Database, OVN_SB)** - **功能**:存储由OVN中央组件转换后的物理网络映射信息,包括虚拟机端口绑定、隧道端点、路由表等[^2]。 - **作用**:作为控制平面(如`ovn-northd`)与数据平面(如`ovn-controller`)之间的桥梁。 #### 3. **中央组件 (ovn-northd)** - **功能**:将北向数据库中的逻辑网络配置转换为南向数据库中的物理网络流表[^2]。 - **工作方式**:实时监控OVN_NB的变化,并生成对应的OVN_SB记录。 #### 4. **本地控制器 (ovn-controller)** - **部署位置**:每台运行OVS的主机(计算节点或网关节点)。 - **功能**: - 从OVN_SB获取本机相关的网络配置。 - 将配置转换为OVS流表并下发到本地OVS实例[^2]。 - 管理隧道端点(如VXLAN、Geneve)和本地虚拟机端口。 #### 5. **OVN 网关 (OVN Gateway)** - **类型**: - **分布式网关**:默认模式,所有计算节点均可处理南北向流量。 - **集中式网关**:通过专用节点处理外部网络流量。 - **配置示例**: ```bash # 设置集中式网关 ovn-nbctl set logical_router lr1 options:chassis=gw1 ``` ### 关键功能说明 #### 逻辑网络抽象 - **逻辑交换机 (Logical Switch)**:提供二层虚拟网络,支持MAC学习、广播域隔离。 - **逻辑路由器 (Logical Router)**:提供三层路由功能,支持静态路由、NAT、负载均衡[^3]。 #### 网络服务 1. **负载均衡 (Load Balancing)** - 支持四层(TCP/UDP)负载均衡,可配置VIP和后端服务器池[^3]。 - 示例: ```bash ovn-nbctl lb-add lb2 10.10.10.22:8000 "10.10.10.2:8000,10.10.10.3:8000" tcp ``` 2. **访问控制列表 (ACL)** - 基于流量的五元组(源/目的IP、端口、协议)设置允许/拒绝规则。 - 示例: ```bash ovn-nbctl acl-add ls1 from-lport 1002 "ip4.src==10.0.0.0/24" allow ``` 3. **NAT 与 DHCP** - 提供SNAT(源地址转换)、DNAT(目的地址转换)功能。 - 通过OVN内置的DHCP服务为虚拟机分配IP地址。 ### 组件交互流程 ```mermaid sequenceDiagram participant User as 管理员 participant NB as OVN_NB participant Northd as ovn-northd participant SB as OVN_SB participant Controller as ovn-controller participant OVS as Open vSwitch User->>NB: 配置逻辑网络 (ovn-nbctl) NB->>Northd: 通知配置变更 Northd->>SB: 生成物理映射 loop 主机同步 SB->>Controller: 推送本机配置 Controller->>OVS: 下发流表 end ``` ### 典型部署架构 ```mermaid graph TD subgraph 控制节点 NB(OVN_NB数据库) SB(OVN_SB数据库) Northd(ovn-northd进程) end subgraph 计算节点1 Controller1(ovn-controller) OVS1(Open vSwitch) VM1[虚拟机] end subgraph 计算节点2 Controller2(ovn-controller) OVS2(Open vSwitch) VM2[虚拟机] end NB --> Northd Northd --> SB SB --> Controller1 SB --> Controller2 Controller1 --> OVS1 Controller2 --> OVS2 OVS1 --> VM1 OVS2 --> VM2 ``` ### 性能优化建议 - **流表压缩**:通过`ovn-northd`的`lflow-cache`减少南向数据库记录数量。 - **网关分流**:对东西向流量使用分布式网关,南北向流量使用集中式网关。 --- ### 相关问题 1. OVN 如何实现跨主机的虚拟机通信? 2. 如何配置 OVN 的分布式 NAT 功能? 3. OVN 中的 ACL 规则与 OpenFlow 规则有何区别? 4. OVN 的高可用性方案有哪些? 5. 如何监控 OVN 网络流量和性能?[^1][^2]</think>### OVN 核心组件及功能详解 #### 一、OVN 架构概述 OVN(Open Virtual Network)是基于 Open vSwitch(OVS)的分布式 SDN 解决方案,其架构采用**控制平面与数据平面分离**的设计: ```mermaid graph TD A[管理平面] --> |配置下发| B(OVN Northbound DB) B --> C[ovn-northd] C --> D(OVN Southbound DB) D --> E[ovn-controller] E --> F[Open vSwitch] ``` 核心特性包括: - 逻辑网络抽象(交换机/路由器) - 分布式网络服务(LB/ACL/DHCP) - 物理网络无关性 - 多租户隔离支持[^2] #### 二、核心组件功能说明 1. **OVN Northbound 数据库 (OVN_NB)** - **功能**:存储管理员定义的**逻辑网络配置** - 管理对象: - 逻辑交换机 (Logical Switches) - 逻辑路由器 (Logical Routers) - 负载均衡器 (Load Balancers) - 访问控制列表 (ACLs) - **操作工具**:`ovn-nbctl` ```bash # 示例:创建负载均衡器[^3] ovn-nbctl lb-add lb1 192.168.1.100:80 10.0.0.1:80,10.0.0.2:80 tcp ``` 2. **ovn-northd 服务** - **核心作用**:逻辑网络 ➔ 物理网络的**翻译器** - 工作流程: 1. 监控 OVN_NB 配置变更 2. 生成物理网络流表规则 3. 写入 OVN Southbound 数据库 - **关键转换**:逻辑端口 ➔ 物理端口绑定 3. **OVN Southbound 数据库 (OVN_SB)** - **功能**:存储**物理网络状态**信息 - 关键数据: - 主机隧道端点 (Chassis) - 端口绑定关系 (Port_Binding) - 数据路径流表 (Datapath_Binding) - **特点**:分布式强一致性数据库 4. **ovn-controller 代理** - **部署位置**:每台计算/网络节点 - **核心功能**: - 从 OVN_SB 获取本机流表规则 - 将规则编译为 OpenFlow 指令 - 下发到本地 OVS 实例 - 报告物理端口状态 - **关键进程**:`ovn-controller` #### 三、网络功能实现机制 1. **负载均衡 (Load Balancing)** - 支持四层(TCP/UDP)负载分发 - **配置示例**[^3]: ```bash ovn-nbctl lb-add lb2 10.10.10.22:8000 "10.10.10.2:8000,10.10.10.3:8000" tcp ovn-nbctl ls-lb-add ls2 lb2 # 绑定到逻辑交换机 ``` - **工作原理**:DNAT + 连接跟踪 2. **逻辑路由器 (Logical Router)** - 实现功能: - 跨子网路由 - 静态路由分发 - SNAT/DNAT - **分布式特性**:路由计算在所有节点执行 3. **安全组 (ACLs)** - 基于五元组的流量控制 - 优先级匹配机制: ```bash ovn-nbctl acl-add ls1 from-lport 1002 "ip4.src==10.0.0.0/24" allow ``` #### 四、典型工作流程 ```mermaid sequenceDiagram participant Admin as 管理员 participant NB as OVN_NB participant Northd as ovn-northd participant SB as OVN_SB participant Controller as ovn-controller participant VM as 虚拟机 Admin->>NB: 创建逻辑网络(ovn-nbctl) NB->>Northd: 配置变更通知 Northd->>SB: 生成物理流表 loop 主机同步 SB->>Controller: 推送本机流表 Controller->>VM: 配置OVS端口 end VM->>VM: 跨主机通信 ``` #### 五、部署注意事项 1. **版本兼容性**: - OVN 从 OVS v2.13.0 开始独立发布[^1] - 需匹配 OVS 版本(建议 ≥2.17) 2. **高可用方案**: - 数据库集群(Raft 协议) - 多 northd 主备部署 3. **性能优化**: - 流表缓存 (lflow-cache) - 并发连接处理 --- ### 相关问题 1. OVN 如何实现虚拟机迁移时的网络连续性? 2. 在 OVN 中如何配置跨数据中心的网络连接? 3. OVN 与 OpenStack Neutron 的集成机制是什么? 4. 如何监控 OVN 网络流量和性能指标? 5. OVN 中的分布式 NAT 与传统集中式 NAT 有何优劣?[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值