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

Kubernetes Pod无法解析本地局域网主机名但可解析外部域名求助

问题结论

该情况属于Kubernetes集群的正常行为,核心原因如下:

  • Kubernetes Pod默认使用ClusterFirst DNS策略,所有DNS请求优先发送到集群内的CoreDNS服务处理
  • CoreDNS默认仅会解析集群内部域名(后缀为cluster.local的域名),其余外部域名会转发至从节点/etc/resolv.conf中读取的上游DNS服务器
  • 你的环境使用Ubuntu 18.04,系统默认启用systemd-resolved做本地DNS缓存,节点/etc/resolv.conf中的默认nameserver为127.0.0.53,该地址是节点本地回环地址,仅在节点宿主机上有效,CoreDNS容器无法访问该地址,因此局域网私有域名的解析请求无法转发到正确的局域网DNS服务器
  • 另外CoreDNS默认不会读取节点的/etc/hosts文件,哪怕节点配置了静态hosts条目也不会同步到Pod的解析逻辑中
解决方案

你可以根据自身使用场景选择以下任意一种配置方式:

方案1:修改CoreDNS配置(推荐,全集群生效)

该方案可以让集群内所有Pod都支持局域网域名解析,操作步骤如下:

  1. 编辑CoreDNS的ConfigMap:
    kubectl edit configmap coredns -n kube-system
  2. 按需修改Corefile配置块:

如果你有固定的局域网DNS服务器(比如地址为192.168.1.10),可以直接修改转发规则,替换默认的本地回环DNS:

.:53 {
    errors
    health
    kubernetes cluster.local in-addr.arpa ip6.arpa {
       pods insecure
       fallthrough in-addr.arpa ip6.arpa
       ttl 30
    }
    prometheus :9153
    # 将默认的forward . /etc/resolv.conf替换为你的局域网DNS地址
    forward . 192.168.1.10
    cache 30
    loop
    reload
    loadbalance
}

如果你没有局域网DNS服务器,需要直接配置静态主机名映射,可添加hosts块:

.:53 {
    errors
    health
    kubernetes cluster.local in-addr.arpa ip6.arpa {
       pods insecure
       fallthrough in-addr.arpa ip6.arpa
       ttl 30
    }
    # 新增静态hosts配置块
    hosts {
       192.168.1.20 wrkr1
       192.168.1.21 wrkr2
       fallthrough
    }
    prometheus :9153
    forward . /etc/resolv.conf
    cache 30
    loop
    reload
    loadbalance
}
  1. 保存配置后等待CoreDNS Pod自动重载配置,一般1-2分钟即可生效。

方案2:为单个工作负载配置hostAliases(仅对指定Pod生效)

如果只需要个别Pod解析局域网主机名,无需修改全局配置,可直接在Deployment/Pod的YAML中添加hostAliases字段:

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: test-container
    image: busybox:1.28
    command: ["sleep", "3600"]
  # 新增host别名配置,会直接写入Pod的/etc/hosts文件
  hostAliases:
  - ip: "192.168.1.20"
    hostnames:
    - "wrkr1"
  - ip: "192.168.1.21"
    hostnames:
    - "wrkr2"

方案3:修改Pod的DNS策略(不推荐,特殊场景使用)

将Pod的dnsPolicy设置为Default,可让Pod直接继承节点的DNS配置,但该配置会导致Pod无法解析集群内部的服务域名,仅适合不需要访问集群内部服务的场景使用:

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: test-container
    image: busybox:1.28
    command: ["sleep", "3600"]
  dnsPolicy: Default

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:21:00