在开发Kata/remote-hypervisor(也称为peer-pods)方案时 , 我遇到了一个问题,即Kube.NETes pod IP在工作节点上无法访问 。在本博客中,我将描述Kubernetes网络故障排查过程,希望对读者有帮助 。
译自A Hands-on Kubernetes Network Troubleshooting Journey 。
Kata远程管理程序(peer-pods)方案通过在AWS或Microsoft Azure等基础设施环境中使用本机基础设施管理API(如在AWS上创建Kata VM时使用AWS API,在Azure上创建时使用Microsoft Azure API) , 实现在任何基础设施环境中创建Kata VM 。CNCF保密容器项目的cloud-api-adaptor子项目实现了Kata远程管理程序 。
如下图所示,在peer-pods方案中,pod(Kata)虚拟机在Kubernetes(K8s)工作节点外部运行 , 通过VXLAN隧道从工作节点访问pod IP 。使用隧道可以确保pod联网继续正常工作,无需对CNI网络做任何改变 。
【Kubernetes网络故障排查实战之旅】
文章插图
当使用Kata容器时,Kubernetes pod在虚拟机内运行 , 因此我们将运行pod的虚拟机称为Kata VM或pod虚拟机 。
问题pod IP10.132.2.46,它位于pod虚拟机上(IP:192.168.10.201) , 从工作节点虚拟机(IP:192.168.10.163)无法访问 。
以下是我环境中的虚拟机详细信息 —— 工作节点虚拟机和pod(Kata)虚拟机 。使用的Kubernetes CNI是OVN-Kubernetes 。
+===========================+================+================+|VM名称|IP地址|备注|+===========================+================+================+| ocp-412-ovn-worker-1| 192.168.10.163 | 工作节点虚拟机 |+---------------------------+----------------+----------------+| podvm-Nginx-priv-8b726648 | 192.168.10.201 | Pod虚拟机|+---------------------------+----------------+----------------+
最简单的解决方案就是请网络专家来解决这个问题 。然而,在我的情况下,由于其他紧迫问题,专家无法直接参与解决 。此外,peer-pods网络拓扑结构还比较新,涉及多个网络栈 —— Kubernetes CNI、Kata网络和VXLAN隧道,使得根本原因难以查明且非常耗时 。因此,我将这种情况视为提高我的Kubernetes网络技能的机会 。在一些linux网络核心专家的指导下 , 我开始自行调试 。
在后续章节中,我将通过我的方法带您逐步了解调试过程和找到问题根本原因 。我希望这个过程能对Kubernetes网络问题故障排除有所帮助 。
故障排查 - 第一阶段在高层面上,我采取的方法包含以下两个步骤:
- 了解网络拓扑结构
- 从拓扑结构中识别有问题的部分
[root@ocp-412-worker-1 core]# ping 10.132.2.46
Linux会参考路由表来确定发送数据包的目的地 。[root@ocp-412-worker-1 core]# ip route get 10.132.2.4610.132.2.46 dev ovn-k8s-mp0 src 10.132.2.2 uid 0
因此,到pod IP的路由是通过设备ovn-k8s-mp0让我们获取工作节点网络详细信息,并检索有关ovn-k8s-mp0设备的信息 。
[root@ocp-412-ovn-worker-1 core]# ip rdefault via 192.168.10.1 dev br-ex proto dhcp src 192.168.10.163 metric 4810.132.0.0/14 via 10.132.2.1 dev ovn-k8s-mp010.132.2.0/23 dev ovn-k8s-mp0 proto kernel scope link src 10.132.2.2169.254.169.0/29 dev br-ex proto kernel scope link src 169.254.169.2169.254.169.1 dev br-ex src 192.168.10.163 mtu 1400169.254.169.3 via 10.132.2.1 dev ovn-k8s-mp0172.30.0.0/16 via 169.254.169.4 dev br-ex mtu 1400192.168.10.0/24 dev br-ex proto kernel scope link src 192.168.10.163 metric 48[root@ocp-412-ovn-worker-1 core]# ip a[snip]2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master ovs-system state UP group default qlen 1000link/ether 52:54:00:f9:70:58 brd ff:ff:ff:ff:ff:ff3: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000link/ether 32:7c:7a:20:6e:5a brd ff:ff:ff:ff:ff:ff4: genev_sys_6081: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65000 qdisc noqueue master ovs-system state UNKNOWN group default qlen 1000link/ether 3a:9c:a8:4e:15:0c brd ff:ff:ff:ff:ff:ffinet6 fe80::389c:a8ff:fe4e:150c/64 scope linkvalid_lft forever preferred_lft forever5: br-int: <BROADCAST,MULTICAST> mtu 1400 qdisc noop state DOWN group default qlen 1000link/ether d2:b6:67:15:ef:06 brd ff:ff:ff:ff:ff:ff6: ovn-k8s-mp0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue state UNKNOWN group default qlen 1000link/ether ee:cb:ed:8e:f9:e0 brd ff:ff:ff:ff:ff:ffinet 10.132.2.2/23 brd 10.132.3.255 scope global ovn-k8s-mp0valid_lft forever preferred_lft foreverinet6 fe80::eccb:edff:fe8e:f9e0/64 scope linkvalid_lft forever preferred_lft forever8: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000link/ether 52:54:00:f9:70:58 brd ff:ff:ff:ff:ff:ffinet 192.168.10.163/24 brd 192.168.10.255 scope global dynamic noprefixroute br-exvalid_lft 2266sec preferred_lft 2266secinet 169.254.169.2/29 brd 169.254.169.7 scope global br-exvalid_lft forever preferred_lft foreverinet6 fe80::17f3:957b:5e8d:a4a6/64 scope link noprefixroutevalid_lft forever preferred_lft forever[snip]
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 网络用语集美是啥 网络用语集美是骂人吗
- 网络用语集美什么梗
- 电信网络光猫光信号闪红灯 中国电信光猫光信号闪红灯解决方案
- 网络电视怎么调成TV,怎么在网络电视上设置优酷什么的
- 网络用语内卷是什么意思 网络用语内卷是什么意思梗
- 离谱!孕妇和中学生也深陷其中,网络平台身材焦虑何时休
- 基于Kubernetes网关API策略的流量管理
- 连WiFi要不要关闭数据网络,听听中国移动怎么说
- 如何通过三行配置解决在Kubernetes中的gRPC扩展问题
- CISA发布十大常见网络安全错误配置