aboutsummaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
authorGravatar Chris O'Haver <cohaver@infoblox.com> 2020-05-05 14:34:24 -0400
committerGravatar GitHub <noreply@github.com> 2020-05-05 11:34:24 -0700
commit7c7772b735542d2b6a3a8b615f85f4a7db8ffb29 (patch)
treef11e158fc901bb036c10f89835eb810d636da186 /plugin
parent9f9509b6c0b947e44e7ea0240fd1251935b58836 (diff)
downloadcoredns-7c7772b735542d2b6a3a8b615f85f4a7db8ffb29.tar.gz
coredns-7c7772b735542d2b6a3a8b615f85f4a7db8ffb29.tar.zst
coredns-7c7772b735542d2b6a3a8b615f85f4a7db8ffb29.zip
always add client metadata (#3874)
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
Diffstat (limited to 'plugin')
-rw-r--r--plugin/kubernetes/metadata.go27
-rw-r--r--plugin/kubernetes/metadata_test.go37
2 files changed, 32 insertions, 32 deletions
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",
}