mirror of
https://github.com/coredns/coredns.git
synced 2025-10-28 00:34:24 -04:00
remove wildcard query functionality (#5019)
Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user