2017-02-17 20 views
2

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

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" 

正是在7时25分30秒,当客户端开始连接到服务器。

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

我发现了以下从https://github.com/skynetservices/skydns

  • 命名的环境变量的缺省值SKYDNS_NAMESERVERS“8.8.8.8:53,8.8.4.4:53”
  • 我能做到我的目的通过设置no_rec真正

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

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

+0

你可以发布'kubectl get deploy --namespace = kube-system kube-dns -o yaml'的输出吗?它可以用'-nameserver'标志或'SKYDNS_NAMESERVERS'环境变量进行配置。 –

+0

我无法从kube获取部署中找到-nameserver标志和SKYDNS_NAMESERVERS env。 – eastcirclek

+0

好像被用来创建一个KUBE-DNS容器下列: - ARGS: - --domain = cluster.local - --dns端口= 10053 - --config-MAP = KUBE-DNS - --v = 2 env: - 名称:PROMETHEUS_PORT value:“10055” image:gcr.io/google_containers/kubedns-amd64:1。9 imagePullPolicy:IfNotPresent – eastcirclek

回答

1

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

最好的办法是自己在kubeadmin启动群集并改变某些功能后自行编辑kube-dnsDeployment(例如kubectl edit -n kube-system deploy kube-dns)。

您可能想要尝试将上游名称服务器更改为8.8.8.8以外的群集,可由群集访问。您应该可以通过将--nameservers=x.x.x.x添加到argskubedns容器中。