aboutsummaryrefslogtreecommitdiff
path: root/middleware/kubernetes/ns.go
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2017-08-10 23:13:08 +0100
committerGravatar GitHub <noreply@github.com> 2017-08-10 23:13:08 +0100
commitacfa6501e03829aadf8824344a509c760a27e891 (patch)
tree27a0c41a9f53c805a73b977cdf25f5fb6ce098ab /middleware/kubernetes/ns.go
parentc65fdb5fc3c1f10011d074610161a1ab068c4262 (diff)
downloadcoredns-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.go82
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."