跨网络WireGuard集群中无法获取Kubernetes Pod日志的问题排查
Kubernetes工作节点kube-proxy Pod日志无法查看排查思路
1. 基础命令与上下文检查
- 确认日志查询命令的正确性:确保执行的是
kubectl logs <kube-proxy-pod-name> -n kube-system,核对Pod名称和命名空间是否准确,避免拼写错误。 - 检查kubectl上下文:执行
kubectl config current-context,确认当前操作的是目标集群,未切换到其他集群环境。 - 本地直接查看容器日志:在工作节点上用容器运行时命令直接读取日志,比如
docker logs <kube-proxy-container-id>(Docker环境)或crictl logs <kube-proxy-container-id>(containerd环境)。如果本地能正常查看,说明问题出在API Server与工作节点的通信链路;如果本地也无法查看,需排查容器日志本身的生成或存储问题。
2. API Server与工作节点通信排查
- 检查kubelet运行状态:在工作节点执行
systemctl status kubelet,确认kubelet服务正常运行,无异常退出或报错。 - 核对kubelet节点IP配置:查看kubelet启动参数中的
--node-ip是否设置为WireGuard的VPN IP(192.168.0.2)。若kubelet绑定的是本地私有IP,主节点API Server将无法通过VPN网络与kubelet通信。 - 查看kubelet日志:执行
journalctl -u kubelet -f,排查是否存在API Server认证失败、连接超时或通信异常的日志条目。 - 测试端口连通性:在主节点执行
nc -zv 192.168.0.2 10250,确认能正常访问工作节点的kubelet默认端口(10250),若连接失败则需排查网络或防火墙规则。
3. Pod与容器日志配置检查
- 查看kube-proxy Pod详情:执行
kubectl describe pod <kube-proxy-pod-name> -n kube-system,检查Events字段是否存在日志采集失败、容器启动异常等信息。 - 检查容器运行时日志驱动:Docker环境执行
docker info | grep Logging,确认日志驱动为json-file(kubectl logs默认支持的格式);containerd环境需检查配置文件中日志存储的相关设置,确保日志格式可被kubectl读取。 - 核对日志文件权限:在工作节点找到kube-proxy容器的日志文件路径(通常为
/var/log/pods/kube-system_kube-proxy-*/kube-proxy/*.log),检查文件是否存在、权限是否允许kubelet访问,无损坏或占用情况。
4. WireGuard VPN网络细节排查
- 检查路由配置:在主节点和工作节点分别执行
ip route,确认存在指向对方VPN IP的正确路由,无其他路由规则干扰VPN流量。 - 排查防火墙规则:确认工作节点本地防火墙(ufw/firewalld)允许VPN端口(默认51820)、kubelet端口(10250)的入站流量,无拦截规则。
- 抓包验证流量:在工作节点执行
tcpdump -i wg0 port 10250,同时在主节点执行kubectl logs命令,观察是否有数据包通过VPN接口传输,确认流量未丢失。
内容的提问来源于stack exchange,提问作者Flinty926
相关产品推荐
相关产品推荐

