如何防止kube-dns转发请求到8.8.8.8:53

时间:2017-02-17 06:53:55

标签: kubernetes apache-zookeeper kube-dns skydns

如何阻止kube-dns将请求转发到Google的名称服务器(8.8.8.8:53和8.8.4.4:53)? 我只想发布pod仅供内部使用,这意味着pod中的容器根本不应该连接到外部。 当Zookeeper客户端使用主机名连接到Zookeeper服务器时(例如zkCli.sh -server zk-1.zk-headless),客户端需要10秒钟将其状态从[正在连接]更改为[已连接]。 我怀疑kube-dns的原因是,使用pods的IP地址,客户端立即连接。 当我看一下kube-dns的日志时,我发现了以下两行:

07:25:35:170773       1 logs.go:41] skydns: failure to forward request "read udp 10.244.0.13:43455->8.8.8.8:53: i/o timeout"
07:25:39:172847       1 logs.go:41] skydns: failure to forward request "read udp 10.244.0.13:42388->8.8.8.8:53: i/o timeout"

当客户端开始连接到服务器时,大约是07:25:30。

我在私有集群上运行Kubernetes,内部服务器通过http_proxy / https_proxy与Internet通信,这意味着我无法连接到8.8.8.8进行名称解析,AFAIK。

我从https://github.com/skynetservices/skydns找到了以下内容:

  • 名为 SKYDNS_NAMESERVERS 的环境变量的默认值为“8.8.8.8:53,8.8.4.4:53”
  • 我可以通过将 no_rec 设置为 true
  • 来达到我的目的

我一直在使用kubeadm启动Kubernete,我找不到修改环境变量的方法并设置skydns的属性值。

如何阻止kube-dns将请求转发到kubeadm部署的内部Kubernetes集群外部?

1 个答案:

答案 0 :(得分:1)

我认为没有一个选项可以完全阻止kube-dns插件转发请求。肯定没有kubeadm中的选项。

您最好的选择是在kubeadmin启动群集后自行编辑kube-dns Deployment(例如kubectl edit -n kube-system deploy kube-dns)并更改适合您的内容。

您可能希望尝试将上游名称服务器更改为8.8.8.8以外的其他内容, 可由群集访问。您应该可以通过将--nameservers=x.x.x.x添加到args容器的kubedns来实现这一目标。