Kube-OVN网络VM无法访问外网问题

SuKai November 29, 2024

  1. 现象

Kubernetes集群新添加了一批物理机,成功添加集群后发现新建的虚拟机在新节点上无法访问Internet和集群主机节点,能够Ping通相同子网的虚拟机,能够Ping通Underlay逻辑网关。

  1. 排查

a. 新建一个Pod,现象一样

b. 将Underlay子网IP直接配置在主机节点上,网络一切正常

c. 排除了虚拟机网络环境问题和主机节点外网络问题,问题锁定在Kube-OVN网络内部。

比对虚拟机IP和MAC地址都正确

// 路由器列表
sukai@r1-m34:~$ kubectl ko nbctl lr-list
77b2eff6-ce75-4ab4-8476-df34d347a531 (ovn-cluster)

// 交换机列表
sukai@r1-m34:~$ kubectl ko nbctl ls-list
4585d35c-3a3d-4dc1-bdb2-9544bf15bbd7 (join)
63abfd74-3513-4edb-83a3-bde609fe3585 (ovn-default)
88910c8a-08b3-49f0-98a0-b21eb21620f2 (vmnet)


// 查看我的虚拟机交换机端口
sukai@r1-m34:~$ kubectl ko nbctl lsp-list vmnet
f731988d-7cff-44f6-9835-eb8ccdb32216 (localnet.vmnet)

4ff718cb-c3bf-40f4-9fce-a3c141f4639f (sukai-db01.nanjing)

0a02f7b7-caa3-421c-b700-0ea41fd12990 (vmnet-ovn-cluster)
sukai@r1-m34:~$

// 查看我的虚拟机交换机端口信息
sukai@r1-m34:~$ kubectl ko nbctl show vmnet
switch 88910c8a-08b3-49f0-98a0-b21eb21620f2 (vmnet)
    port vmnet-ovn-cluster
        type: router
        router-port: ovn-cluster-vmnet

    port sukai-db01.nanjing
        addresses: ["d2:b9:8d:e6:61:4b 192.168.10.133"]

    port localnet.vmnet
        type: localnet
        addresses: ["unknown"]

sukai@r1-m34:~$

查看路由配置,发现之前错误配置的Subnet的相关条目仍然在,虽然Subnet已经更新,但路由只是添加了新的路由条目,没有清理掉之前的错误路由条目。

sukai@r1-m34:~$ kubectl ko nbctl lr-policy-list ovn-cluster
Routing Policies
     31000 ip4.dst == $vmnet.u2o_exclude_ip.ip4 && ip4.src == 192.168.0.0/16         reroute                 192.168.0.1
	 31000 ip4.dst == $vmnet.u2o_exclude_ip.ip4 && ip4.src == 192.168.10.0/24         reroute                 192.168.10.1
     31000                          ip4.dst == 10.233.64.0/18           allow
     31000                           ip4.dst == 100.64.0.0/16           allow
     30000                           ip4.dst == 16.19.18.120         reroute               100.64.0.20

     29400                            ip4.dst == 192.168.0.0/16           allow
	 29400                            ip4.dst == 192.168.10.0/24           allow
     29000         ip4.src == $ovn.default.r1.m34_ip4         reroute                100.64.0.6
     
     29000         ip4.src == $ovn.default.r4.w65_ip4         reroute               100.64.0.33
     29000                            ip4.src == 192.168.0.0/16         reroute                 192.168.0.1
	 29000                            ip4.src == 192.168.10.0/24         reroute                 192.168.10.1
  1. 解决

删除多余路由条目

sukai@r1-m34:~/kubeovn$ kubectl ko nbctl lr-policy-del ovn-cluster 31000 "ip4.dst == \$vmnet.u2o_exclude_ip.ip4 && ip4.src == 192.168.10.0/24"
sukai@r1-m34:~/kubeovn$ kubectl ko nbctl lr-policy-del ovn-cluster 29000 "ip4.src == 192.168.10.0/24"
sukai@r1-m34:~/kubeovn$ kubectl ko nbctl lr-policy-del ovn-cluster 29400 "ip4.dst == 192.168.10.0/24"

查看路由

sukai@r1-m34:~/kubeovn$ kubectl ko nbctl lr-policy-list ovn-cluster
Routing Policies
     31000 ip4.dst == $vmnet.u2o_exclude_ip.ip4 && ip4.src == 192.168.0.0/16         reroute                 192.168.0.1
     31000                          ip4.dst == 10.233.64.0/18           allow
     31000                           ip4.dst == 100.64.0.0/16           allow
     30000                           ip4.dst == 16.19.18.120         reroute               100.64.0.20
     
     30000                            ip4.dst == 16.19.18.95         reroute               100.64.0.19
     29400                            ip4.dst == 192.168.0.0/16           allow
     29000         ip4.src == $ovn.default.r1.m34_ip4         reroute                100.64.0.6
     
     29000         ip4.src == $ovn.default.r4.w65_ip4         reroute               100.64.0.33
     29000                            ip4.src == 192.168.0.0/16         reroute                 192.168.0.1
sukai@r1-m34:~/kubeovn$

测试网络工作正常,虚拟机能够访问主机节点和外网。