Kubernetes网络故障排查实战之旅( 三 )

所以8b7266486ea2861@if2是一个OVS实体 。转储OVS交换机详细信息将提供哪个OVS桥拥有此端口的详细信息 。
如下输出所示,桥br-int拥有这个端口 。
注意,使用ovs-vsctl命令是之前ovs-ofctl dump-ports <bridge> <port>命令的另一种选择 。这是为了展示不同的命令可以帮助探索网络拓扑结构 。
[root@ocp-412-ovn-worker-1 core]# ovs-vsctl show[snap]Bridge br-intfAIl_mode: securedatapath_type: system[snip]Port "8b7266486ea2861"Interface "8b7266486ea2861"[snap]所以br-int拥有在init命名空间中具有podveth端点的端口 。回想一下 , 它还持有ovn-k8s-mp0端口 。让我们也获取pod的vxlan详细信息 。
如下输出所示 , vxlan隧道的远端点是IP192.168.10.201 。这是pod虚拟机的IP 。
[root@ocp-412-ovn-worker-1 core]# ip netns exec $NS ip -d li sh dev vxlan14257: vxlan1@if4257: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/ether ca:40:81:86:fa:73 brd ff:ff:ff:ff:ff:ff link-netns 59e250f6–0491–4ff4-bb22-baa3bca249f6 promiscuity 0 minmtu 68 maxmtu 65535vxlan id 555005 remote 192.168.10.201 srcport 0 0 dstport 4789 nolearning ttl auto ageing 300 udpcsum noudp6zerocsumtx noudp6zerocsumrx addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535一个浮现的问题是数据包如何从eth0接口发送到vxlan1接口 。
这是通过在网络命名空间中设置Linux流量控制(TC)在eth0和vxlan1之间镜像流量来实现的 。这是从Kata容器的设计中已知的 。然而 , 我认为在故障排除网络问题时检查TC配置是一种好的实践 。
下面的输出显示了我环境中pod网络命名空间中设备配置的TC过滤器 。
[root@ocp-412-ovn-worker-1 core]# ip netns exec $NS tc filter show dev eth0 rootfilter parent ffff: protocol all pref 49152 u32 chain 0filter parent ffff: protocol all pref 49152 u32 chain 0 fh 800: ht divisor 1filter parent ffff: protocol all pref 49152 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 terminal flowid not_in_hwmatch 00000000/00000000 at 0action order 1: mirred (Egress Redirect to device vxlan1) stolenindex 1 ref 1 bind 1[root@ocp-412-ovn-worker-1 core]# ip netns exec $NS tc filter show dev vxlan1 rootfilter parent ffff: protocol all pref 49152 u32 chain 0filter parent ffff: protocol all pref 49152 u32 chain 0 fh 800: ht divisor 1filter parent ffff: protocol all pref 49152 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 terminal flowid not_in_hwmatch 00000000/00000000 at 0action order 1: mirred (Egress Redirect to device eth0) stolenindex 2 ref 1 bind 1eth0的出口被重定向到了vxlan1,而vxlan1的出口被重定向到了eth0
有了所有这些细节 , 就可以为参考和进一步分析绘制工作节点网络拓扑图 。拓扑结构如下图所示 。

Kubernetes网络故障排查实战之旅

文章插图
现在,让我们把重点转到pod虚拟机上 。
请注意,pod虚拟机的设计是使用一个名为poDNS的固定pod网络命名空间 。
以下输出显示了pod虚拟机的网络配置:
ubuntu@podvm-nginx-priv-8b726648:/home/ubuntu# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: ens2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 52:54:00:e1:58:67 brd ff:ff:ff:ff:ff:ffinet 192.168.10.201/24 brd 192.168.10.255 scope global dynamic ens2valid_lft 2902sec preferred_lft 2902secinet6 fe80::5054:ff:fee1:5867/64 scope linkvalid_lft forever preferred_lft foreverroot@podvm-nginx-priv-8b726648:/home/ubuntu# ip rdefault via 192.168.10.1 dev ens2 proto dhcp src 192.168.10.201 metric 100192.168.10.0/24 dev ens2 proto kernel scope link src 192.168.10.201192.168.10.1 dev ens2 proto dhcp scope link src 192.168.10.201 metric 100root@podvm-nginx-priv-8b726648:/home/ubuntu# iptables -S-P INPUT ACCEPT-P FORWARD ACCEPT-P OUTPUT ACCEPT以下输出显示了podns网络命名空间内的网络配置 。
root@podvm-nginx-priv-8b726648:/home/ubuntu# ip netns exec podns ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever3: vxlan0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue state UNKNOWN group default qlen 1000link/ether 7e:e5:f7:e6:f5:1a brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 10.132.2.46/23 brd 10.132.3.255 scope global vxlan0valid_lft forever preferred_lft foreverinet6 fe80::7ce5:f7ff:fee6:f51a/64 scope linkvalid_lft forever preferred_lft foreverroot@podvm-nginx-priv-8b726648:/home/ubuntu# ip netns exec podns ip rdefault via 10.132.2.1 dev vxlan010.132.2.0/23 dev vxlan0 proto kernel scope link src 10.132.2.46root@podvm-nginx-36590ccc:/home/ubuntu# ip netns exec podns ip -d li sh vxlan0 3: vxlan0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/ether 7e:e5:f7:e6:f5:1a brd ff:ff:ff:ff:ff:ff link-netnsid 0 promiscuity 0 minmtu 68 maxmtu 65535vxlan id 555005 remote 192.168.10.163 srcport 0 0 dstport 4789 nolearning ttl auto ageing 300 udpcsum noudp6zerocsumtx noudp6zerocsumrx addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535root@podvm-nginx-priv-8b726648:/home/ubuntu# ip netns exec podns iptables -S-P INPUT ACCEPT-P FORWARD ACCEPT-P OUTPUT ACCEPT


推荐阅读