aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml4
-rw-r--r--.travis/kubernetes/README.md28
-rw-r--r--.travis/kubernetes/dns-test.yaml151
-rw-r--r--.travis/kubernetes/kubernetes-rc.yaml70
-rw-r--r--.travis/kubernetes/nginx-rc.yml19
-rwxr-xr-x.travis/kubernetes/run_skydns.sh52
-rwxr-xr-x.travis/kubernetes/setup_k8s_services.sh99
-rw-r--r--middleware/kubernetes/kubernetes.go9
-rw-r--r--middleware/kubernetes/setup.go13
-rw-r--r--test/kubernetes_test.go117
10 files changed, 248 insertions, 314 deletions
diff --git a/.travis.yml b/.travis.yml
index 2e82bc2da..0be7425b3 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -30,7 +30,7 @@ before_install:
before_script:
- docker run -d --net=host --name=etcd quay.io/coreos/etcd:v$ETCD_VERSION
- - docker run -d --volume=/:/rootfs:ro --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:rw --volume=/var/lib/kubelet/:/var/lib/kubelet:rw --volume=/var/run:/var/run:rw --net=host --pid=host --privileged --name=hyperkube gcr.io/google_containers/hyperkube-amd64:v$K8S_VERSION /hyperkube kubelet --containerized --hostname-override=127.0.0.1 --api-servers=http://localhost:8080 --config=/etc/kubernetes/manifests $DNS_ARGUMENTS --allow-privileged --v=2
+ - docker run -d --volume=/:/rootfs:ro --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:rw --volume=/var/lib/kubelet/:/var/lib/kubelet:rw --volume=/var/run:/var/run:rw --volume=`pwd`/.travis:/travis --net=host --pid=host --privileged --name=hyperkube gcr.io/google_containers/hyperkube-amd64:v$K8S_VERSION /hyperkube kubelet --containerized --hostname-override=127.0.0.1 --api-servers=http://localhost:8080 --config=/etc/kubernetes/manifests $DNS_ARGUMENTS --allow-privileged --v=2
# Wait until kubectl is ready
- for i in {1..10}; do $KUBECTL version && break || sleep 5; done
- $KUBECTL version
@@ -39,7 +39,7 @@ before_script:
- $KUBECTL config use-context test-doc
# Wait until k8s is ready
- for i in {1..30}; do $KUBECTL get nodes && break || sleep 5; done
- - .travis/kubernetes/setup_k8s_services.sh
+ - $KUBECTL create -f /travis/kubernetes/dns-test.yaml
- docker ps -a
script:
diff --git a/.travis/kubernetes/README.md b/.travis/kubernetes/README.md
deleted file mode 100644
index 394cfe259..000000000
--- a/.travis/kubernetes/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-## Test scripts to automate kubernetes startup
-
-Requirements:
- docker
-
-The scripts in this directory startup kubernetes with docker as the container runtime.
-After starting kubernetes, a couple of kubernetes services are started to allow automatic
-testing of CoreDNS with kubernetes. The kubernetes integration tests in `test/kubernetes_test.go` depend on having some sample services running. The scripts in this folder
-automate the launch of kubernetes and the creation of the expected sample services.
-
-To start up kubernetes and launch some sample services,
-run the script `setup_k8s_services.sh`.
-
-~~~
-$ ./setup_k8s_services.sh
-~~~
-
-After running the above scripts, kubernetes will be running on the localhost with the following services
-exposed:
-
-~~
-NAMESPACE NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
-default kubernetes 10.0.0.1 <none> 443/TCP 48m
-demo mynginx 10.0.0.168 <none> 80/TCP 9m
-demo webserver 10.0.0.28 <none> 80/TCP 2m
-test mynginx 10.0.0.4 <none> 80/TCP 2m
-test webserver 10.0.0.39 <none> 80/TCP 2m
-~~
diff --git a/.travis/kubernetes/dns-test.yaml b/.travis/kubernetes/dns-test.yaml
new file mode 100644
index 000000000..77a68426c
--- /dev/null
+++ b/.travis/kubernetes/dns-test.yaml
@@ -0,0 +1,151 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: test-1
+---
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: test-2
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: de-1-a
+ namespace: test-1
+spec:
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: app-1-a
+ spec:
+ containers:
+ - name: app-1-a-c
+ image: gcr.io/google_containers/pause-amd64:3.0
+ ports:
+ - containerPort: 80
+ name: http
+ protocol: TCP
+ - containerPort: 443
+ name: https
+ protocol: TCP
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: de-1-b
+ namespace: test-1
+spec:
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: app-1-b
+ spec:
+ containers:
+ - name: app-1-b-c
+ image: gcr.io/google_containers/pause-amd64:3.0
+ ports:
+ - containerPort: 80
+ name: http
+ protocol: TCP
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: de-c
+ namespace: test-1
+spec:
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: app-c
+ spec:
+ containers:
+ - name: app-c-c
+ image: gcr.io/google_containers/pause-amd64:3.0
+ ports:
+ - containerPort: 1234
+ name: c-port
+ protocol: UDP
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: de-c
+ namespace: test-2
+spec:
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: app-c
+ spec:
+ containers:
+ - name: app-c-c
+ image: gcr.io/google_containers/pause-amd64:3.0
+ ports:
+ - containerPort: 1234
+ name: c-port
+ protocol: UDP
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: svc-1-a
+ namespace: test-1
+spec:
+ selector:
+ app: app-1-a
+ clusterIP: 10.3.0.100
+ ports:
+ - name: http
+ port: 80
+ protocol: TCP
+ - name: https
+ port: 443
+ protocol: TCP
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: svc-1-b
+ namespace: test-1
+spec:
+ selector:
+ app: app-1-b
+ clusterIP: 10.3.0.110
+ ports:
+ - name: http
+ port: 80
+ protocol: TCP
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: svc-c
+ namespace: test-1
+spec:
+ selector:
+ app: app-c
+ clusterIP: 10.3.0.115
+ ports:
+ - name: c-port
+ port: 1234
+ protocol: UDP
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: svc-c
+ namespace: test-2
+spec:
+ selector:
+ app: app-c
+ clusterIP: 10.3.0.120
+ ports:
+ - name: c-port
+ port: 1234
+ protocol: UDP
diff --git a/.travis/kubernetes/kubernetes-rc.yaml b/.travis/kubernetes/kubernetes-rc.yaml
deleted file mode 100644
index 87d29418c..000000000
--- a/.travis/kubernetes/kubernetes-rc.yaml
+++ /dev/null
@@ -1,70 +0,0 @@
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: coredns-configmap
- namespace: kube-system
-data:
- corefile: |
- .:53 {
- kubernetes coredns.local {
- }
- #cache 160 coredns.local
- errors stdout
- log stdout
- }
----
-apiVersion: v1
-kind: ReplicationController
-metadata:
- labels:
- k8s-app: kube-dns
- kubernetes.io/cluster-service: "true"
- version: v20
- name: kube-dns-v20
- namespace: kube-system
-spec:
- replicas: 1
- selector:
- k8s-app: kube-dns
- version: v20
- template:
- metadata:
- labels:
- k8s-app: kube-dns
- kubernetes.io/cluster-service: "true"
- version: v20
- spec:
- containers:
- - args:
- - -conf=/cfg/corefile
- image: aledbf/kube-coredns:0.6
- imagePullPolicy: IfNotPresent
- name: kube-dns
- ports:
- - containerPort: 53
- name: dns
- protocol: UDP
- - containerPort: 53
- name: dns-tcp
- protocol: TCP
- volumeMounts:
- - name: config-volume
- mountPath: /cfg
- - args:
- - -cmd=nslookup kubernetes.default.svc.cluster.local localhost >/dev/null
- - -port=8080
- image: gcr.io/google_containers/exechealthz:1.0
- imagePullPolicy: IfNotPresent
- name: healthz
- ports:
- - containerPort: 8080
- protocol: TCP
- resources:
- limits:
- cpu: 10m
- memory: 20Mi
- dnsPolicy: Default
- volumes:
- - name: config-volume
- configMap:
- name: coredns-configmap
diff --git a/.travis/kubernetes/nginx-rc.yml b/.travis/kubernetes/nginx-rc.yml
deleted file mode 100644
index 4597de409..000000000
--- a/.travis/kubernetes/nginx-rc.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-apiVersion: v1
-kind: ReplicationController
-metadata:
- name: nginx-controller
- namespace: poddemo
-spec:
- replicas: 2
- selector:
- role: load-balancer
- template:
- metadata:
- labels:
- role: load-balancer
- spec:
- containers:
- - name: nginx
- image: coreos/nginx
- ports:
- - containerPort: 80
diff --git a/.travis/kubernetes/run_skydns.sh b/.travis/kubernetes/run_skydns.sh
deleted file mode 100755
index f7000a37f..000000000
--- a/.travis/kubernetes/run_skydns.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/bash
-
-# Running skydns based on instructions at: https://testdatamanagement.wordpress.com/2015/09/01/running-kubernetes-in-docker-with-dns-on-a-single-node/
-
-PWD=`pwd`
-BASEDIR=`readlink -e $(dirname ${0})`
-cd ${BASEDIR}
-
-KUBECTL='docker exec hyperkube /hyperkube kubectl'
-
-#RUN_SKYDNS="yes"
-RUN_SKYDNS="no"
-
-# DNS_ARGUMENTS needs to be passed when Kubernetes is setup.
-if [ "${RUN_SKYDNS}" = "yes" ]; then
- DNS_ARGUMENTS="--cluster-dns=10.0.0.10 --cluster-domain=cluster.local"
-else
- DNS_ARGUMENTS=""
-fi
-
-wait_until_k8s_ready() {
- # Wait until kubernetes is up and fully responsive
- while :
- do
- ${KUBECTL} get nodes 2>/dev/null | grep -q '127.0.0.1'
- if [ "${?}" = "0" ]; then
- break
- else
- echo "sleeping for 5 seconds (waiting for kubernetes to start)"
- sleep 5
- fi
- done
- echo "kubernetes nodes:"
- ${KUBECTL} get nodes
-}
-
-
-if [ "${RUN_SKYDNS}" = "yes" ]; then
- wait_until_k8s_ready
-
- echo "Launch kube2sky..."
- docker run -d --net=host gcr.io/google_containers/kube2sky:1.11 --kube_master_url=http://127.0.0.1:8080 --domain=cluster.local
-
- echo ""
-
- echo "Launch SkyDNS..."
- docker run -d --net=host gcr.io/google_containers/skydns:2015-03-11-001 --machines=http://localhost:4001 --addr=0.0.0.0:53 --domain=cluster.local
-else
- true
-fi
-
-cd ${PWD}
diff --git a/.travis/kubernetes/setup_k8s_services.sh b/.travis/kubernetes/setup_k8s_services.sh
deleted file mode 100755
index aae198a50..000000000
--- a/.travis/kubernetes/setup_k8s_services.sh
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/bash
-
-set -x
-
-KUBECTL='docker exec hyperkube /hyperkube kubectl'
-
-PWD=`pwd`
-cd `readlink -e $(dirname ${0})`
-
-create_namespaces() {
- for n in ${NAMESPACES};
- do
- echo "Creating namespace: ${n}"
- ${KUBECTL} get namespaces --no-headers 2>/dev/null | grep -q ${n}
- if [ "${?}" != "0" ]; then
- ${KUBECTL} create namespace ${n}
- fi
- done
-
- echo "kubernetes namespaces:"
- ${KUBECTL} get namespaces
-}
-
-# run_and_expose_service <servicename> <namespace> <image> <port>
-run_and_expose_service() {
- if [ "${#}" != "4" ]; then
- return -1
- fi
-
- service="${1}"
- namespace="${2}"
- image="${3}"
- port="${4}"
-
- echo " starting service '${service}' in namespace '${namespace}'"
-
- ${KUBECTL} get deployment --namespace=${namespace} --no-headers 2>/dev/null | grep -q ${service}
- if [ "${?}" != "0" ]; then
- ${KUBECTL} run ${service} --namespace=${namespace} --image=${image}
- else
- echo "warn: service '${service}' already running in namespace '${namespace}'"
- fi
-
- ${KUBECTL} get service --namespace=${namespace} --no-headers 2>/dev/null | grep -q ${service}
- if [ "${?}" != "0" ]; then
- ${KUBECTL} expose deployment ${service} --namespace=${namespace} --port=${port}
- else
- echo "warn: service '${service}' already exposed in namespace '${namespace}'"
- fi
-}
-
-#run_and_expose_rc nginx-controller nginx-rc.yml poddemo 80
-run_and_expose_rc() {
- if [ "${#}" != "4" ]; then
- return -1
- fi
-
- rc_name="${1}"
- rc_file="${2}"
- namespace="${3}"
- port="${4}"
-
- echo " starting replication controller '${rc_name}' from '${rc_file}' in namespace '${namespace}'"
-
- ${KUBECTL} get rc --namespace=${namespace} --no-headers 2>/dev/null | grep -q ${rc_name}
- if [ "${?}" != "0" ]; then
- ${KUBECTL} expose -f ${rc_file} --namespace=${namespace} --port=${port}
- else
- echo "warn: rc '${rc_name}' already running in namespace '${namespace}'"
- fi
-}
-
-echo "Starting sample kubernetes services..."
-
-NAMESPACES="demo poddemo test"
-create_namespaces
-
-echo ""
-echo "Starting services:"
-
-run_and_expose_service mynginx demo nginx 80
-run_and_expose_service webserver demo nginx 80
-run_and_expose_service mynginx test nginx 80
-run_and_expose_service webserver test nginx 80
-
-echo ""
-echo "Services exposed:"
-${KUBECTL} get services --all-namespaces
-
-echo ""
-echo "Starting replicationcontrollers:"
-
-run_and_expose_rc nginx-controller nginx-rc.yml poddemo 80
-
-echo ""
-echo "ReplicationControllers exposed:"
-${KUBECTL} get rc --all-namespaces
-
-cd ${PWD}
diff --git a/middleware/kubernetes/kubernetes.go b/middleware/kubernetes/kubernetes.go
index deab8e453..78c14ee82 100644
--- a/middleware/kubernetes/kubernetes.go
+++ b/middleware/kubernetes/kubernetes.go
@@ -31,6 +31,7 @@ import (
type Kubernetes struct {
Next middleware.Handler
Zones []string
+ primaryZone int
Proxy proxy.Proxy // Proxy for looking up names during the resolution process
APIEndpoint string
APICertAuth string
@@ -53,6 +54,11 @@ func (k *Kubernetes) Services(state request.Request, exact bool, opt middleware.
return s, nil, e // Haven't implemented debug queries yet.
}
+// PrimaryZone will return the first non-reverse zone being handled by this middleware
+func (k *Kubernetes) PrimaryZone() (string) {
+ return k.Zones[k.primaryZone]
+}
+
// Reverse implements the ServiceBackend interface.
func (k *Kubernetes) Reverse(state request.Request, exact bool, opt middleware.Options) ([]msg.Service, []msg.Service, error) {
ip := dnsutil.ExtractAddressFromReverse(state.Name())
@@ -286,7 +292,8 @@ func (k *Kubernetes) getServiceRecordForIP(ip, name string) []msg.Service {
}
for _, service := range svcList {
if service.Spec.ClusterIP == ip {
- return []msg.Service{{Host: ip}}
+ name := k.NameTemplate.RecordNameFromNameValues(nametemplate.NameValues{TypeName: "svc", ServiceName: service.ObjectMeta.Name, Namespace: service.ObjectMeta.Namespace, Zone: k.PrimaryZone()})
+ return []msg.Service{msg.Service{Host: name}}
}
}
diff --git a/middleware/kubernetes/setup.go b/middleware/kubernetes/setup.go
index 76280dcd5..d2b34b054 100644
--- a/middleware/kubernetes/setup.go
+++ b/middleware/kubernetes/setup.go
@@ -71,6 +71,19 @@ func kubernetesParse(c *caddy.Controller) (*Kubernetes, error) {
return nil, errors.New("Zone name must be provided for kubernetes middleware.")
}
+ k8s.primaryZone = -1
+ for i, z := range k8s.Zones {
+ if strings.HasSuffix(z, "in-addr.arpa.") || strings.HasSuffix(z, "ip6.arpa.") {
+ continue
+ }
+ k8s.primaryZone = i
+ break
+ }
+
+ if k8s.primaryZone == -1 {
+ return nil, errors.New("A non-reverse zone name must be given for Kubernetes.")
+ }
+
for c.NextBlock() {
switch c.Val() {
case "template":
diff --git a/test/kubernetes_test.go b/test/kubernetes_test.go
index 6fba08e54..819f55489 100644
--- a/test/kubernetes_test.go
+++ b/test/kubernetes_test.go
@@ -17,144 +17,175 @@ import (
var dnsTestCases = []test.Case{
{
- Qname: "mynginx.demo.svc.coredns.local.", Qtype: dns.TypeA,
+ Qname: "svc-1-a.test-1.svc.cluster.local.", Qtype: dns.TypeA,
Rcode: dns.RcodeSuccess,
Answer: []dns.RR{
- test.A("mynginx.demo.svc.coredns.local. 1800 IN A 10.3.0.10"),
+ test.A("svc-1-a.test-1.svc.cluster.local. 303 IN A 10.3.0.100"),
},
},
{
- Qname: "bogusservice.demo.svc.coredns.local.", Qtype: dns.TypeA,
+ Qname: "bogusservice.test-1.svc.cluster.local.", Qtype: dns.TypeA,
Rcode: dns.RcodeNameError,
Answer: []dns.RR{},
},
{
- Qname: "mynginx.*.svc.coredns.local.", Qtype: dns.TypeA,
+ Qname: "svc-1-a.*.svc.cluster.local.", Qtype: dns.TypeA,
Rcode: dns.RcodeSuccess,
Answer: []dns.RR{
- test.A("mynginx.demo.svc.coredns.local. 1800 IN A 10.3.0.10"),
+ test.A("svc-1-a.test-1.svc.cluster.local. 303 IN A 10.3.0.100"),
},
},
{
- Qname: "mynginx.any.svc.coredns.local.", Qtype: dns.TypeA,
+ Qname: "svc-1-a.any.svc.cluster.local.", Qtype: dns.TypeA,
Rcode: dns.RcodeSuccess,
Answer: []dns.RR{
- test.A("mynginx.demo.svc.coredns.local. 1800 IN A 10.3.0.10"),
+ test.A("svc-1-a.test-1.svc.cluster.local. 303 IN A 10.3.0.100"),
},
},
{
- Qname: "bogusservice.*.svc.coredns.local.", Qtype: dns.TypeA,
+ Qname: "bogusservice.*.svc.cluster.local.", Qtype: dns.TypeA,
Rcode: dns.RcodeNameError,
Answer: []dns.RR{},
},
{
- Qname: "bogusservice.any.svc.coredns.local.", Qtype: dns.TypeA,
+ Qname: "bogusservice.any.svc.cluster.local.", Qtype: dns.TypeA,
Rcode: dns.RcodeNameError,
Answer: []dns.RR{},
},
{
- Qname: "*.demo.svc.coredns.local.", Qtype: dns.TypeA,
+ Qname: "*.test-1.svc.cluster.local.", Qtype: dns.TypeA,
Rcode: dns.RcodeSuccess,
Answer: []dns.RR{
- test.A("mynginx.demo.svc.coredns.local. 1800 IN A 10.3.0.10"),
- test.A("webserver.demo.svc.coredns.local. 1800 IN A 10.3.0.20"),
+ test.A("svc-1-a.test-1.svc.cluster.local. 303 IN A 10.3.0.100"),
+ test.A("svc-1-b.test-1.svc.cluster.local. 303 IN A 10.3.0.110"),
+ test.A("svc-c.test-1.svc.cluster.local. 303 IN A 10.3.0.115"),
},
},
{
- Qname: "any.demo.svc.coredns.local.", Qtype: dns.TypeA,
+ Qname: "any.test-1.svc.cluster.local.", Qtype: dns.TypeA,
Rcode: dns.RcodeSuccess,
Answer: []dns.RR{
- test.A("mynginx.demo.svc.coredns.local. 1800 IN A 10.3.0.10"),
- test.A("webserver.demo.svc.coredns.local. 1800 IN A 10.3.0.20"),
+ test.A("svc-1-a.test-1.svc.cluster.local. 303 IN A 10.3.0.100"),
+ test.A("svc-1-b.test-1.svc.cluster.local. 303 IN A 10.3.0.110"),
+ test.A("svc-c.test-1.svc.cluster.local. 303 IN A 10.3.0.115"),
},
},
{
- Qname: "any.test.svc.coredns.local.", Qtype: dns.TypeA,
+ Qname: "any.test-2.svc.cluster.local.", Qtype: dns.TypeA,
Rcode: dns.RcodeNameError,
Answer: []dns.RR{},
},
{
- Qname: "*.test.svc.coredns.local.", Qtype: dns.TypeA,
+ Qname: "*.test-2.svc.cluster.local.", Qtype: dns.TypeA,
Rcode: dns.RcodeNameError,
Answer: []dns.RR{},
},
{
- Qname: "*.*.svc.coredns.local.", Qtype: dns.TypeA,
+ Qname: "*.*.svc.cluster.local.", Qtype: dns.TypeA,
Rcode: dns.RcodeSuccess,
Answer: []dns.RR{
- test.A("mynginx.demo.svc.coredns.local. 1800 IN A 10.3.0.10"),
- test.A("webserver.demo.svc.coredns.local. 1800 IN A 10.3.0.20"),
+ test.A("svc-1-a.test-1.svc.cluster.local. 303 IN A 10.3.0.100"),
+ test.A("svc-1-b.test-1.svc.cluster.local. 303 IN A 10.3.0.110"),
+ test.A("svc-c.test-1.svc.cluster.local. 303 IN A 10.3.0.115"),
},
},
//TODO: Fix below to all use test.SRV not test.A!
{
- Qname: "mynginx.demo.svc.coredns.local.", Qtype: dns.TypeSRV,
+ Qname: "svc-1-a.test-1.svc.cluster.local.", Qtype: dns.TypeSRV,
Rcode: dns.RcodeSuccess,
Answer: []dns.RR{
- test.A("mynginx.demo.svc.coredns.local. 1800 IN A 10.3.0.10"),
+ test.SRV("_http._tcp.svc-1-a.test-1.svc.cluster.local. 303 IN SRV 10 100 80 svc-1-a.test-1.svc.cluster.local."),
+ test.SRV("_https._tcp.svc-1-a.test-1.svc.cluster.local. 303 IN SRV 10 100 443 svc-1-a.test-1.svc.cluster.local."),
},
},
{
- Qname: "bogusservice.demo.svc.coredns.local.", Qtype: dns.TypeSRV,
+ Qname: "bogusservice.test-1.svc.cluster.local.", Qtype: dns.TypeSRV,
Rcode: dns.RcodeNameError,
Answer: []dns.RR{},
},
{
- Qname: "mynginx.*.svc.coredns.local.", Qtype: dns.TypeSRV,
+ Qname: "svc-1-a.*.svc.cluster.local.", Qtype: dns.TypeSRV,
Rcode: dns.RcodeSuccess,
Answer: []dns.RR{
- test.A("mynginx.demo.svc.coredns.local. 1800 IN A 10.3.0.10"),
+ test.SRV("_http._tcp.svc-1-a.test-1.svc.cluster.local. 303 IN SRV 10 100 80 svc-1-a.test-1.svc.cluster.local."),
+ test.SRV("_https._tcp.svc-1-a.test-1.svc.cluster.local. 303 IN SRV 10 100 443 svc-1-a.test-1.svc.cluster.local."),
},
},
{
- Qname: "mynginx.any.svc.coredns.local.", Qtype: dns.TypeSRV,
+ Qname: "svc-1-a.any.svc.cluster.local.", Qtype: dns.TypeSRV,
Rcode: dns.RcodeSuccess,
Answer: []dns.RR{
- test.A("mynginx.demo.svc.coredns.local. 1800 IN A 10.3.0.10"),
+ test.SRV("_http._tcp.svc-1-a.test-1.svc.cluster.local. 303 IN SRV 10 100 80 svc-1-a.test-1.svc.cluster.local."),
+ test.SRV("_https._tcp.svc-1-a.test-1.svc.cluster.local. 303 IN SRV 10 100 443 svc-1-a.test-1.svc.cluster.local."),
},
},
{
- Qname: "bogusservice.*.svc.coredns.local.", Qtype: dns.TypeSRV,
+ Qname: "bogusservice.*.svc.cluster.local.", Qtype: dns.TypeSRV,
Rcode: dns.RcodeNameError,
Answer: []dns.RR{},
},
{
- Qname: "bogusservice.any.svc.coredns.local.", Qtype: dns.TypeSRV,
+ Qname: "bogusservice.any.svc.cluster.local.", Qtype: dns.TypeSRV,
Rcode: dns.RcodeNameError,
Answer: []dns.RR{},
},
{
- Qname: "*.demo.svc.coredns.local.", Qtype: dns.TypeSRV,
+ Qname: "*.test-1.svc.cluster.local.", Qtype: dns.TypeSRV,
Rcode: dns.RcodeSuccess,
Answer: []dns.RR{
- test.A("mynginx.demo.svc.coredns.local. 1800 IN A 10.3.0.10"),
- test.A("webserver.demo.svc.coredns.local. 1800 IN A 10.3.0.20"),
+ test.SRV("_http._tcp.svc-1-a.test-1.svc.cluster.local. 303 IN SRV 10 100 80 svc-1-a.test-1.svc.cluster.local."),
+ test.SRV("_https._tcp.svc-1-a.test-1.svc.cluster.local. 303 IN SRV 10 100 443 svc-1-a.test-1.svc.cluster.local."),
+ test.SRV("_http._tcp.svc-1-b.test-1.svc.cluster.local. 303 IN SRV 10 100 80 svc-1-b.test-1.svc.cluster.local."),
+ test.SRV("_c-port._udp.svc-c.test-1.svc.cluster.local. 303 IN SRV 10 100 1234 svc-c.test-1.svc.cluster.local."),
},
},
{
- Qname: "any.demo.svc.coredns.local.", Qtype: dns.TypeSRV,
+ Qname: "any.test-1.svc.cluster.local.", Qtype: dns.TypeSRV,
Rcode: dns.RcodeSuccess,
Answer: []dns.RR{
- test.A("mynginx.demo.svc.coredns.local. 1800 IN A 10.3.0.10"),
- test.A("webserver.demo.svc.coredns.local. 1800 IN A 10.3.0.20"),
+ test.SRV("_http._tcp.svc-1-a.test-1.svc.cluster.local. 303 IN SRV 10 100 80 svc-1-a.test-1.svc.cluster.local."),
+ test.SRV("_https._tcp.svc-1-a.test-1.svc.cluster.local. 303 IN SRV 10 100 443 svc-1-a.test-1.svc.cluster.local."),
+ test.SRV("_http._tcp.svc-1-b.test-1.svc.cluster.local. 303 IN SRV 10 100 80 svc-1-b.test-1.svc.cluster.local."),
+ test.SRV("_c-port._udp.svc-c.test-1.svc.cluster.local. 303 IN SRV 10 100 1234 svc-c.test-1.svc.cluster.local."),
},
},
{
- Qname: "any.test.svc.coredns.local.", Qtype: dns.TypeSRV,
+ Qname: "any.test-2.svc.cluster.local.", Qtype: dns.TypeSRV,
Rcode: dns.RcodeNameError,
Answer: []dns.RR{},
},
{
- Qname: "*.test.svc.coredns.local.", Qtype: dns.TypeSRV,
+ Qname: "*.test-2.svc.cluster.local.", Qtype: dns.TypeSRV,
Rcode: dns.RcodeNameError,
Answer: []dns.RR{},
},
{
- Qname: "*.*.svc.coredns.local.", Qtype: dns.TypeSRV,
+ Qname: "*.*.svc.cluster.local.", Qtype: dns.TypeSRV,
Rcode: dns.RcodeSuccess,
Answer: []dns.RR{
- test.A("mynginx.demo.svc.coredns.local. 1800 IN A 10.3.0.10"),
- test.A("webserver.demo.svc.coredns.local. 1800 IN A 10.3.0.20"),
+ test.SRV("_http._tcp.svc-1-a.test-1.svc.cluster.local. 303 IN SRV 10 100 80 svc-1-a.test-1.svc.cluster.local."),
+ test.SRV("_https._tcp.svc-1-a.test-1.svc.cluster.local. 303 IN SRV 10 100 443 svc-1-a.test-1.svc.cluster.local."),
+ test.SRV("_http._tcp.svc-1-b.test-1.svc.cluster.local. 303 IN SRV 10 100 80 svc-1-b.test-1.svc.cluster.local."),
+ test.SRV("_c-port._udp.svc-c.test-1.svc.cluster.local. 303 IN SRV 10 100 1234 svc-c.test-1.svc.cluster.local."),
+ },
+ },
+ {
+ Qname: "123.0.3.10.in-addr.arpa.", Qtype: dns.TypePTR,
+ Rcode: dns.RcodeSuccess,
+ Answer: []dns.RR{},
+ },
+ {
+ Qname: "100.0.3.10.in-addr.arpa.", Qtype: dns.TypePTR,
+ Rcode: dns.RcodeSuccess,
+ Answer: []dns.RR{
+ test.PTR("100.0.3.10.in-addr.arpa. 303 IN PTR svc-1-a.test-1.svc.cluster.local."),
+ },
+ },
+ {
+ Qname: "115.0.3.10.in-addr.arpa.", Qtype: dns.TypePTR,
+ Rcode: dns.RcodeSuccess,
+ Answer: []dns.RR{
+ test.PTR("115.0.3.10.in-addr.arpa. 303 IN PTR svc-c.test-1.svc.cluster.local."),
},
},
}
@@ -176,12 +207,12 @@ func createTestServer(t *testing.T, corefile string) (*caddy.Instance, string) {
func TestKubernetesIntegration(t *testing.T) {
corefile :=
`.:0 {
- kubernetes coredns.local {
+ kubernetes cluster.local 0.3.10.in-addr.arpa {
endpoint http://localhost:8080
- #endpoint https://kubernetes/ admin.pem admin-key.pem ca.pem
#endpoint https://kubernetes/
+ #tls admin.pem admin-key.pem ca.pem
#tls k8s_auth/client2.crt k8s_auth/client2.key k8s_auth/ca2.crt
- namespaces demo
+ namespaces test-1
}
`
server, udp := createTestServer(t, corefile)