From dfe81b7974a75c0c2bedcefd741fdeb058a51063 Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Tue, 5 May 2015 17:30:01 -0700 Subject: [PATCH 1/6] Cleanups in DNS pod YAML. --- cluster/addons/dns/skydns-rc.yaml.in | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/cluster/addons/dns/skydns-rc.yaml.in b/cluster/addons/dns/skydns-rc.yaml.in index cd726ebf009..f4bc5cf080c 100644 --- a/cluster/addons/dns/skydns-rc.yaml.in +++ b/cluster/addons/dns/skydns-rc.yaml.in @@ -1,11 +1,11 @@ apiVersion: v1beta3 kind: ReplicationController metadata: + name: kube-dns + namespace: default labels: k8s-app: kube-dns kubernetes.io/cluster-service: "true" - name: kube-dns - namespace: default spec: replicas: {{ pillar['dns_replicas'] }} selector: @@ -15,7 +15,6 @@ spec: labels: k8s-app: kube-dns kubernetes.io/cluster-service: "true" - name: kube-dns spec: containers: - name: etcd @@ -31,7 +30,7 @@ spec: - name: kube2sky image: gcr.io/google_containers/kube2sky:1.4 args: - # entrypoint = "/kube2sky" + # command = "/kube2sky" - -domain={{ pillar['dns_domain'] }} - -kubecfg_file=/etc/dns_token/kubeconfig volumeMounts: @@ -41,7 +40,7 @@ spec: - name: skydns image: gcr.io/google_containers/skydns:2015-03-11-001 args: - # entrypoint = "/skydns" + # command = "/skydns" - -machines=http://localhost:4001 - -addr=0.0.0.0:53 - -domain={{ pillar['dns_domain'] }}. From 58a18447fa11a6ba0860a536a4113af563e694e7 Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Tue, 5 May 2015 17:23:03 -0700 Subject: [PATCH 2/6] Expose 53/TCP in DNS pod (not service yet) --- cluster/addons/dns/skydns-rc.yaml.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cluster/addons/dns/skydns-rc.yaml.in b/cluster/addons/dns/skydns-rc.yaml.in index f4bc5cf080c..072162d1dea 100644 --- a/cluster/addons/dns/skydns-rc.yaml.in +++ b/cluster/addons/dns/skydns-rc.yaml.in @@ -48,6 +48,9 @@ spec: - containerPort: 53 name: dns protocol: UDP + - containerPort: 53 + name: dns-tcp + protocol: TCP livenessProbe: exec: command: From 9eb1fb85bd28b2dfa128a8166d6885268807c9a7 Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Tue, 5 May 2015 17:32:38 -0700 Subject: [PATCH 3/6] Convert DNS service to v1beta3 --- cluster/addons/dns/skydns-svc.yaml.in | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/cluster/addons/dns/skydns-svc.yaml.in b/cluster/addons/dns/skydns-svc.yaml.in index 3df270de7dc..270b018c504 100644 --- a/cluster/addons/dns/skydns-svc.yaml.in +++ b/cluster/addons/dns/skydns-svc.yaml.in @@ -1,14 +1,16 @@ +apiVersion: v1beta3 kind: Service -apiVersion: v1beta1 -id: kube-dns -namespace: default -protocol: UDP -port: 53 -portalIP: {{ pillar['dns_server'] }} -containerPort: 53 -labels: - k8s-app: kube-dns +metadata: name: kube-dns - kubernetes.io/cluster-service: "true" -selector: - k8s-app: kube-dns + namespace: default + labels: + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" +spec: + selector: + k8s-app: kube-dns + portalIP: {{ pillar['dns_server'] }} + ports: + - name: dns + port: 53 + protocol: UDP From ec8ba4a62fce3d54eb95c5d5bb07001ccb6b9a52 Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Tue, 5 May 2015 17:33:13 -0700 Subject: [PATCH 4/6] Expose 53/TCP on DNS service --- cluster/addons/dns/skydns-svc.yaml.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cluster/addons/dns/skydns-svc.yaml.in b/cluster/addons/dns/skydns-svc.yaml.in index 270b018c504..0dc488905e2 100644 --- a/cluster/addons/dns/skydns-svc.yaml.in +++ b/cluster/addons/dns/skydns-svc.yaml.in @@ -14,3 +14,6 @@ spec: - name: dns port: 53 protocol: UDP + - name: dns-tcp + port: 53 + protocol: TCP From 07df69d339816f293eccff02bc5acac6e2de744e Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Thu, 7 May 2015 00:29:26 -0700 Subject: [PATCH 5/6] Add a docker image for dnsutils --- contrib/for-tests/dnsutils/Dockerfile | 6 ++++++ contrib/for-tests/dnsutils/Makefile | 8 ++++++++ 2 files changed, 14 insertions(+) create mode 100644 contrib/for-tests/dnsutils/Dockerfile create mode 100644 contrib/for-tests/dnsutils/Makefile diff --git a/contrib/for-tests/dnsutils/Dockerfile b/contrib/for-tests/dnsutils/Dockerfile new file mode 100644 index 00000000000..e58cb0147c7 --- /dev/null +++ b/contrib/for-tests/dnsutils/Dockerfile @@ -0,0 +1,6 @@ +FROM debian:wheezy +MAINTAINER Tim Hockin "thockin@google.com" + +RUN apt-get -q update && \ + apt-get install -y dnsutils && \ + apt-get clean diff --git a/contrib/for-tests/dnsutils/Makefile b/contrib/for-tests/dnsutils/Makefile new file mode 100644 index 00000000000..992669ca777 --- /dev/null +++ b/contrib/for-tests/dnsutils/Makefile @@ -0,0 +1,8 @@ +all: + @echo "try 'make image' or 'make push'" + +image: + docker build -t gcr.io/google_containers/dnsutils . + +push: + gcloud preview docker push gcr.io/google_containers/dnsutils From 34743a665aac48dffc33ceb942b7150e95ec9b1f Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Thu, 7 May 2015 00:33:10 -0700 Subject: [PATCH 6/6] Add e2e coverage for DNS on TCP --- test/e2e/service.go | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/test/e2e/service.go b/test/e2e/service.go index 7579fab394a..3dc90da2f10 100644 --- a/test/e2e/service.go +++ b/test/e2e/service.go @@ -67,7 +67,9 @@ var _ = Describe("Services", func() { probeCmd := "for i in `seq 1 600`; do " for _, name := range namesToResolve { - probeCmd += fmt.Sprintf("wget -O /dev/null %s && echo OK > /results/%s;", name, name) + // Resolve by TCP and UDP DNS. + probeCmd += fmt.Sprintf(`test -n "$(dig +notcp +noall +answer +search %s)" && echo OK > /results/udp@%s;`, name, name) + probeCmd += fmt.Sprintf(`test -n "$(dig +tcp +noall +answer +search %s)" && echo OK > /results/tcp@%s;`, name, name) } probeCmd += "sleep 1; done" @@ -102,8 +104,8 @@ var _ = Describe("Services", func() { }, }, { - Name: "pinger", - Image: "gcr.io/google_containers/busybox", + Name: "querier", + Image: "gcr.io/google_containers/dnsutils", Command: []string{"sh", "-c", probeCmd}, VolumeMounts: []api.VolumeMount{ { @@ -141,16 +143,18 @@ var _ = Describe("Services", func() { expectNoError(wait.Poll(time.Second*2, time.Second*60, func() (bool, error) { failed = []string{} for _, name := range namesToResolve { - _, err := c.Get(). - Prefix("proxy"). - Resource("pods"). - Namespace(api.NamespaceDefault). - Name(pod.Name). - Suffix("results", name). - Do().Raw() - if err != nil { - failed = append(failed, name) - Logf("Lookup using %s for %s failed: %v\n", pod.Name, name, err) + for _, proto := range []string{"udp", "tcp"} { + testCase := fmt.Sprintf("%s@%s", proto, name) + _, err := c.Get(). + Prefix("proxy"). + Resource("pods"). + Namespace(api.NamespaceDefault). + Name(pod.Name). + Suffix("results", testCase). + Do().Raw() + if err != nil { + failed = append(failed, testCase) + } } } if len(failed) == 0 {