aboutsummaryrefslogtreecommitdiff
path: root/plugin/kubernetes
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/kubernetes')
-rw-r--r--plugin/kubernetes/reverse.go8
-rw-r--r--plugin/kubernetes/reverse_test.go35
2 files changed, 27 insertions, 16 deletions
diff --git a/plugin/kubernetes/reverse.go b/plugin/kubernetes/reverse.go
index 13cc78b8f..e74ab88f1 100644
--- a/plugin/kubernetes/reverse.go
+++ b/plugin/kubernetes/reverse.go
@@ -25,14 +25,12 @@ func (k *Kubernetes) Reverse(state request.Request, exact bool, opt plugin.Optio
// If a service cluster ip does not match, it checks all endpoints
func (k *Kubernetes) serviceRecordForIP(ip, name string) []msg.Service {
// First check services with cluster ips
- for _, service := range k.APIConn.ServiceList() {
+ for _, service := range k.APIConn.SvcIndexReverse(ip) {
if (len(k.Namespaces) > 0) && !k.namespaceExposed(service.Namespace) {
continue
}
- if service.Spec.ClusterIP == ip {
- domain := strings.Join([]string{service.Name, service.Namespace, Svc, k.primaryZone()}, ".")
- return []msg.Service{{Host: domain}}
- }
+ domain := strings.Join([]string{service.Name, service.Namespace, Svc, k.primaryZone()}, ".")
+ return []msg.Service{{Host: domain}}
}
// If no cluster ips match, search endpoints
for _, ep := range k.APIConn.EpIndexReverse(ip) {
diff --git a/plugin/kubernetes/reverse_test.go b/plugin/kubernetes/reverse_test.go
index 7a5435181..604dff0c9 100644
--- a/plugin/kubernetes/reverse_test.go
+++ b/plugin/kubernetes/reverse_test.go
@@ -14,16 +14,19 @@ import (
type APIConnReverseTest struct{}
-func (APIConnReverseTest) HasSynced() bool { return true }
-func (APIConnReverseTest) Run() { return }
-func (APIConnReverseTest) Stop() error { return nil }
-func (APIConnReverseTest) PodIndex(string) []*api.Pod { return nil }
-func (APIConnReverseTest) SvcIndex(string) []*api.Service { return nil }
-func (APIConnReverseTest) SvcIndexReverse(string) []*api.Service { return nil }
-func (APIConnReverseTest) EpIndex(string) []*api.Endpoints { return nil }
-func (APIConnReverseTest) EndpointsList() []*api.Endpoints { return nil }
+func (APIConnReverseTest) HasSynced() bool { return true }
+func (APIConnReverseTest) Run() { return }
+func (APIConnReverseTest) Stop() error { return nil }
+func (APIConnReverseTest) PodIndex(string) []*api.Pod { return nil }
+func (APIConnReverseTest) SvcIndex(string) []*api.Service { return nil }
+func (APIConnReverseTest) EpIndex(string) []*api.Endpoints { return nil }
+func (APIConnReverseTest) EndpointsList() []*api.Endpoints { return nil }
+func (APIConnReverseTest) ServiceList() []*api.Service { return nil }
-func (APIConnReverseTest) ServiceList() []*api.Service {
+func (APIConnReverseTest) SvcIndexReverse(ip string) []*api.Service {
+ if ip != "192.168.1.100" {
+ return nil
+ }
svcs := []*api.Service{
{
ObjectMeta: meta.ObjectMeta{
@@ -43,7 +46,10 @@ func (APIConnReverseTest) ServiceList() []*api.Service {
return svcs
}
-func (APIConnReverseTest) EpIndexReverse(string) []*api.Endpoints {
+func (APIConnReverseTest) EpIndexReverse(ip string) []*api.Endpoints {
+ if ip != "10.0.0.100" {
+ return nil
+ }
eps := []*api.Endpoints{
{
Subsets: []api.EndpointSubset{
@@ -82,7 +88,7 @@ func (APIConnReverseTest) GetNodeByName(name string) (*api.Node, error) {
func TestReverse(t *testing.T) {
- k := New([]string{"cluster.local.", "0.10.in-addr.arpa."})
+ k := New([]string{"cluster.local.", "0.10.in-addr.arpa.", "168.192.in-addr.arpa."})
k.APIConn = &APIConnReverseTest{}
tests := []test.Case{
@@ -94,6 +100,13 @@ func TestReverse(t *testing.T) {
},
},
{
+ Qname: "100.1.168.192.in-addr.arpa.", Qtype: dns.TypePTR,
+ Rcode: dns.RcodeSuccess,
+ Answer: []dns.RR{
+ test.PTR("100.1.168.192.in-addr.arpa. 303 IN PTR svc1.testns.svc.cluster.local."),
+ },
+ },
+ {
Qname: "101.0.0.10.in-addr.arpa.", Qtype: dns.TypePTR,
Rcode: dns.RcodeSuccess,
Ns: []dns.RR{