使用docker在kubernetes中名称无法解析

时间:2018-07-02 14:12:30

标签: kubernetes google-kubernetes-engine

当我在docker容器上运行nslookup时,出现此错误

 nslookup  10.0.96.xx
 nslookup: can't resolve '(null)': Name does not resolve

 Name:      10.0.96.xx
 Address 1: 10.0.96.xx

我已阅读到问题出在docker上,该问题将其注入resolv.conf

nameserver 10.109.0.xx
nameserver 10.96.0.xx
search devlan.xxx.corp poc.svc.cluster.local svc.cluster.local cluster.local
options ndots:2 edns0

使用kubernetes,我尝试用PodConfFile.yaml上的以下参数覆盖它。

spec:
  dnsPolicy: "None"
#  dnsPolicy: ClusterFirst
  dnsConfig:
   nameservers:
     - 10.109.0.xx
     - 10.96.0.xx
   searches:
     - devlan.xxx.corp
     - poc.svc.cluster.local
     - svc.cluster.local
     - cluster.local
   options:
     - name: ndots
       value: "2"
     - name: edns0

您对解决此问题有任何建议吗?

  • Docker版本:18.03.1-ce
  • go1.9.3

2 个答案:

答案 0 :(得分:2)

我找到了解决此问题的方法。在您的Pod上删除此参数

  

名称服务器选项搜索

并添加一个

spec:
  dnsPolicy: Default

它将直接继承DNS配置。

您将能够ping外部服务。

答案 1 :(得分:0)

否则,我发现了另一个更清洁的解决方案

您的pod是否无法解析URL,并且您的 /etc/resolv.conf

中有@IP 10.0.96.XX
nslookup  10.0.96.xx
 nslookup: can't resolve '(null)': Name does not resolve

要修复它:

vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf  

用您的IP更改@IP地址

Environment="KUBELET_DNS_ARGS=--cluster-dns=YOUR-IP-DNS --cluster-domain=cluster.local"

然后重新启动kublet

systemctl restart kubelet.service

我希望这会对您有所帮助;)

您可以从Pod.yaml中删除

  

DnsPolicy