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

k3s部署pihole执行kubectl patch报service not found问题

问题原因

services "pihole-dns-tcp" not found 报错的核心原因是执行kubectl命令时未指定目标命名空间,默认仅查询default命名空间下的资源,而通过Helm部署的Pi-hole服务通常不会部署在default命名空间,因此无法匹配到目标服务。

排查步骤

先执行以下命令查询所有命名空间下的Pi-hole相关服务,确认服务实际所属命名空间(返回结果第一列为命名空间名称):

kubectl get svc -A | grep pihole

常见的Pi-hole部署命名空间为pihole。

修复方案

方案1:临时绑定ExternalIP(快速验证用,Helm更新或Pod重建后配置会失效)

在原patch命令中添加-n <查询到的命名空间名>参数即可,注意DNS服务需要同时配置TCP和UDP协议的外部IP,否则会出现部分DNS请求异常:

# 替换命令中<namespace>为你实际查到的命名空间,比如pihole
# 绑定TCP DNS服务外部IP
kubectl patch svc pihole-dns-tcp -n <namespace> -p '{"spec":{"externalIPs":["192.168.178.210"]}}'
# 绑定UDP DNS服务外部IP
kubectl patch svc pihole-dns-udp -n <namespace> -p '{"spec":{"externalIPs":["192.168.178.210"]}}'
# 如需外部访问Pi-hole管理面板,可同步为web服务绑定IP
kubectl patch svc pihole-web -n <namespace> -p '{"spec":{"externalIPs":["192.168.178.210"]}}'

执行完成后重新查询服务列表,即可看到对应服务已经绑定指定的ExternalIP。

方案2:永久配置(生产环境推荐,配置不会因Helm更新丢失)

手动patch的配置会在后续执行helm upgrade时被覆盖,建议直接修改Helm部署配置永久生效:

  1. 在你用于部署Pi-hole的自定义values.yaml文件中添加如下配置:
serviceDns:
  type: NodePort
  externalIPs:
    - 192.168.178.210
serviceDhcp:
  type: NodePort
  externalIPs:
    - 192.168.178.210
serviceWeb:
  # 如需外部访问web面板可将type改为NodePort,保持ClusterIP仅集群内访问也可
  type: ClusterIP
  externalIPs:
    - 192.168.178.210
  1. 执行helm upgrade命令更新部署使配置生效:
# 同样替换<namespace>为实际命名空间,<values-path>为你的自定义values.yaml文件路径
helm upgrade pihole pihole/pihole -n <namespace> -f <values-path>

注意:你配置的ExternalIP必须是k3s集群中某台节点实际持有的内网IP,否则外部流量无法正常路由到对应服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 20:54:18