基于Alpine的k8s kube-scheduler Pod访问服务出现DNS解析错误
根因定位
你的问题与Alpine系统DNS缺陷无关,核心原因是kube-scheduler Pod开启了hostNetwork: true配置:
- 开启
hostNetwork的Pod默认dnsPolicy为Default,会直接复用所在宿主机的/etc/resolv.conf配置,不会自动注入集群CoreDNS地址、集群域名搜索域、ndots参数 - 普通工作负载Pod默认
dnsPolicy为ClusterFirst,会自动使用集群DNS配置,因此dnsutils测试解析正常
最优解决方案(无需手动修改配置,改一次manifest永久生效)
直接在kube-scheduler的Pod manifest中新增dnsPolicy: ClusterFirstWithHostNet配置即可,该参数专门适配hostNetwork模式下需要使用集群DNS的场景。
修改后的spec片段示例:
spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet # 新增这一行即可 priorityClassName: system-node-critical # 其余原有配置保持不变
配置更新后重启Pod,kubelet会自动为Pod生成包含集群DNS配置的/etc/resolv.conf,不需要手动修改任何文件,集群内域名解析即可恢复正常。
备选解决方案(仅当无法修改dnsPolicy时使用)
如果因业务限制不能修改dnsPolicy,也可以通过dnsConfig字段自定义Pod的DNS配置,直接把你手动添加的参数写入manifest即可:
spec: hostNetwork: true dnsConfig: nameservers: - 10.96.0.10 # 集群CoreDNS地址 searches: - default.svc.cluster.local - svc.cluster.local - cluster.local options: - name: ndots value: "5" # 其余原有配置保持不变
内容的提问来源于stack exchange,提问作者sqlquestionasker
相关产品推荐
相关产品推荐

