aboutsummaryrefslogtreecommitdiff
path: root/plugin/kubernetes/kubernetes.go
diff options
context:
space:
mode:
authorGravatar Chris O'Haver <cohaver@infoblox.com> 2022-02-09 09:25:10 -0500
committerGravatar GitHub <noreply@github.com> 2022-02-09 09:25:10 -0500
commitabaf938623eaae632afd8548ebf5fdc5c3197c5a (patch)
treecc3f4f795c779ba9aa993577c1e1d1bb69b2c4bc /plugin/kubernetes/kubernetes.go
parent40a526b27ff15291d6ae4a4e5c199ef292210a89 (diff)
downloadcoredns-abaf938623eaae632afd8548ebf5fdc5c3197c5a.tar.gz
coredns-abaf938623eaae632afd8548ebf5fdc5c3197c5a.tar.zst
coredns-abaf938623eaae632afd8548ebf5fdc5c3197c5a.zip
remove wildcard query functionality (#5019)
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
Diffstat (limited to 'plugin/kubernetes/kubernetes.go')
-rw-r--r--plugin/kubernetes/kubernetes.go66
1 files changed, 17 insertions, 49 deletions
diff --git a/plugin/kubernetes/kubernetes.go b/plugin/kubernetes/kubernetes.go
index ad7453351..67d549329 100644
--- a/plugin/kubernetes/kubernetes.go
+++ b/plugin/kubernetes/kubernetes.go
@@ -360,7 +360,7 @@ func (k *Kubernetes) Records(ctx context.Context, state request.Request, exact b
return nil, errNoItems
}
- if !wildcard(r.namespace) && !k.namespaceExposed(r.namespace) {
+ if !k.namespaceExposed(r.namespace) {
return nil, errNsNotExposed
}
@@ -395,7 +395,7 @@ func (k *Kubernetes) findPods(r recordRequest, zone string) (pods []msg.Service,
}
namespace := r.namespace
- if !wildcard(namespace) && !k.namespaceExposed(namespace) {
+ if !k.namespaceExposed(namespace) {
return nil, errNoItems
}
@@ -403,7 +403,7 @@ func (k *Kubernetes) findPods(r recordRequest, zone string) (pods []msg.Service,
// handle empty pod name
if podname == "" {
- if k.namespaceExposed(namespace) || wildcard(namespace) {
+ if k.namespaceExposed(namespace) {
// NODATA
return nil, nil
}
@@ -420,7 +420,7 @@ func (k *Kubernetes) findPods(r recordRequest, zone string) (pods []msg.Service,
}
if k.podMode == podModeInsecure {
- if !wildcard(namespace) && !k.namespaceExposed(namespace) { // no wildcard, but namespace does not exist
+ if !k.namespaceExposed(namespace) { // namespace does not exist
return nil, errNoItems
}
@@ -434,19 +434,8 @@ func (k *Kubernetes) findPods(r recordRequest, zone string) (pods []msg.Service,
// PodModeVerified
err = errNoItems
- if wildcard(podname) && !wildcard(namespace) {
- // If namespace exists, err should be nil, so that we return NODATA instead of NXDOMAIN
- if k.namespaceExposed(namespace) {
- err = nil
- }
- }
for _, p := range k.APIConn.PodIndex(ip) {
- // If namespace has a wildcard, filter results against Corefile namespace list.
- if wildcard(namespace) && !k.namespaceExposed(p.Namespace) {
- continue
- }
-
// check for matching ip and namespace
if ip == p.PodIP && match(namespace, p.Namespace) {
s := msg.Service{Key: strings.Join([]string{zonePath, Pod, namespace, podname}, "/"), Host: ip, TTL: k.ttl}
@@ -460,13 +449,13 @@ func (k *Kubernetes) findPods(r recordRequest, zone string) (pods []msg.Service,
// findServices returns the services matching r from the cache.
func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.Service, err error) {
- if !wildcard(r.namespace) && !k.namespaceExposed(r.namespace) {
+ if !k.namespaceExposed(r.namespace) {
return nil, errNoItems
}
// handle empty service name
if r.service == "" {
- if k.namespaceExposed(r.namespace) || wildcard(r.namespace) {
+ if k.namespaceExposed(r.namespace) {
// NODATA
return nil, nil
}
@@ -475,12 +464,6 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.
}
err = errNoItems
- if wildcard(r.service) && !wildcard(r.namespace) {
- // If namespace exists, err should be nil, so that we return NODATA instead of NXDOMAIN
- if k.namespaceExposed(r.namespace) {
- err = nil
- }
- }
var (
endpointsListFunc func() []*object.Endpoints
@@ -488,14 +471,11 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.
serviceList []*object.Service
)
- if wildcard(r.service) || wildcard(r.namespace) {
- serviceList = k.APIConn.ServiceList()
- endpointsListFunc = func() []*object.Endpoints { return k.APIConn.EndpointsList() }
- } else {
- idx := object.ServiceKey(r.service, r.namespace)
- serviceList = k.APIConn.SvcIndex(idx)
- endpointsListFunc = func() []*object.Endpoints { return k.APIConn.EpIndex(idx) }
- }
+
+ idx := object.ServiceKey(r.service, r.namespace)
+ serviceList = k.APIConn.SvcIndex(idx)
+ endpointsListFunc = func() []*object.Endpoints { return k.APIConn.EpIndex(idx) }
+
zonePath := msg.Path(zone, coredns)
for _, svc := range serviceList {
@@ -503,12 +483,6 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.
continue
}
- // If request namespace is a wildcard, filter results against Corefile namespace list.
- // (Namespaces without a wildcard were filtered before the call to this function.)
- if wildcard(r.namespace) && !k.namespaceExposed(svc.Namespace) {
- continue
- }
-
// If "ignore empty_service" option is set and no endpoints exist, return NXDOMAIN unless
// it's a headless or externalName service (covered below).
if k.opts.ignoreEmptyService && svc.Type != api.ServiceTypeExternalName && !svc.Headless() { // serve NXDOMAIN if no endpoint is able to answer
@@ -558,7 +532,7 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.
}
for _, p := range eps.Ports {
- if !(match(r.port, p.Name) && match(r.protocol, p.Protocol)) {
+ if !(matchPortAndProtocol(r.port, p.Name, r.protocol, p.Protocol)) {
continue
}
s := msg.Service{Host: addr.IP, Port: int(p.Port), TTL: k.ttl}
@@ -576,7 +550,7 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.
// ClusterIP service
for _, p := range svc.Ports {
- if !(match(r.port, p.Name) && match(r.protocol, string(p.Protocol))) {
+ if !(matchPortAndProtocol(r.port, p.Name, r.protocol, string(p.Protocol))) {
continue
}
@@ -598,20 +572,14 @@ func (k *Kubernetes) Serial(state request.Request) uint32 { return uint32(k.APIC
// MinTTL returns the minimal TTL.
func (k *Kubernetes) MinTTL(state request.Request) uint32 { return k.ttl }
-// match checks if a and b are equal taking wildcards into account.
+// match checks if a and b are equal.
func match(a, b string) bool {
- if wildcard(a) {
- return true
- }
- if wildcard(b) {
- return true
- }
return strings.EqualFold(a, b)
}
-// wildcard checks whether s contains a wildcard value defined as "*" or "any".
-func wildcard(s string) bool {
- return s == "*" || s == "any"
+// matchPortAndProtocol matches port and protocol, permitting the the 'a' inputs to be wild
+func matchPortAndProtocol(aPort, bPort, aProtocol, bProtocol string) bool {
+ return (match(aPort, bPort) || aPort == "") && (match(aProtocol, bProtocol) || aProtocol == "")
}
const coredns = "c" // used as a fake key prefix in msg.Service