这是个复杂的共存问题。先说结论:
改端口理论上可以,但两套 OVS 无法真正共存
原因:OVS 内核模块 (openvswitch) 是全局唯一的,一台机器只能运行一个 OVS 数据面实例。两个 ovs-vswitchd 会争夺内核 datapath,无法正常工作。
你现在的架构冲突
┌────────────────┬──────────────────────────────┬─────────────────────────┐ │ 组件 │ Kube-OVN (宿主机) │ Kolla OpenStack │ ├────────────────┼──────────────────────────────┼─────────────────────────┤ │ ovsdb-server │ /var/run/openvswitch/db.sock │ 想要 tcp:127.0.0.1:6640 │ ├────────────────┼──────────────────────────────┼─────────────────────────┤ │ ovs-vswitchd │ 已运行 │ 容器化,冲突 │ ├────────────────┼──────────────────────────────┼─────────────────────────┤ │ ovn-controller │ 连宿主机 OVS │ 连容器 OVS │ ├────────────────┼──────────────────────────────┼─────────────────────────┤ │ br-int │ Kube-OVN 管理 │ OpenStack 也要用 │ └────────────────┴──────────────────────────────┴─────────────────────────┘
可行方案
方案 1:共享同一套 OVS(推荐)
让 kolla 不部署 OVS 容器,直接使用宿主机上 Kube-OVN 的 OVS。只需要给宿主机的 ovsdb-server 加上 TCP 6640 监听:
给现有的 ovsdb-server 加上 TCP 监听(Kube-OVN 的 OVS)
ovs-vsctl set-manager ptcp:6640:127.0.0.1
确认
ss -tlnp | grep 6640
然后在 kolla 中禁用 OVS 容器部署:
globals.yml
enable_openvswitch: false
但问题是 两套 OVN 都要管理 br-int,流表会互相冲突。
方案 2:分开部署在不同节点(真正推荐)
- 节点 A:运行 Kube-OVN(K8s)
- 节点 B:运行 Kolla OpenStack
这是唯一不冲突的方案。
方案 3:OpenStack 用 LinuxBridge 替代 OVN
如果只是测试 OpenStack,避开 OVN:
globals.yml
neutron_plugin_agent: "linuxbridge"
重新 deploy 后 OpenStack 用 LinuxBridge 网络,完全不依赖 OVS,和 Kube-OVN 互不干扰。