diff options
author | 2022-03-07 12:16:24 -0500 | |
---|---|---|
committer | 2022-03-07 12:16:24 -0500 | |
commit | 7263808fe1cfb3b9dfbc09d70c52d52a563e5254 (patch) | |
tree | c4cd35304fc001617d6943903d6ec5744906737d /plugin/kubernetes/external.go | |
parent | 267ce8a820a9e3491106dbdbe85793a771f516ba (diff) | |
download | coredns-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.go | 23 |
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)) +} |