diff options
author | 2017-08-10 23:13:08 +0100 | |
---|---|---|
committer | 2017-08-10 23:13:08 +0100 | |
commit | acfa6501e03829aadf8824344a509c760a27e891 (patch) | |
tree | 27a0c41a9f53c805a73b977cdf25f5fb6ce098ab /middleware/kubernetes/ns.go | |
parent | c65fdb5fc3c1f10011d074610161a1ab068c4262 (diff) | |
download | coredns-acfa6501e03829aadf8824344a509c760a27e891.tar.gz coredns-acfa6501e03829aadf8824344a509c760a27e891.tar.zst coredns-acfa6501e03829aadf8824344a509c760a27e891.zip |
mw/k8s: remove dependence on global var (#888)
* mw/k8s: remove dependence on global var
Remove the global coreDNSRecord that was used. Remove tests the
referenced that var. Cleanup the rest.
* Rename function as well
* fixes
Diffstat (limited to 'middleware/kubernetes/ns.go')
-rw-r--r-- | middleware/kubernetes/ns.go | 82 |
1 files changed, 38 insertions, 44 deletions
diff --git a/middleware/kubernetes/ns.go b/middleware/kubernetes/ns.go index d14a1e96d..8f521e36a 100644 --- a/middleware/kubernetes/ns.go +++ b/middleware/kubernetes/ns.go @@ -10,15 +10,11 @@ import ( "k8s.io/client-go/1.5/pkg/api" ) -const defaultNSName = "ns.dns." - -var corednsRecord dns.A - // DefaultNSMsg returns an msg.Service representing an A record for // ns.dns.[zone] -> dns service ip. This A record is needed to legitimize // the SOA response in middleware.NS(), which is hardcoded at ns.dns.[zone]. func (k *Kubernetes) defaultNSMsg(r recordRequest) msg.Service { - ns := k.coreDNSRecord() + ns := k.nsAddr() s := msg.Service{ Key: msg.Path(strings.Join([]string{defaultNSName, r.zone}, "."), "coredns"), Host: ns.A.String(), @@ -30,57 +26,55 @@ func isDefaultNS(name string, r recordRequest) bool { return strings.Index(name, defaultNSName) == 0 && strings.Index(name, r.zone) == len(defaultNSName) } -func (k *Kubernetes) coreDNSRecord() dns.A { +func (k *Kubernetes) nsAddr() *dns.A { var ( svcName string svcNamespace string - dnsIP net.IP ) - if len(corednsRecord.Hdr.Name) == 0 || corednsRecord.A == nil { - // get local Pod IP - localIP := k.interfaceAddrsFunc() - // Find endpoint matching IP to get service and namespace - endpointsList := k.APIConn.EndpointsList() + 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)) { +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 - } + svcNamespace = ep.ObjectMeta.Namespace + svcName = ep.ObjectMeta.Name + break FindEndpoint } } } + } - if len(svcName) == 0 { - corednsRecord.Hdr.Name = defaultNSName - corednsRecord.A = localIP - return corednsRecord - } - // 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 { - dnsIP = localIP - } else { - dnsIP = net.ParseIP(svc.Spec.ClusterIP) - } - break FindService + 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 } - if dnsIP == nil { - dnsIP = localIP - } - - corednsRecord.Hdr.Name = strings.Join([]string{svcName, svcNamespace, "svc."}, ".") - corednsRecord.A = dnsIP } - return corednsRecord + + rr.Hdr.Name = strings.Join([]string{svcName, svcNamespace, "svc."}, ".") + + return rr } + +const defaultNSName = "ns.dns." |