将名称服务器添加到kubernetes

时间:2015-10-21 13:33:11

标签: dns kubernetes

我在使用kube-up.sh部署的AWS上使用Kubernetes v1.0.6。 群集正在使用kube-dns

$ kubectl get svc kube-dns --namespace=kube-system
NAME       LABELS                                                                           SELECTOR           IP(S)       PORT(S)
kube-dns   k8s-app=kube-dns,kubernetes.io/cluster-service=true,kubernetes.io/name=KubeDNS   k8s-app=kube-dns   10.0.0.10   53/UDP

哪种方法正常。

$ kubectl exec busybox -- nslookup kubernetes.default
Server:    10.0.0.10
Address 1: 10.0.0.10 ip-10-0-0-10.eu-west-1.compute.internal

Name:      kubernetes.default
Address 1: 10.0.0.1 ip-10-0-0-1.eu-west-1.compute.internal

这是广告连播的resolv.conf

$ kubectl exec busybox -- cat /etc/resolv.conf
nameserver 10.0.0.10
nameserver 172.20.0.2
search default.svc.cluster.local svc.cluster.local cluster.local eu-west-1.compute.internal

是否可以让容器使用额外的名称服务器?

我有一个基于DNS的辅助服务发现Oon让我们说192.168.0.1)我希望我的kubernetes容器能够用于dns解析。

PS。 kubernetes 1.1解决方案也是可以接受的:)

非常感谢您提前, 乔治

4 个答案:

答案 0 :(得分:2)

DNS addon README有一些细节。基本上,pod将继承其运行的节点的resolv.conf设置,因此您可以将额外的DNS服务器添加到节点' /etc/resolv.confkubelet也需要--resolv-conf argument,这可能为您提供更明确的方式来注入额外的DNS服务器。但是,我还没有在任何地方看到该标志。

答案 1 :(得分:1)

在Kuberenetes(可能)1.2中,我们将转向一个假设nameservers可以互换的模型。当不同的名称服务器提供不同的DNS子集时,有太多的解析器会中断,这里没有我们可以指出的真实规范。

换句话说,我们将开始从容器的合并resolv.conf中删除主机的名称服务器记录,并使我们自己的DNS服务器成为唯一的nameserver行。我们的DNS将能够将请求转发给上游名称服务器。

答案 2 :(得分:1)

对于那些使用Kubernetes airports <- read.csv("http://bl.ocks.org/mbostock/raw/7608400/airports.csv", stringsAsFactors=FALSE) airportsUS <- airports map <- borders("usa", colour="black", fill="white", size = .3) #map USA continent airportsmap <- ggplot(airportsUS) + map print(airportsmap + geom_point(aes(x=airportsUS$longitude, y=airportsUS$latitude), shape=3, size = .1, color = "red")+ theme(legend.position = "top")+ scale_x_continuous(limits = c(-125, -67))+ scale_y_continuous(limits = c(25, 50))+ ggtitle("Airports")) 的人来说,标记kube-dns和环境变量-nameservers不再可用。

SKYDNS_NAMESERVERS

现在,要么将名称服务器放在主机Usage of /kube-dns: --alsologtostderr log to standard error as well as files --config-map string config-map name. If empty, then the config-map will not used. Cannot be used in conjunction with federations flag. config-map contains dynamically adjustable configuration. --config-map-namespace string namespace for the config-map (default "kube-system") --dns-bind-address string address on which to serve DNS requests. (default "0.0.0.0") --dns-port int port on which to serve DNS requests. (default 53) --domain string domain under which to create names (default "cluster.local.") --healthz-port int port on which to serve a kube-dns HTTP readiness probe. (default 8081) --kube-master-url string URL to reach kubernetes master. Env variables in this flag will be expanded. --kubecfg-file string Location of kubecfg file for access to kubernetes master service; --kube-master-url overrides the URL part of this; if neither this nor --kube-master-url are provided, defaults to service account tokens --log-backtrace-at traceLocation when logging hits line file:N, emit a stack trace (default :0) --log-dir string If non-empty, write log files in this directory --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s) --logtostderr log to standard error instead of files (default true) --stderrthreshold severity logs at or above this threshold go to stderr (default 2) -v, --v Level log level for V logs --version version[=true] Print version information and quit --vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging 上,要么从节点继承DNS,要么使用自定义resolv.conf并将其添加到带有标记resolv.conf的Kubelet正如here

所解释的那样

答案 3 :(得分:0)

我最终设法通过配置SkyDNS添加额外的名称服务器来轻松解决这个问题,您只需添加SkyDNS复制控制器中SkyDNS docs中定义的环境变量SKYDNS_NAMESERVERS即可。它影响最小,不依赖于节点更改等。

    env:
    - name: SKYDNS_NAMESERVERS
      value: 10.0.0.254:53,10.0.64.254:53