aboutsummaryrefslogtreecommitdiff
path: root/middleware/kubernetes/setup.go
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/kubernetes/setup.go')
-rw-r--r--middleware/kubernetes/setup.go218
1 files changed, 94 insertions, 124 deletions
diff --git a/middleware/kubernetes/setup.go b/middleware/kubernetes/setup.go
index 071db851a..2e531e859 100644
--- a/middleware/kubernetes/setup.go
+++ b/middleware/kubernetes/setup.go
@@ -3,8 +3,6 @@ package kubernetes
import (
"errors"
"fmt"
- "log"
- "net"
"strings"
"time"
@@ -74,141 +72,113 @@ func kubernetesParse(c *caddy.Controller) (*Kubernetes, error) {
k8s.autoPathSearch = searchFromResolvConf()
for c.Next() {
- if c.Val() == "kubernetes" {
- zones := c.RemainingArgs()
-
- if len(zones) != 0 {
- k8s.Zones = zones
- middleware.Zones(k8s.Zones).Normalize()
- } else {
- k8s.Zones = make([]string, len(c.ServerBlockKeys))
- for i := 0; i < len(c.ServerBlockKeys); i++ {
- k8s.Zones[i] = middleware.Host(c.ServerBlockKeys[i]).Normalize()
- }
- }
-
- k8s.primaryZoneIndex = -1
- for i, z := range k8s.Zones {
- if strings.HasSuffix(z, "in-addr.arpa.") || strings.HasSuffix(z, "ip6.arpa.") {
- continue
- }
- k8s.primaryZoneIndex = i
- break
+ zones := c.RemainingArgs()
+
+ if len(zones) != 0 {
+ k8s.Zones = zones
+ middleware.Zones(k8s.Zones).Normalize()
+ } else {
+ k8s.Zones = make([]string, len(c.ServerBlockKeys))
+ for i := 0; i < len(c.ServerBlockKeys); i++ {
+ k8s.Zones[i] = middleware.Host(c.ServerBlockKeys[i]).Normalize()
}
+ }
- if k8s.primaryZoneIndex == -1 {
- return nil, errors.New("non-reverse zone name must be given for Kubernetes")
+ k8s.primaryZoneIndex = -1
+ for i, z := range k8s.Zones {
+ if strings.HasSuffix(z, "in-addr.arpa.") || strings.HasSuffix(z, "ip6.arpa.") {
+ continue
}
+ k8s.primaryZoneIndex = i
+ break
+ }
- for c.NextBlock() {
- switch c.Val() {
- case "cidrs":
-
- // DEPRECATION WARNING
- log.Printf("[WARNING] \"cidrs\" will be removed for CoreDNS soon. See https://coredns.io/2017/07/23/corefile-explained#reverse-zones for the replacement")
-
- args := c.RemainingArgs()
- if len(args) > 0 {
- for _, cidrStr := range args {
- _, cidr, err := net.ParseCIDR(cidrStr)
- if err != nil {
- return nil, fmt.Errorf("invalid cidr: %s", cidrStr)
- }
- k8s.ReverseCidrs = append(k8s.ReverseCidrs, *cidr)
+ if k8s.primaryZoneIndex == -1 {
+ return nil, errors.New("non-reverse zone name must be used")
+ }
- }
- continue
- }
- return nil, c.ArgErr()
- case "pods":
- args := c.RemainingArgs()
- if len(args) == 1 {
- switch args[0] {
- case PodModeDisabled, PodModeInsecure, PodModeVerified:
- k8s.PodMode = args[0]
- default:
- return nil, fmt.Errorf("wrong value for pods: %s, must be one of: disabled, verified, insecure", args[0])
- }
- continue
- }
- return nil, c.ArgErr()
- case "namespaces":
- args := c.RemainingArgs()
- if len(args) > 0 {
- k8s.Namespaces = append(k8s.Namespaces, args...)
- continue
- }
- return nil, c.ArgErr()
- case "endpoint":
- args := c.RemainingArgs()
- if len(args) > 0 {
- for _, endpoint := range strings.Split(args[0], ",") {
- k8s.APIServerList = append(k8s.APIServerList, strings.TrimSpace(endpoint))
- }
- continue
- }
- return nil, c.ArgErr()
- case "tls": // cert key cacertfile
- args := c.RemainingArgs()
- if len(args) == 3 {
- k8s.APIClientCert, k8s.APIClientKey, k8s.APICertAuth = args[0], args[1], args[2]
- continue
- }
- return nil, c.ArgErr()
- case "resyncperiod":
- args := c.RemainingArgs()
- if len(args) > 0 {
- rp, err := time.ParseDuration(args[0])
- if err != nil {
- return nil, fmt.Errorf("unable to parse resync duration value: '%v': %v", args[0], err)
- }
- k8s.ResyncPeriod = rp
- continue
- }
- return nil, c.ArgErr()
- case "labels":
- args := c.RemainingArgs()
- if len(args) > 0 {
- labelSelectorString := strings.Join(args, " ")
- ls, err := unversionedapi.ParseToLabelSelector(labelSelectorString)
- if err != nil {
- return nil, fmt.Errorf("unable to parse label selector value: '%v': %v", labelSelectorString, err)
- }
- k8s.LabelSelector = ls
- continue
- }
- return nil, c.ArgErr()
- case "fallthrough":
- args := c.RemainingArgs()
- if len(args) == 0 {
- k8s.Fallthrough = true
- continue
+ for c.NextBlock() {
+ switch c.Val() {
+ case "pods":
+ args := c.RemainingArgs()
+ if len(args) == 1 {
+ switch args[0] {
+ case PodModeDisabled, PodModeInsecure, PodModeVerified:
+ k8s.PodMode = args[0]
+ default:
+ return nil, fmt.Errorf("wrong value for pods: %s, must be one of: disabled, verified, insecure", args[0])
}
- return nil, c.ArgErr()
- case "upstream":
- args := c.RemainingArgs()
- if len(args) == 0 {
- return nil, c.ArgErr()
+ continue
+ }
+ return nil, c.ArgErr()
+ case "namespaces":
+ args := c.RemainingArgs()
+ if len(args) > 0 {
+ k8s.Namespaces = append(k8s.Namespaces, args...)
+ continue
+ }
+ return nil, c.ArgErr()
+ case "endpoint":
+ args := c.RemainingArgs()
+ if len(args) > 0 {
+ for _, endpoint := range strings.Split(args[0], ",") {
+ k8s.APIServerList = append(k8s.APIServerList, strings.TrimSpace(endpoint))
}
- ups, err := dnsutil.ParseHostPortOrFile(args...)
+ continue
+ }
+ return nil, c.ArgErr()
+ case "tls": // cert key cacertfile
+ args := c.RemainingArgs()
+ if len(args) == 3 {
+ k8s.APIClientCert, k8s.APIClientKey, k8s.APICertAuth = args[0], args[1], args[2]
+ continue
+ }
+ return nil, c.ArgErr()
+ case "resyncperiod":
+ args := c.RemainingArgs()
+ if len(args) > 0 {
+ rp, err := time.ParseDuration(args[0])
if err != nil {
- return nil, err
+ return nil, fmt.Errorf("unable to parse resync duration value: '%v': %v", args[0], err)
}
- k8s.Proxy = proxy.NewLookup(ups)
- case "federation": // name zone
- args := c.RemainingArgs()
- if len(args) == 2 {
- k8s.Federations = append(k8s.Federations, Federation{
- name: args[0],
- zone: args[1],
- })
- continue
+ k8s.ResyncPeriod = rp
+ continue
+ }
+ return nil, c.ArgErr()
+ case "labels":
+ args := c.RemainingArgs()
+ if len(args) > 0 {
+ labelSelectorString := strings.Join(args, " ")
+ ls, err := unversionedapi.ParseToLabelSelector(labelSelectorString)
+ if err != nil {
+ return nil, fmt.Errorf("unable to parse label selector value: '%v': %v", labelSelectorString, err)
}
- return nil, fmt.Errorf("incorrect number of arguments for federation, got %v, expected 2", len(args))
+ k8s.LabelSelector = ls
+ continue
+ }
+ return nil, c.ArgErr()
+ case "fallthrough":
+ args := c.RemainingArgs()
+ if len(args) == 0 {
+ k8s.Fallthrough = true
+ continue
+ }
+ return nil, c.ArgErr()
+ case "upstream":
+ args := c.RemainingArgs()
+ if len(args) == 0 {
+ return nil, c.ArgErr()
+ }
+ ups, err := dnsutil.ParseHostPortOrFile(args...)
+ if err != nil {
+ return nil, err
}
+ k8s.Proxy = proxy.NewLookup(ups)
+ default:
+ return nil, c.Errf("unknown property '%s'", c.Val())
}
- return k8s, nil
}
+ return k8s, nil
}
return nil, errors.New("kubernetes setup called without keyword 'kubernetes' in Corefile")
}