aboutsummaryrefslogtreecommitdiff
path: root/plugin/k8s_external
diff options
context:
space:
mode:
authorGravatar Chris O'Haver <cohaver@infoblox.com> 2022-03-25 13:50:23 -0400
committerGravatar GitHub <noreply@github.com> 2022-03-25 13:50:23 -0400
commit3df3147f8c6437064da64fab096bd4a4ec8ab61b (patch)
tree2252f77f686fdfbd7ff32c1fa16eb4ab786801e9 /plugin/k8s_external
parent27e18e72bc454026cf0ed8b82d87a9b6425a9f3e (diff)
downloadcoredns-3df3147f8c6437064da64fab096bd4a4ec8ab61b.tar.gz
coredns-3df3147f8c6437064da64fab096bd4a4ec8ab61b.tar.zst
coredns-3df3147f8c6437064da64fab096bd4a4ec8ab61b.zip
plugin/k8s_external: Persist tc bit from lookup to client response (#4716)
* persist reponse tc bit from lookup to client Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
Diffstat (limited to 'plugin/k8s_external')
-rw-r--r--plugin/k8s_external/external.go4
-rw-r--r--plugin/k8s_external/external_test.go2
-rw-r--r--plugin/k8s_external/msg_to_dns.go14
-rw-r--r--plugin/k8s_external/transfer.go4
4 files changed, 15 insertions, 9 deletions
diff --git a/plugin/k8s_external/external.go b/plugin/k8s_external/external.go
index c584b3414..ee1bdca15 100644
--- a/plugin/k8s_external/external.go
+++ b/plugin/k8s_external/external.go
@@ -99,9 +99,9 @@ func (e *External) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Ms
switch state.QType() {
case dns.TypeA:
- m.Answer = e.a(ctx, svc, state)
+ m.Answer, m.Truncated = e.a(ctx, svc, state)
case dns.TypeAAAA:
- m.Answer = e.aaaa(ctx, svc, state)
+ m.Answer, m.Truncated = e.aaaa(ctx, svc, state)
case dns.TypeSRV:
m.Answer, m.Extra = e.srv(ctx, svc, state)
default:
diff --git a/plugin/k8s_external/external_test.go b/plugin/k8s_external/external_test.go
index cf8e0e61c..78600f65d 100644
--- a/plugin/k8s_external/external_test.go
+++ b/plugin/k8s_external/external_test.go
@@ -62,7 +62,7 @@ var tests = []test.Case{
{
Qname: "svc1.testns.example.com.", Qtype: dns.TypeSRV, Rcode: dns.RcodeSuccess,
Answer: []dns.RR{test.SRV("svc1.testns.example.com. 5 IN SRV 0 100 80 svc1.testns.example.com.")},
- Extra: []dns.RR{test.A("svc1.testns.example.com. 5 IN A 1.2.3.4")},
+ Extra: []dns.RR{test.A("svc1.testns.example.com. 5 IN A 1.2.3.4")},
},
// SRV Service Not udp/tcp
{
diff --git a/plugin/k8s_external/msg_to_dns.go b/plugin/k8s_external/msg_to_dns.go
index 8920f4a00..540c8f442 100644
--- a/plugin/k8s_external/msg_to_dns.go
+++ b/plugin/k8s_external/msg_to_dns.go
@@ -10,7 +10,7 @@ import (
"github.com/miekg/dns"
)
-func (e *External) a(ctx context.Context, services []msg.Service, state request.Request) (records []dns.RR) {
+func (e *External) a(ctx context.Context, services []msg.Service, state request.Request) (records []dns.RR, truncated bool) {
dup := make(map[string]struct{})
for _, s := range services {
@@ -23,6 +23,9 @@ func (e *External) a(ctx context.Context, services []msg.Service, state request.
records = append(records, rr)
if resp, err := e.upstream.Lookup(ctx, state, dns.Fqdn(s.Host), dns.TypeA); err == nil {
records = append(records, resp.Answer...)
+ if resp.Truncated {
+ truncated = true
+ }
}
case dns.TypeA:
@@ -37,10 +40,10 @@ func (e *External) a(ctx context.Context, services []msg.Service, state request.
// nada
}
}
- return records
+ return records, truncated
}
-func (e *External) aaaa(ctx context.Context, services []msg.Service, state request.Request) (records []dns.RR) {
+func (e *External) aaaa(ctx context.Context, services []msg.Service, state request.Request) (records []dns.RR, truncated bool) {
dup := make(map[string]struct{})
for _, s := range services {
@@ -53,6 +56,9 @@ func (e *External) aaaa(ctx context.Context, services []msg.Service, state reque
records = append(records, rr)
if resp, err := e.upstream.Lookup(ctx, state, dns.Fqdn(s.Host), dns.TypeAAAA); err == nil {
records = append(records, resp.Answer...)
+ if resp.Truncated {
+ truncated = true
+ }
}
case dns.TypeA:
@@ -67,7 +73,7 @@ func (e *External) aaaa(ctx context.Context, services []msg.Service, state reque
}
}
}
- return records
+ return records, truncated
}
func (e *External) srv(ctx context.Context, services []msg.Service, state request.Request) (records, extra []dns.RR) {
diff --git a/plugin/k8s_external/transfer.go b/plugin/k8s_external/transfer.go
index 9c2c231f9..ddcd19c41 100644
--- a/plugin/k8s_external/transfer.go
+++ b/plugin/k8s_external/transfer.go
@@ -55,11 +55,11 @@ func (e *External) Transfer(zone string, serial uint32) (<-chan []dns.RR, error)
if svcs[i].TargetStrip == 0 {
// Add Service A/AAAA records
s := request.Request{Req: &dns.Msg{Question: []dns.Question{{Name: name}}}}
- as := e.a(ctx, []msg.Service{svcs[i]}, s)
+ as, _ := e.a(ctx, []msg.Service{svcs[i]}, s)
if len(as) > 0 {
ch <- as
}
- aaaas := e.aaaa(ctx, []msg.Service{svcs[i]}, s)
+ aaaas, _ := e.aaaa(ctx, []msg.Service{svcs[i]}, s)
if len(aaaas) > 0 {
ch <- aaaas
}