diff options
Diffstat (limited to 'middleware/kubernetes/autopath.go')
-rw-r--r-- | middleware/kubernetes/autopath.go | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/middleware/kubernetes/autopath.go b/middleware/kubernetes/autopath.go index 4c5870c6b..be71ce326 100644 --- a/middleware/kubernetes/autopath.go +++ b/middleware/kubernetes/autopath.go @@ -1,32 +1,46 @@ package kubernetes import ( - "fmt" - + "github.com/coredns/coredns/middleware" "github.com/coredns/coredns/request" "k8s.io/client-go/1.5/pkg/api" ) -func (k *Kubernetes) AutoPath(state request.Request) ([]string, error) { +// AutoPath implements the AutoPathFunc call from the autopath middleware. +// It returns a per-query search path or nil indicating no searchpathing should happen. +func (k *Kubernetes) AutoPath(state request.Request) []string { + // Check if the query falls in a zone we are actually authoriative for and thus if we want autopath. + zone := middleware.Zones(k.Zones).Matches(state.Name()) + if zone == "" { + return nil + } + ip := state.IP() - pod := k.PodWithIP(ip) + pod := k.podWithIP(ip) if pod == nil { - return nil, fmt.Errorf("kubernets: no pod found for %s", ip) + return nil } - // something something namespace - namespace := pod.Namespace - - search := []string{namespace} // TODO: way more + search := make([]string, 3) + if zone == "." { + search[0] = pod.Namespace + ".svc." + search[1] = "svc." + search[2] = "." + } else { + search[0] = pod.Namespace + ".svc." + zone + search[1] = "svc." + zone + search[2] = zone + } + search = append(search, k.autoPathSearch...) search = append(search, "") // sentinal - return search, nil + return search } -// PodWithIP return the api.Pod for source IP ip. It return nil if nothing can be found. -func (k *Kubernetes) PodWithIP(ip string) (p *api.Pod) { +// podWithIP return the api.Pod for source IP ip. It returns nil if nothing can be found. +func (k *Kubernetes) podWithIP(ip string) (p *api.Pod) { objList := k.APIConn.PodIndex(ip) for _, o := range objList { p, ok := o.(*api.Pod) |