aboutsummaryrefslogtreecommitdiff
path: root/plugin/kubernetes/external.go
diff options
context:
space:
mode:
authorGravatar Chris O'Haver <cohaver@infoblox.com> 2022-03-07 12:16:24 -0500
committerGravatar GitHub <noreply@github.com> 2022-03-07 12:16:24 -0500
commit7263808fe1cfb3b9dfbc09d70c52d52a563e5254 (patch)
treec4cd35304fc001617d6943903d6ec5744906737d /plugin/kubernetes/external.go
parent267ce8a820a9e3491106dbdbe85793a771f516ba (diff)
downloadcoredns-7263808fe1cfb3b9dfbc09d70c52d52a563e5254.tar.gz
coredns-7263808fe1cfb3b9dfbc09d70c52d52a563e5254.tar.zst
coredns-7263808fe1cfb3b9dfbc09d70c52d52a563e5254.zip
plugin/k8s_external: implement zone transfers (#4977)
Implement transfer for k8s_external. Notifies not supported. Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
Diffstat (limited to 'plugin/kubernetes/external.go')
-rw-r--r--plugin/kubernetes/external.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/plugin/kubernetes/external.go b/plugin/kubernetes/external.go
index 77fa0ef58..74e7151fc 100644
--- a/plugin/kubernetes/external.go
+++ b/plugin/kubernetes/external.go
@@ -88,3 +88,26 @@ func (k *Kubernetes) ExternalAddress(state request.Request) []dns.RR {
// plugin to bind to a different IP address.
return k.nsAddrs(true, state.Zone)
}
+
+// ExternalServices returns all services with external IPs
+func (k *Kubernetes) ExternalServices(zone string) (services []msg.Service) {
+ zonePath := msg.Path(zone, coredns)
+ for _, svc := range k.APIConn.ServiceList() {
+ for _, ip := range svc.ExternalIPs {
+ for _, p := range svc.Ports {
+ s := msg.Service{Host: ip, Port: int(p.Port), TTL: k.ttl}
+ s.Key = strings.Join([]string{zonePath, svc.Namespace, svc.Name}, "/")
+ services = append(services, s)
+ s.Key = strings.Join(append([]string{zonePath, svc.Namespace, svc.Name}, strings.ToLower("_"+string(p.Protocol)), strings.ToLower("_"+string(p.Name))), "/")
+ s.TargetStrip = 2
+ services = append(services, s)
+ }
+ }
+ }
+ return services
+}
+
+//ExternalSerial returns the serial of the external zone
+func (k *Kubernetes) ExternalSerial(string) uint32 {
+ return uint32(k.APIConn.Modified(true))
+}