ovn的brp0掉ip问题
问题背景
k8s 网络选择ovn-kubernetes 的时候br-ex br需要配置uplink口(eth0网口)的ip信息,当重启宿主机时候br-ex的ip信息不能自动配置ip
ovn-kubernetes(ovnkube-node)分析
init node 启动代码 start 方法
1 | func bridgeForInterface(intfName, nodeName, physicalNetworkName string, gwIPs []*net.IPNet) (*bridgeConfiguration, error) { |
相关ovs命令
1 | # 情况1: |
情况1: 网桥存在brens3f0 分析 uplinkName, err := util.GetNicName(bridgeName)
1 | // GetNicName returns the physical NIC name, given an OVS bridge name |
相关ovs命令
1 | root@master01:~# ovs-vsctl list-ports brens3f0 |
情况2: brens3f0 网桥不存在,ensf0不是网桥 bridgeName, err := util.NicToBridge(intfName)
1 | // NicToBridge creates a OVS bridge for the 'iface' and also moves the IP |
相关ovs命令
1 | root@work01:~# ovs-vsctl --timeout=15 -- --may-exist add-br brens3f0 -- br-set-external-id brens3f0 bridge-id brens3f0 -- br-set-external-id brens3f0 bridge-uplink ens3f0 -- set bridge brens3f0 fail-mode=standalone other_config:hwaddr=52:54:00:02:e6:b9 -- --may-exist add-port brens3f0 ens3f0 -- set port ens3f0 other-config:transient=true |
默认启动项添加分析
1 | func setupDefaultFile() { |
注意:ubuntu 系统添加参数不对 OVS_CTL_OPTS=”$OVS_CTL_OPTS –delete-transient-ports” ==》 改为OVS_CTL_OPTS=”–delete-transient-ports”
ovs 分析
ovs 的 –delete-transient-ports 参数介绍
1 | If the --delete-transient-ports option was used, deletes all ports |
ovs 启动脚步 –delete-transient-ports 参数用法介绍
1 | # 查看ovs的启动脚步,cat /usr/share/openvswitch/scripts/ovs-ctl |
解决方法
总结:ovs设置–delete-transient-ports 启动参数可以解决 br ip丢失问题
ubuntu系统修改/etc/default/openvswitch-switch
ovs和ovnkube-node执行逻辑梳理
- 根据ovnkube-node 代码分析只有出现 ens3f0 网卡不在对应的brens3f0中时候(也是情况2)的条件下,添加ens3f0 port 到brens3f0中,并给brens3f0 网桥设置ip和route 信息
- setupDefaultFile 方法配置的 ovs启动参数 –delete-transient-ports 得知ovs启动会清理other-config:transient=true的port
- 在添加 ens3f0 到 brens3f0 网桥时候会给 ens3f0 port 标记other-config:transient=true 信息
- 当节点重启后
- ovs服务在启动完ovsdb-server 后 会根据–delete-transient-ports 参数删除other-config:transient=true 的port(ens3f0)从brens3f0 桥中
- ovnkube-node 容器启动时候,会校验 ens3f0 port是否在brens3f0 桥中
- ens3f0 port 已经被删除,所有校验失败,执行情况2 添加ens3f0 port 到brens3f0中,并给brens3f0 网桥设置ip和route 信息