diff options
author | 2017-09-14 09:36:06 +0100 | |
---|---|---|
committer | 2017-09-14 09:36:06 +0100 | |
commit | d8714e64e400ef873c2adc4d929a07d7890727b9 (patch) | |
tree | c9fa4c157e6af12eb1517654f8d23ca5d5619513 /plugin/kubernetes/ns.go | |
parent | b984aa45595dc95253b91191afe7d3ee29e71b48 (diff) | |
download | coredns-d8714e64e400ef873c2adc4d929a07d7890727b9.tar.gz coredns-d8714e64e400ef873c2adc4d929a07d7890727b9.tar.zst coredns-d8714e64e400ef873c2adc4d929a07d7890727b9.zip |
Remove the word middleware (#1067)
* Rename middleware to plugin
first pass; mostly used 'sed', few spots where I manually changed
text.
This still builds a coredns binary.
* fmt error
* Rename AddMiddleware to AddPlugin
* Readd AddMiddleware to remain backwards compat
Diffstat (limited to 'plugin/kubernetes/ns.go')
-rw-r--r-- | plugin/kubernetes/ns.go | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/plugin/kubernetes/ns.go b/plugin/kubernetes/ns.go new file mode 100644 index 000000000..4cacc382f --- /dev/null +++ b/plugin/kubernetes/ns.go @@ -0,0 +1,65 @@ +package kubernetes + +import ( + "net" + "strings" + + "github.com/miekg/dns" + "k8s.io/client-go/1.5/pkg/api" +) + +func isDefaultNS(name, zone string) bool { + return strings.Index(name, defaultNSName) == 0 && strings.Index(name, zone) == len(defaultNSName) +} + +func (k *Kubernetes) nsAddr() *dns.A { + var ( + svcName string + svcNamespace string + ) + + rr := new(dns.A) + localIP := k.interfaceAddrsFunc() + endpointsList := k.APIConn.EndpointsList() + + rr.A = localIP + +FindEndpoint: + for _, ep := range endpointsList.Items { + for _, eps := range ep.Subsets { + for _, addr := range eps.Addresses { + if localIP.Equal(net.ParseIP(addr.IP)) { + svcNamespace = ep.ObjectMeta.Namespace + svcName = ep.ObjectMeta.Name + break FindEndpoint + } + } + } + } + + if len(svcName) == 0 { + rr.Hdr.Name = defaultNSName + rr.A = localIP + return rr + } + // Find service to get ClusterIP + serviceList := k.APIConn.ServiceList() + +FindService: + for _, svc := range serviceList { + if svcName == svc.Name && svcNamespace == svc.Namespace { + if svc.Spec.ClusterIP == api.ClusterIPNone { + rr.A = localIP + } else { + rr.A = net.ParseIP(svc.Spec.ClusterIP) + } + break FindService + } + } + + rr.Hdr.Name = strings.Join([]string{svcName, svcNamespace, "svc."}, ".") + + return rr +} + +const defaultNSName = "ns.dns." |