OVN总结


参考:https://www.sdnlab.com/18600.html

三、OVN L3 对比 Neutron L3

Neutron 的三层功能主要有路由,SNAT 和 Floating IP(也叫 DNAT),它是通 Linux kernel 的namespace 来实现的,每个路由器对应一个 namespace,利用 Linux TCP/IP 协议栈来做路由转发。

OVN 支持原生的三层功能,不需要借助 Linux TCP/IP stack,用OpenFlow 流表来实现路由查找,ARP 查找,TTL 和 MAC 地址的更改。OVN 的路由也是分布式的,路由器在每个计算节点上都有实例,有了 OVN 之后,不需要 Neutron L3 agent 了 和DVR了。

四、OVN和其它通用SDN控制器(比如OpenDayLight)的主要区别

  • OVN专注于实现云计算管理平台场景下的SDN控制器
  • OVN专注于实现二层和三层网络功能。除了在传输层实现了基于L4的ACL 外,基本上不在L4 ~ L7层实现某些功能。

六、OVN的架构和分析

先来一张简单明了的架构图

看完上图,感觉OVN的架构很简单是不? 再看看我从网上找的另一张更详细的架构图:

OVN/CMS Plugin 是Neutron的一个插件,作为OVN 和 CMS 之间的接口 。它将CMS中的数据(存储在Neutron DB)翻译成一种“中间格式”。

这种中间格式就是逻辑网络配置数据,这样CMS中的网络配置数据就能够被OVN理解 (准确的说是能够被OVN的Northbound DB 所理解)。

Northbound DB 里面存的就是上面OVN/CMS Plugin翻译之后的逻辑网络的相关数据。比如 logical switch,logical router,logical port和ACL。

Northbound DB 里面的几乎所有的内容都是由 CMS 产生的

OVN-northd 类似于一个集中的控制器,监听Northbound DB 数据库的内容变化,它把 Northbound DB 里面的逻辑网络的相关数据翻译成 Southbound DB 可以理解的格式(logical datapath flows),并传递给 Southbound DB 进行存储,进而被所有的chassis 读取和应用。 (关于chassis这个概念 ,本人会在下一篇博文中进行介绍。)

Southbound DB 处在 OVN 架构的核心,它是 OVN 中最重要的部分,它跟 OVN 的其他组件都有交互。 里面存的数据和 Northbound DB 语义完全不一样,主要包含 3 类数据(第二类数据就是OVN-northd 从Northbound DB 翻译过来的):

一、物理网络数据,比如 hypervisor的 IP 地址,hypervisor的 tunnel 封装格式;

二、逻辑网络数据,比如报文如何在逻辑网络中转发;

三、物理网络和逻辑网络的绑定关系,比如逻辑端口关联到哪个 hypervisor上面。这类数据存储在binding表中,字段有uuid,chassis, logical_datapath, logical_port, mac, parent_port, tag, tunnel_key。

如果对这里的2次翻译不太明白的话,我举个例子:
有四个人在一起聊天,他们分别来自不同国家。
一个英国人只会英语,
一个伊拉克人同时掌握英语和阿拉伯语,
一个伊朗人同时掌握阿拉伯语和俄罗斯语,
一个俄罗斯人只会俄罗斯语。
英国人讲的话要被俄罗斯人理解是不是要先被伊拉克人翻译为阿拉伯语,再被伊朗人翻译俄罗斯语。 这个过程需要2个人进行翻译。

ovn-controller 是 OVN 里面的 agent,类似于 Neutron 里面的 ovs-agent,它也是运行在每个 hypervisor和软件网关之上。

它有下面2种功能:
(1)把物理网络的信息写到 Southbound DB 里面(这类信息就包括 Southbound DB中的第一类数据);
(2)把 Southbound DB 里面存的一些数据转化成 Openflow flow 配到本地的 OVS table 里面,来实现报文的转发。

第2个功能的具体实现机制就是:
ovn-controller连接到到本地的ovsdb-server ,监控、读取、管理OpenvSwitch的配置信息;

ovn-controller作为ovs-vswitchd 的Openflow 控制器来控制流量的转发。另外,从架构图中就可看出ovn-controller是一种分布式SDN控制器。

ovs-vswitchd 和 ovsdb-server 是 OVS 的两个进程:

  • ovs-vswitchd :核心模块,实现交换功能,和Linux内核模块一起,实现基于流的交换;
  • ovsdb-server :是一个数据库。其保存了整个OVS的配置信息,包括接口,流表和VLAN等;ovs-vswitchd从其查询配置信息;

小结:OVN 给 Neutron带来实现机制方面的变化

从 OVN 的架构可以看出,OVN 里面数据的读写都是通过 OVSDB来做的,取代了 Neutron 的消息队列机制,所以有了 OVN 之后,Neutron 里面所有的 agent 都不需要了,Neutron 变成了一个 API server 来处理用户的 REST 请求,其他的功能都交给 OVN 来做,只需要在 Neutron 里面加一个 plugin 来调用配置 OVN。

