2

如何防止 kube-dns 将请求转发到 Google 的名称服务器(8.8.8.8:53 和 8.8.4.4:53)?我只想启动 pod 仅供内部使用,这意味着 pod 中的容器根本不应该连接到外部。当 Zookeeper 客户端使用主机名(例如 zkCli.sh -server zk-1.zk-headless)连接到 Zookeeper 服务器时,客户端需要 10 秒才能将其状态从 [Connecting] 更改为 [Connected]。我怀疑 kube-dns 的原因是,使用 pod 的 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 启动 Kubernetes,但找不到修改环境变量和设置 skydns 属性值的方法。

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

4

1 回答 1

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

于 2017-08-03T13:38:42.560 回答