You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Fedora 32的MicroK8s 1.19环境中,Pod可Ping外部IP但无法Wget

解决MicroK8s Pod中Ping通外部IP但wget无法连接的问题

我之前在Fedora 32搭配MicroK8s的环境里碰到过一模一样的问题——Pod能Ping通外部,但TCP类请求(比如wget)就报no route to host。结合你的现象来看,核心原因基本是网络传输层的拦截或者防火墙规则冲突,咱们一步步来排查解决:

1. 先理清现象背后的逻辑

你的Pod能正常Ping通外部IP,说明:

  • 网络层(ICMP协议)的路由是完全正常的
  • 目标外部主机是可达的
    但wget用的是TCP 80端口,却连不上,大概率是TCP流量被主机端的防火墙拦截,或者MicroK8s的CNI网络规则和Fedora默认的firewalld产生了冲突。

2. 排查Fedora主机的firewalld规则

Fedora默认启用firewalld,它经常会误拦截MicroK8s Pod的出站TCP流量,咱们来调整规则:

步骤1:确认firewalld是否在运行

执行以下命令查看状态:

sudo firewall-cmd --state

如果返回running,继续下一步操作。

步骤2:获取MicroK8s的Pod网段

先查看你的busybox Pod所在的网段:

microk8s kubectl get pods -o wide

比如输出里Pod的IP是10.1.0.3,那MicroK8s的默认Pod网段就是10.1.0.0/16(大部分情况下都是这个)。

步骤3:将Pod网段加入信任区域

把Pod所在网段添加到firewalld的trusted区域,允许该网段的所有流量:

sudo firewall-cmd --add-source=10.1.0.0/16 --zone=trusted --permanent
sudo firewall-cmd --reload

3. 检查MicroK8s网络组件状态

如果调整防火墙后还是不行,咱们检查MicroK8s的网络服务是否正常:

microk8s inspect

查看输出里的「Network」相关部分,有没有报错信息。如果发现异常,尝试重启MicroK8s:

microk8s stop
microk8s start

4. 进阶排查:抓包确认TCP流量走向

要是以上步骤都没解决问题,咱们可以在Pod里抓包,看看TCP连接的具体过程:

  1. 先进入busybox Pod:
microk8s kubectl exec -it <你的busybox Pod名称> -- sh
  1. 执行抓包命令:
tcpdump -i any host x.x.x.x
  1. 同时在另一个终端执行wget x.x.x.x,观察抓包结果:
    • 如果看到发送了SYN包,但没有收到SYN-ACK,那可能是目标外部主机的80端口被防火墙拦截
    • 如果连SYN包都没发出去,那还是本地MicroK8s的路由或防火墙规则有问题

内容的提问来源于stack exchange,提问作者JDS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 06:17:35