2017-02-17 21 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容器中。