Ubuntu 20.04环境下Microk8s Pod无法访问互联网的排查及解决方案
Ubuntu 20.04下Microk8s Pod无法访问互联网的排查与解决
一、排查要点
- 检查网络组件状态:执行
microk8s kubectl get pods -n kube-system,确认coredns、calico(或默认网络插件)等Pod处于Running状态,无CrashLoopBackOff或Pending异常。 - 验证Pod DNS配置:创建测试Pod并进入:
microk8s kubectl run -it --rm --image=busybox test-pod,执行nslookup google.com测试域名解析;查看Pod内/etc/resolv.conf,确认nameserver指向kube-dns的ClusterIP(通常为10.152.183.10)。 - 检查节点防火墙与iptables:执行
ufw status查看防火墙状态,若开启需确认是否允许Microk8s集群网段(默认10.1.0.0/16或10.152.183.0/24)的出站流量;执行iptables-save | grep KUBE,确认KUBE系列规则链存在且正常,同时检查MASQUERADE规则是否存在(iptables-save | grep MASQUERADE)。 - 分层测试Pod连通性:在测试Pod内先ping节点的外网IP,再ping公网IP(如8.8.8.8),判断是DNS解析问题还是路由/转发问题;若ping公网IP失败,再检查节点到公网的路由是否正常。
- 确认节点IP转发配置:执行
cat /proc/sys/net/ipv4/ip_forward,若输出为0则说明IP转发未开启,这会导致Pod无法通过节点访问外网。
二、解决方案
- 修复异常网络组件:若coredns Pod异常,查看日志定位问题:
microk8s kubectl logs -n kube-system <coredns-pod-name>,之后删除Pod让其自动重建;若calico等网络插件异常,重启对应Pod:microk8s kubectl delete pod -n kube-system -l k8s-app=calico-node,或重新启用插件:microk8s disable calico && microk8s enable calico。 - 调整DNS配置:若DNS解析失败,编辑coredns的ConfigMap添加公网DNS服务器:
保存后删除coredns Pod使其生效。microk8s kubectl edit configmap coredns -n kube-system # 将forward段修改为:forward . 8.8.8.8 1.1.1.1 - 配置防火墙与IP转发:
- 开启节点IP转发:
echo 1 > /proc/sys/net/ipv4/ip_forward # 永久生效:编辑/etc/sysctl.conf,设置net.ipv4.ip_forward=1,执行sysctl -p - 允许Microk8s集群网络的防火墙规则:
ufw allow in on calico0 && ufw allow out on calico0 ufw allow from 10.1.0.0/16 to any
- 开启节点IP转发:
- 补全MASQUERADE规则:若iptables缺失SNAT规则,手动添加:
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 ! -d 10.1.0.0/16 -j MASQUERADE - 重置Microk8s网络:若以上操作无效,可重置Microk8s并重新启用必要组件(注意:此操作会清除所有集群资源):
microk8s reset microk8s enable dns calico
内容的提问来源于stack exchange,提问作者sercanezelhan
相关产品推荐
相关产品推荐

