diff options
author | 2018-06-27 07:45:32 -0700 | |
---|---|---|
committer | 2018-06-27 07:45:32 -0700 | |
commit | 99287d091c2db4028e54782fd4de43f63ca4b040 (patch) | |
tree | 5e9908031dbf3256a0ad3e2a54c0a90251e88757 /plugin/kubernetes/kubernetes.go | |
parent | b7480d5d1216aa87d80d240a31de750079eba904 (diff) | |
download | coredns-99287d091c2db4028e54782fd4de43f63ca4b040.tar.gz coredns-99287d091c2db4028e54782fd4de43f63ca4b040.tar.zst coredns-99287d091c2db4028e54782fd4de43f63ca4b040.zip |
Watch feature (#1527)
* Add part 1 watch functionality. (squashed)
* add funcs for service/endpoint fqdns
* add endpoints watch
* document exposed funcs
* only send subset deltas
* locking for watch map
* tests and docs
* add pod watch
* remove debugs prints
* feedback part 1
* add error reporting to proto
* inform clients of server stop+errors
* add grpc options param
* use proper context
* Review feedback:
* Removed client (will move to another repo)
* Use new log functions
* Change watchChan to be for string not []string
* Rework how k8s plugin stores watch tracking info to simplify
* Normalize the qname on watch request
* Add blank line back
* Revert another spurious change
* Fix tests
* Add stop channel.
Fix tests.
Better docs for plugin interface.
* fmt.Printf -> log.Warningf
* Move from dnsserver to plugin/pkg/watch
* gofmt
* remove dead client watches
* sate linter
* linter omg
Diffstat (limited to 'plugin/kubernetes/kubernetes.go')
-rw-r--r-- | plugin/kubernetes/kubernetes.go | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/plugin/kubernetes/kubernetes.go b/plugin/kubernetes/kubernetes.go index af0e64ee9..03b93748b 100644 --- a/plugin/kubernetes/kubernetes.go +++ b/plugin/kubernetes/kubernetes.go @@ -260,6 +260,8 @@ func (k *Kubernetes) InitKubeCache() (err error) { k.opts.initPodCache = k.podMode == podModeVerified + k.opts.zones = k.Zones + k.opts.endpointNameMode = k.endpointNameMode k.APIConn = newdnsController(kubeClient, k.opts) return err @@ -292,6 +294,29 @@ func (k *Kubernetes) Records(state request.Request, exact bool) ([]msg.Service, return services, err } +// serviceFQDN returns the k8s cluster dns spec service FQDN for the service (or endpoint) object. +func serviceFQDN(obj meta.Object, zone string) string { + return dnsutil.Join(append([]string{}, obj.GetName(), obj.GetNamespace(), Svc, zone)) +} + +// podFQDN returns the k8s cluster dns spec FQDN for the pod. +func podFQDN(p *api.Pod, zone string) string { + name := strings.Replace(p.Status.PodIP, ".", "-", -1) + name = strings.Replace(name, ":", "-", -1) + return dnsutil.Join(append([]string{}, name, p.GetNamespace(), Pod, zone)) +} + +// endpointFQDN returns a list of k8s cluster dns spec service FQDNs for each subset in the endpoint. +func endpointFQDN(ep *api.Endpoints, zone string, endpointNameMode bool) []string { + var names []string + for _, ss := range ep.Subsets { + for _, addr := range ss.Addresses { + names = append(names, dnsutil.Join(append([]string{}, endpointHostname(addr, endpointNameMode), serviceFQDN(ep, zone)))) + } + } + return names +} + func endpointHostname(addr api.EndpointAddress, endpointNameMode bool) string { if addr.Hostname != "" { return strings.ToLower(addr.Hostname) |