问题如下:
-
ArgoCD 和 Prometheus/Grafana 服务的网络连通性差,出现了如
ImagePullBackOff、CrashLoopBackOff、i/o timeout等错误。 -
你尝试访问相关服务时,出现了
No route to host或connection refused错误。 -
证书相关错误或 K8S 服务间的连接无法建立,导致应用无法启动和运行。
问题根源:
-
CNI (Calico) 网络配置问题 :Calico 没有正确设置或接口未启用,导致 Pod 网络无法正常工作。特别是
tunl0或vxlan等接口的状态为UNKNOWN,并且没有正确的路由设置。 -
内核参数问题 :如
ip_forward和rp_filter设置不正确,影响到网络转发和封装。 -
Kubernetes 网络策略问题:防火墙设置或路由规则可能限制了 Pod 和节点之间的通信。
-
ArgoCD API 连接超时 :由于无法连接到集群的
localhost:8080,导致 ArgoCD 无法拉取目标状态。
解决方法:
(1) 检查网络与接口状态:
-
使用
ip addr确认了网络接口(如tunl0或vxlan)是否存在,且接口是否处于UP状态。 -
使用
ip route确保路由正确,包括 Pod 网段路由(如10.244.1.0/24)是否通过 Calico 接口。 -
通过
sysctl命令检查并修改了内核参数,确保启用了 IP 转发,并关闭了rp_filter(反向路径过滤)。
(2) 重启 Calico 网络组件:
-
在节点上重启了
calico-nodePod,确保 CNI 插件重新初始化并恢复正常的网络连接。 -
使用命令
kubectl -n kube-system delete pod -l k8s-app=calico-node来清除并重启 Calico 节点。
(3) 检查与修复 Kubernetes 网络策略:
-
确保了节点与 Pod 之间的连接没有被 iptables 防火墙规则或 Calico 网络策略拦截。
-
如果在防火墙和路由规则中发现问题,通过修改
iptables设置来恢复正确的网络连接。
(4) 恢复 ArgoCD / Prometheus 服务:
-
解决了网络问题后,重启了 ArgoCD 和 Prometheus 相关的 Pods 和 Deployment(通过
kubectl rollout restart命令),确保它们能够重新连接并正常运行。 -
修复了连接超时和 i/o timeout 错误,恢复了 UI 访问和应用管理。
(5) 测试与验证:
-
使用
curl命令验证了 Kubernetes API Server 是否可达(通过https://<API_SERVER_IP>:6443/healthz)。 -
确保了节点之间的网络连接恢复正常,使用
ping和wget测试了 pod 间的连接。 -
确保了在重启 Calico 后,Pod 网络接口和路由恢复正常。