Browse code

Expose _endpoints.<> as a DNS endpoint

Allows local search lookup "_endpoints.servicename" without requiring
a search domain.

Clayton Coleman authored on 2015/06/05 08:10:22
Showing 3 changed files
... ...
@@ -42,8 +42,8 @@ func openshiftFallback(name string, exact bool) (string, bool) {
42 42
 	if name == "openshift.default.svc" {
43 43
 		return "kubernetes.default.svc.", true
44 44
 	}
45
-	if name == "openshift.default.endpoints" {
46
-		return "kubernetes.default.endpoints.", true
45
+	if name == "_endpoints.openshift.default.svc" {
46
+		return "_endpoints.kubernetes.default.", true
47 47
 	}
48 48
 	return "", false
49 49
 }
... ...
@@ -94,8 +94,10 @@ func (b *ServiceResolver) Records(name string, exact bool) ([]msg.Service, error
94 94
 			return nil, nil
95 95
 		}
96 96
 
97
+		retrieveEndpoints := segments[0] == "endpoints" || (len(segments) > 3 && segments[3] == "_endpoints")
98
+
97 99
 		// if has a portal IP and looking at svc
98
-		if svc.Spec.PortalIP != kapi.PortalIPNone && segments[0] == "svc" {
100
+		if svc.Spec.PortalIP != kapi.PortalIPNone && !retrieveEndpoints {
99 101
 			if len(svc.Spec.Ports) == 0 {
100 102
 				return nil, nil
101 103
 			}
... ...
@@ -128,7 +128,7 @@ func TestDNS(t *testing.T) {
128 128
 			expect:          []*net.IP{&masterIP},
129 129
 		},
130 130
 		{ // resolving endpoints of a service works
131
-			dnsQuestionName: "kubernetes.default.endpoints.cluster.local.",
131
+			dnsQuestionName: "_endpoints.kubernetes.default.svc.cluster.local.",
132 132
 			expect:          []*net.IP{&localIP},
133 133
 		},
134 134
 		{ // openshift override works