Neutron 里面的子项目 networking-ovn 就是实现 OVN 的 plugin。Plugin 使用 OVSDB 协议来把用户的配置写在 Northbound DB 里,ovn-northd 监听到 Northbound DB 配置发生改变,然后把配置翻译到 Southbound DB 里面。 ovn-controller 监控到 Southbound DB 数据的发生变化之后,进而更新本地的流表。

OVN 里面报文的处理都是通过 OVS OpenFlow 流表来实现的,而在 Neutron 里面二层报文处理是通过 OVS OpenFlow 流表来实现,三层报文处理是通过 Linux TCP/IP 协议栈来实现。

OVN实验:

https://blog.youkuaiyun.com/zhengmx100/article/details/71698641


OVN部署框架

OVN对于网络功能的实现,秉承的是分布式思想。因此网络功能都分布在计算节点,并且没有一个专门的网络节点。但是OVN需要独立的Database node。这是因为OVN目前采用ovsdb-server作为其DB,一方面,这对于OVN的部署很方便,因为OVN本身就基于OVS,采用ovsdb-server可以避免新增依赖。但是另一方面,ovsdb-server之前的主要应用场景是给OVS存储hypervisor本地的虚拟网络设备信息,而OVN是一个集群内运行的软件,ovsdb-server明显不能胜任这种大规模的数据读写。同时,前面说过ovn-northd是一个集中式进程,因此用一个独立的Database node来运行ovn-northd并存储Northbound DB和Southbound DB,可以一定程度的缓解瓶颈问题。

OVN与OpenStack集成之后的运行框架如下图所示 :





### 关于 Kube-OVN `br-init` 配置及其初始化问题 #### 什么是 `br-init` 在 Kube-OVN 中,`br-init` 是指桥接网络接口的初始化过程。这一过程通常涉及创建 Open vSwitch (OVS) 桥梁并将其绑定到 Kubernetes 节点上。此桥梁用于支持 Pod 和 Service 的网络通信。 Kube-OVN 使用 OVS 来实现其 CNI 功能,因此正确配置和初始化 OVS 桥梁对于整个集群的正常运行至关重要[^1]。 --- #### 如何配置 `br-init` Kube-OVN 提供了一个默认的 OVS 桥名称 `ovn-k8s-br`,该名称可以通过修改配置文件中的参数来自定义。以下是与 `br-init` 相关的关键配置项: - **bridgeName**: 定义使用的 OVS 桥梁名称,默认为 `ovn-k8s-br`。 - **hybridOverlayBridge**: 如果启用了混合覆盖模式,则需要额外指定一个专用桥梁。 - **nodeNicCidr**: 设置节点 NIC CIDR 地址范围,这会影响如何分配 IP 给 Pods。 这些配置可以在 Kube-OVN 的 CRD 或者 YAML 文件中找到,并通过自定义资源对象进一步调整[^4]。 示例配置片段如下所示: ```yaml apiVersion: kubeovn.io/v1 kind: Network metadata: name: default spec: bridge: ovn-k8s-br # 自定义桥梁名 cidrBlock: 10.16.0.0/16 # 子网范围 ``` 如果遇到初始化失败的情况,可以尝试手动验证以下几点: 1. 确认目标节点是否存在对应的物理网卡设备; 2. 检查是否有冲突的现有 OVS 桥梁; 3. 查看日志输出以定位具体错误原因。 执行调试命令时可参考以下方法: ```bash # 显示当前系统的 OVS 桥梁状态 ovs-vsctl show # 手动添加测试用桥梁 sudo ovs-vsctl add-br test-br ``` 上述操作有助于排查潜在的基础架构层面问题[^2]。 --- #### 常见初始化问题及解决方案 ##### 1. 桥梁未成功创建 可能的原因包括权限不足或者已有同名桥梁存在。建议先清理残留数据再重试部署流程。 修复步骤: ```bash kubectl delete -f https://raw.githubusercontent.com/kubeovn/kube-ovn/master/dist/yaml/cleanup.yaml kubectl apply -f https://raw.githubusercontent.com/kubeovn/kube-ovn/master/dist/yaml/kube-ovn.yaml ``` ##### 2. 日志显示无法访问特定端口 某些安全组策略可能会阻止必要的流量进入节点。需确认防火墙设置允许相关服务端口开放(如 Geneve 协议所需端口)。 ##### 3. 控制器逻辑异常 当控制器未能正确定位到新加入节点上的硬件信息时也可能引发此类状况。此时应深入分析 controller 的行为轨迹。 查阅源码得知,实际调用路径是从 `main.go` 开始逐步传递控制权至各个模块直至完成最终处理[^3]。 --- #### 总结 针对 Kube-OVN 的 `br-init` 初始阶段所面临的技术挑战,合理规划基础资源配置以及遵循官方文档指导能够有效降低复杂度。同时借助社区反馈不断优化实践方案亦是非常重要的环节之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值