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

k3s树莓派4集群主节点重装后Pod通过ClusterIP访问服务连通性异常

故障根因分析
  • DNS解析异常根因:主节点重装系统后,本地/etc/resolv.conf默认配置错误,如指向不可达的本地回环地址或无效DNS服务器,CoreDNS默认将集群内部域名解析请求转发到节点本地resolv.conf,导致跨节点DNS请求失败。你手动修改CoreDNS转发规则到主节点物理IP属于临时绕路方案,并未解决根本问题。
  • ClusterIP访问丢包根因:主节点重装系统后重置了内核参数、防火墙规则或CNI插件的转发规则,导致Kubernetes服务转发链路断裂,无法将ClusterIP的流量路由到对应后端Pod。
解决方案

第一步:修复DNS解析默认配置

  1. 登录主节点查看本地/etc/resolv.conf,将其中无效的nameserver替换为可用的上游DNS(如公共DNS 114.114.114.114或内网路由器地址192.168.1.1)。
  2. 重置CoreDNS配置,将之前修改的forward . 192.168.1.101改回默认配置forward . /etc/resolv.conf,执行以下命令重启CoreDNS Pod:
kubectl rollout restart deployment coredns -n kube-system
  1. 后续验证DNS解析是否正常,无需手动指定转发到主节点物理IP。

第二步:修正主节点内核参数

登录主节点执行以下命令检查并开启必要内核转发参数:

# 检查IP转发是否开启
sysctl net.ipv4.ip_forward
# 如果返回值不为1则执行以下命令永久开启
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# 检查网桥过滤规则是否开启
sysctl net.bridge.bridge-nf-call-iptables
sysctl net.bridge.bridge-nf-call-ip6tables
# 如返回值不为1则执行以下命令永久开启
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables=1" >> /etc/sysctl.conf
# 加载配置生效
sysctl -p

第三步:放行集群必要端口和流量规则

如果主节点开启了ufw防火墙,执行以下命令放行集群所需端口和内部网段流量:

# 放行flannel VXLAN通信端口
ufw allow 8472/udp
# 放行kube-apiserver、kubelet端口
ufw allow 6443/tcp
ufw allow 10250/tcp
# 放行Pod和ClusterIP网段内部流量
ufw allow in on cni0 from 10.42.0.0/16 to any
ufw allow in on flannel.1 from 10.42.0.0/16 to any
ufw allow from 10.43.0.0/16 to any

如果未启用ufw,检查主节点iptables默认规则,删除拒绝内部网段流量的DROP规则,也可直接执行以下命令清空原有iptables规则:

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

第四步:重置集群转发规则同步

  1. 停止所有节点的k3s服务:
    主节点执行:
systemctl stop k3s

所有工作节点执行:

systemctl stop k3s-agent
  1. 所有节点执行第三步中的清空iptables规则命令。
  2. 先启动主节点k3s服务:
systemctl start k3s

待主节点状态恢复Ready后,再启动所有工作节点k3s-agent服务:

systemctl start k3s-agent

等待3-5分钟让kube-proxy和flannel完成规则同步。

第五步:验证故障恢复

执行你之前的测试命令验证是否恢复:

  1. DNS解析测试:
kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- nslookup redis-master.database.svc.cluster.local
  1. ClusterIP连通性测试:
kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- ping 10.43.115.159

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:39:04