diff --git a/plugin/kubernetes/metadata.go b/plugin/kubernetes/metadata.go index 09d0b3ae5..36e2f9a0f 100644 --- a/plugin/kubernetes/metadata.go +++ b/plugin/kubernetes/metadata.go @@ -10,7 +10,21 @@ import ( // Metadata implements the metadata.Provider interface. func (k *Kubernetes) Metadata(ctx context.Context, state request.Request) context.Context { + pod := k.podWithIP(state.IP()) + if pod != nil { + metadata.SetValueFunc(ctx, "kubernetes/client-namespace", func() string { + return pod.Namespace + }) + + metadata.SetValueFunc(ctx, "kubernetes/client-pod-name", func() string { + return pod.Name + }) + } + zone := plugin.Zones(k.Zones).Matches(state.Name()) + if zone == "" { + return ctx + } // possible optimization: cache r so it doesn't need to be calculated again in ServeDNS r, err := parseRequest(state.Name(), zone) if err != nil { @@ -44,18 +58,5 @@ func (k *Kubernetes) Metadata(ctx context.Context, state request.Request) contex return r.podOrSvc }) - pod := k.podWithIP(state.IP()) - if pod == nil { - return ctx - } - - metadata.SetValueFunc(ctx, "kubernetes/client-namespace", func() string { - return pod.Namespace - }) - - metadata.SetValueFunc(ctx, "kubernetes/client-pod-name", func() string { - return pod.Name - }) - return ctx } diff --git a/plugin/kubernetes/metadata_test.go b/plugin/kubernetes/metadata_test.go index c55258335..224e84553 100644 --- a/plugin/kubernetes/metadata_test.go +++ b/plugin/kubernetes/metadata_test.go @@ -26,23 +26,23 @@ var metadataCases = []struct { { Qname: "10-240-0-1.podns.pod.cluster.local.", Qtype: dns.TypeA, Md: map[string]string{ - "kubernetes/endpoint": "", - "kubernetes/kind": "pod", - "kubernetes/namespace": "podns", - "kubernetes/port-name": "*", - "kubernetes/protocol": "*", - "kubernetes/service": "10-240-0-1", + "kubernetes/endpoint": "", + "kubernetes/kind": "pod", + "kubernetes/namespace": "podns", + "kubernetes/port-name": "*", + "kubernetes/protocol": "*", + "kubernetes/service": "10-240-0-1", }, }, { Qname: "s.ns.svc.cluster.local.", Qtype: dns.TypeA, Md: map[string]string{ - "kubernetes/endpoint": "", - "kubernetes/kind": "svc", - "kubernetes/namespace": "ns", - "kubernetes/port-name": "*", - "kubernetes/protocol": "*", - "kubernetes/service": "s", + "kubernetes/endpoint": "", + "kubernetes/kind": "svc", + "kubernetes/namespace": "ns", + "kubernetes/port-name": "*", + "kubernetes/protocol": "*", + "kubernetes/service": "s", }, }, { @@ -81,6 +81,11 @@ var metadataCases = []struct { "kubernetes/service": "s", }, }, + { + Qname: "example.com.", Qtype: dns.TypeA, + RemoteIP: "10.10.10.10", + Md: map[string]string{}, + }, } func mapsDiffer(a, b map[string]string) bool { @@ -128,7 +133,7 @@ func TestMetadataPodsVerified(t *testing.T) { ctx := metadata.ContextWithMetadata(context.Background()) state := request.Request{ - Req: &dns.Msg{Question: []dns.Question{{Name: "s.ns.svc.cluster.local.", Qtype: dns.TypeA}}}, + Req: &dns.Msg{Question: []dns.Question{{Name: "example.com.", Qtype: dns.TypeA}}}, Zone: ".", W: &test.ResponseWriter{}, } @@ -136,12 +141,6 @@ func TestMetadataPodsVerified(t *testing.T) { k.Metadata(ctx, state) expect := map[string]string{ - "kubernetes/endpoint": "", - "kubernetes/kind": "svc", - "kubernetes/namespace": "ns", - "kubernetes/port-name": "*", - "kubernetes/protocol": "*", - "kubernetes/service": "s", "kubernetes/client-namespace": "podns", "kubernetes/client-pod-name": "foo", }