Kube-OVN:VPC 创建流程排查清单
在 Kube-OVN 中,创建 VPC 本质是创建一个独立的 OVN 逻辑路由器,并完成从 Kubernetes CRD 到 OVN 逻辑网络、再到节点 OVS 数据面的全链路配置。下面按控制面与数据面分别拆解完整流程。
一、控制面工作(kube-ovn-controller + OVN 控制面)
控制面负责将 Vpc CRD 翻译为 OVN 逻辑网络对象,并持久化、下发流表规则。
1. Kubernetes API 层
- 用户通过
kubectl apply -f vpc.yaml创建VpcCRD 对象(apiVersion: kubeovn.io/v1)。 kube-apiserver验证并将 VPC 资源存入etcd。
2. kube-ovn-controller 核心处理
kube-ovn-controller 是 Kube-OVN 控制面核心,监听 Vpc 事件并执行:
-
监听与触发
- Watch
VpcCRD 的Add事件,进入handleAddOrUpdateVpc逻辑。
- Watch
-
创建 OVN 逻辑路由器(核心映射)
- 调用
ovn-nbctl在 OVN Northbound DB (ovnnb) 中创建逻辑路由器(Logical Router) ,名称与 VPC 一致(如test-vpc-1)。 - 每个 VPC 独占一个逻辑路由器,实现租户级网络隔离。
- 调用
-
配置 VPC 路由与属性
- 若
Vpc.spec.staticRoutes存在,将静态路由添加到该逻辑路由器。 - 配置 VPC 关联的 Namespace 绑定(
spec.namespaces),后续该 Namespace 下的 Subnet/Pod 默认归属此 VPC。 - 处理
enableExternal、extraExternalSubnets等出网配置,关联外部网络。
- 若
-
状态同步
- 将逻辑路由器 ID、状态等信息回写到
VpcCRD 的status字段。
- 将逻辑路由器 ID、状态等信息回写到
3. OVN Northd 与 Southbound DB
- ovn-northd 监听
ovnnb变更,将逻辑路由器/路由规则编译为逻辑流表(Logical Flows) ,写入 OVN Southbound DB (ovnsb) 。 ovnsb存储全集群逻辑网络拓扑与流表,供各节点ovn-controller消费。
二、数据面工作(ovn-controller + OVS + 节点网络)
数据面负责将控制面的逻辑配置,转化为节点上 OVS 的真实流表与转发规则,实现流量隔离与转发。
1. 节点 ovn-controller 拉取与翻译
- 每个节点的
ovn-controller从ovnsb拉取该 VPC 对应的逻辑流表。 - 将逻辑流表翻译为OpenFlow 规则,下发到本地
ovs-vswitchd。
2. OVS 数据面配置(关键隔离机制)
-
Datapath 隔离
- 每个 VPC 对应独立的 Datapath ID,不同 VPC 流量通过不同 Datapath 区分,实现地址空间重叠不冲突。
-
逻辑端口与隧道
- 为该逻辑路由器创建路由器端口(Logical Router Port) ,用于连接后续 Subnet(逻辑交换机)。
- 配置节点间隧道(Geneve/VXLAN),不同 VPC 流量走独立隧道封装,跨节点转发时携带 Datapath ID 标识。
-
流表下发
-
在 OVS 中下发:
- 入方向:匹配 VPC 标识,将流量导入对应 Datapath。
- 转发:按逻辑路由器路由规则执行三层转发。
- 出方向:封装隧道头,跨节点转发。
-
确保不同 VPC 流量完全隔离,无默认互通路径。
-
3. 节点本地网络配置
kube-ovn-cni配合ovs-vswitchd,在节点上创建对应 OVS 网桥与端口,绑定到 VPC 所属 Datapath。- 后续在该 VPC 下创建 Subnet/Pod 时,直接复用此 VPC 的逻辑路由器与 Datapath 上下文。
三、完整流程总览(一句话总结)
- 用户创建
VpcCRD → 2.kube-ovn-controller在 OVN NB 创建逻辑路由器并配置路由 → 3.ovn-northd生成逻辑流表写入 SB → 4. 各节点ovn-controller翻译为 OpenFlow 规则 → 5. OVS 按 Datapath ID 实现 VPC 流量隔离与转发。