Remove checkStringQuoteValidity in loadIngressRouteConf
* remove checkStringQuoteValidity in loadIngressRouteConf * remove checkStringQuoteValidity and related tests in crd * remove checkStringQuoteValidity from ingress and related tests Co-authored-by: traefiker <30906710+traefiker@users.noreply.github.com>
This commit is contained in:
parent
295ed76a1a
commit
b61de07ca0
|
@ -1,15 +0,0 @@
|
||||||
apiVersion: traefik.containo.us/v1alpha1
|
|
||||||
kind: IngressRouteTCP
|
|
||||||
metadata:
|
|
||||||
name: test.route
|
|
||||||
namespace: default
|
|
||||||
|
|
||||||
spec:
|
|
||||||
entryPoints:
|
|
||||||
- web
|
|
||||||
|
|
||||||
routes:
|
|
||||||
- match: HostSNI(`foo.com"0"`)
|
|
||||||
services:
|
|
||||||
- name: whoamitcp
|
|
||||||
port: 8000
|
|
|
@ -1,17 +0,0 @@
|
||||||
apiVersion: traefik.containo.us/v1alpha1
|
|
||||||
kind: IngressRoute
|
|
||||||
metadata:
|
|
||||||
name: test.route
|
|
||||||
namespace: default
|
|
||||||
|
|
||||||
spec:
|
|
||||||
entryPoints:
|
|
||||||
- web
|
|
||||||
|
|
||||||
routes:
|
|
||||||
- match: Host(`foo.com"0"`) && PathPrefix(`/bar`)
|
|
||||||
kind: Rule
|
|
||||||
priority: 12
|
|
||||||
services:
|
|
||||||
- name: whoami
|
|
||||||
port: 80
|
|
|
@ -9,7 +9,6 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -609,11 +608,6 @@ func buildTLSStores(ctx context.Context, client Client) map[string]tls.Store {
|
||||||
return tlsStores
|
return tlsStores
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkStringQuoteValidity(value string) error {
|
|
||||||
_, err := strconv.Unquote(`"` + value + `"`)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func makeServiceKey(rule, ingressName string) (string, error) {
|
func makeServiceKey(rule, ingressName string) (string, error) {
|
||||||
h := sha256.New()
|
h := sha256.New()
|
||||||
if _, err := h.Write([]byte(rule)); err != nil {
|
if _, err := h.Write([]byte(rule)); err != nil {
|
||||||
|
|
|
@ -58,11 +58,6 @@ func (p *Provider) loadIngressRouteConfiguration(ctx context.Context, client Cli
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := checkStringQuoteValidity(route.Match); err != nil {
|
|
||||||
logger.Errorf("Invalid syntax for match rule: %s", route.Match)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
serviceKey, err := makeServiceKey(route.Match, ingressName)
|
serviceKey, err := makeServiceKey(route.Match, ingressName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(err)
|
logger.Error(err)
|
||||||
|
|
|
@ -44,11 +44,6 @@ func (p *Provider) loadIngressRouteTCPConfiguration(ctx context.Context, client
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := checkStringQuoteValidity(route.Match); err != nil {
|
|
||||||
logger.Errorf("Invalid syntax for match rule: %s", route.Match)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
key, err := makeServiceKey(route.Match, ingressName)
|
key, err := makeServiceKey(route.Match, ingressName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(err)
|
logger.Error(err)
|
||||||
|
|
|
@ -372,26 +372,6 @@ func TestLoadIngressRouteTCPs(t *testing.T) {
|
||||||
TLS: &dynamic.TLSConfiguration{},
|
TLS: &dynamic.TLSConfiguration{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
desc: "check rule quoting validity",
|
|
||||||
paths: []string{"tcp/services.yml", "tcp/with_bad_host_rule.yml"},
|
|
||||||
expected: &dynamic.Configuration{
|
|
||||||
UDP: &dynamic.UDPConfiguration{
|
|
||||||
Routers: map[string]*dynamic.UDPRouter{},
|
|
||||||
Services: map[string]*dynamic.UDPService{},
|
|
||||||
},
|
|
||||||
TCP: &dynamic.TCPConfiguration{
|
|
||||||
Routers: map[string]*dynamic.TCPRouter{},
|
|
||||||
Services: map[string]*dynamic.TCPService{},
|
|
||||||
},
|
|
||||||
HTTP: &dynamic.HTTPConfiguration{
|
|
||||||
Routers: map[string]*dynamic.Router{},
|
|
||||||
Middlewares: map[string]*dynamic.Middleware{},
|
|
||||||
Services: map[string]*dynamic.Service{},
|
|
||||||
},
|
|
||||||
TLS: &dynamic.TLSConfiguration{},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
desc: "TLS",
|
desc: "TLS",
|
||||||
paths: []string{"tcp/services.yml", "tcp/with_tls.yml"},
|
paths: []string{"tcp/services.yml", "tcp/with_tls.yml"},
|
||||||
|
@ -2149,26 +2129,6 @@ func TestLoadIngressRoutes(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
desc: "check rule quoting validity",
|
|
||||||
paths: []string{"services.yml", "with_bad_host_rule.yml"},
|
|
||||||
expected: &dynamic.Configuration{
|
|
||||||
UDP: &dynamic.UDPConfiguration{
|
|
||||||
Routers: map[string]*dynamic.UDPRouter{},
|
|
||||||
Services: map[string]*dynamic.UDPService{},
|
|
||||||
},
|
|
||||||
TLS: &dynamic.TLSConfiguration{},
|
|
||||||
TCP: &dynamic.TCPConfiguration{
|
|
||||||
Routers: map[string]*dynamic.TCPRouter{},
|
|
||||||
Services: map[string]*dynamic.TCPService{},
|
|
||||||
},
|
|
||||||
HTTP: &dynamic.HTTPConfiguration{
|
|
||||||
Routers: map[string]*dynamic.Router{},
|
|
||||||
Middlewares: map[string]*dynamic.Middleware{},
|
|
||||||
Services: map[string]*dynamic.Service{},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
desc: "TLS",
|
desc: "TLS",
|
||||||
paths: []string{"services.yml", "with_tls.yml"},
|
paths: []string{"services.yml", "with_tls.yml"},
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
kind: Ingress
|
|
||||||
apiVersion: networking.k8s.io/v1beta1
|
|
||||||
metadata:
|
|
||||||
name: ""
|
|
||||||
namespace: testing
|
|
||||||
|
|
||||||
spec:
|
|
||||||
rules:
|
|
||||||
- host: traefik.tchouk"0"
|
|
||||||
http:
|
|
||||||
paths:
|
|
||||||
- path: /foo
|
|
||||||
backend:
|
|
||||||
serviceName: service1
|
|
||||||
servicePort: 80
|
|
||||||
- host: traefik.courgette
|
|
||||||
http:
|
|
||||||
paths:
|
|
||||||
- path: /carotte
|
|
||||||
backend:
|
|
||||||
serviceName: service1
|
|
||||||
servicePort: 80
|
|
|
@ -1,23 +0,0 @@
|
||||||
kind: Ingress
|
|
||||||
apiVersion: networking.k8s.io/v1beta1
|
|
||||||
metadata:
|
|
||||||
name: ""
|
|
||||||
namespace: testing
|
|
||||||
|
|
||||||
spec:
|
|
||||||
rules:
|
|
||||||
- host: ""
|
|
||||||
http:
|
|
||||||
paths:
|
|
||||||
- path: /foo
|
|
||||||
backend:
|
|
||||||
serviceName: service1
|
|
||||||
servicePort: 80
|
|
||||||
- path: /bar-"0"
|
|
||||||
backend:
|
|
||||||
serviceName: service1
|
|
||||||
servicePort: 80
|
|
||||||
- path: /bar
|
|
||||||
backend:
|
|
||||||
serviceName: service1
|
|
||||||
servicePort: 80
|
|
|
@ -1,15 +0,0 @@
|
||||||
kind: Ingress
|
|
||||||
apiVersion: networking.k8s.io/v1beta1
|
|
||||||
metadata:
|
|
||||||
name: ""
|
|
||||||
namespace: testing
|
|
||||||
|
|
||||||
spec:
|
|
||||||
rules:
|
|
||||||
- host: traefik.tchouk"0"
|
|
||||||
http:
|
|
||||||
paths:
|
|
||||||
- path: /foo
|
|
||||||
backend:
|
|
||||||
serviceName: service1
|
|
||||||
servicePort: 80
|
|
|
@ -1,14 +0,0 @@
|
||||||
kind: Ingress
|
|
||||||
apiVersion: networking.k8s.io/v1beta1
|
|
||||||
metadata:
|
|
||||||
name: ""
|
|
||||||
namespace: testing
|
|
||||||
|
|
||||||
spec:
|
|
||||||
rules:
|
|
||||||
- http:
|
|
||||||
paths:
|
|
||||||
- path: /bar-"0"
|
|
||||||
backend:
|
|
||||||
serviceName: service1
|
|
||||||
servicePort: 80
|
|
|
@ -7,7 +7,6 @@ import (
|
||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -235,11 +234,6 @@ func (p *Provider) loadConfigurationFromIngresses(ctx context.Context, client Cl
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, rule := range ingress.Spec.Rules {
|
for _, rule := range ingress.Spec.Rules {
|
||||||
if err := checkStringQuoteValidity(rule.Host); err != nil {
|
|
||||||
log.FromContext(ctx).Errorf("Invalid syntax for host: %s", rule.Host)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := p.updateIngressStatus(ingress, client); err != nil {
|
if err := p.updateIngressStatus(ingress, client); err != nil {
|
||||||
log.FromContext(ctx).Errorf("Error while updating ingress status: %v", err)
|
log.FromContext(ctx).Errorf("Error while updating ingress status: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -249,11 +243,6 @@ func (p *Provider) loadConfigurationFromIngresses(ctx context.Context, client Cl
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, pa := range rule.HTTP.Paths {
|
for _, pa := range rule.HTTP.Paths {
|
||||||
if err = checkStringQuoteValidity(pa.Path); err != nil {
|
|
||||||
log.FromContext(ctx).Errorf("Invalid syntax for path: %s", pa.Path)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
service, err := loadService(client, ingress.Namespace, pa.Backend)
|
service, err := loadService(client, ingress.Namespace, pa.Backend)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.FromContext(ctx).
|
log.FromContext(ctx).
|
||||||
|
@ -559,11 +548,6 @@ func loadRouter(rule v1beta1.IngressRule, pa v1beta1.HTTPIngressPath, rtConfig *
|
||||||
return rt
|
return rt
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkStringQuoteValidity(value string) error {
|
|
||||||
_, err := strconv.Unquote(`"` + value + `"`)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func throttleEvents(ctx context.Context, throttleDuration time.Duration, pool *safe.Pool, eventsChan <-chan interface{}) chan interface{} {
|
func throttleEvents(ctx context.Context, throttleDuration time.Duration, pool *safe.Pool, eventsChan <-chan interface{}) chan interface{} {
|
||||||
if throttleDuration == 0 {
|
if throttleDuration == 0 {
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -327,92 +327,6 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
desc: "Ingress with a bad path syntax",
|
|
||||||
expected: &dynamic.Configuration{
|
|
||||||
TCP: &dynamic.TCPConfiguration{},
|
|
||||||
HTTP: &dynamic.HTTPConfiguration{
|
|
||||||
Middlewares: map[string]*dynamic.Middleware{},
|
|
||||||
Routers: map[string]*dynamic.Router{
|
|
||||||
"testing-bar": {
|
|
||||||
Rule: "PathPrefix(`/bar`)",
|
|
||||||
Service: "testing-service1-80",
|
|
||||||
},
|
|
||||||
"testing-foo": {
|
|
||||||
Rule: "PathPrefix(`/foo`)",
|
|
||||||
Service: "testing-service1-80",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Services: map[string]*dynamic.Service{
|
|
||||||
"testing-service1-80": {
|
|
||||||
LoadBalancer: &dynamic.ServersLoadBalancer{
|
|
||||||
PassHostHeader: Bool(true),
|
|
||||||
Servers: []dynamic.Server{
|
|
||||||
{
|
|
||||||
URL: "http://10.10.0.1:8080",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
URL: "http://10.21.0.1:8080",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
desc: "Ingress with only a bad path syntax",
|
|
||||||
expected: &dynamic.Configuration{
|
|
||||||
TCP: &dynamic.TCPConfiguration{},
|
|
||||||
HTTP: &dynamic.HTTPConfiguration{
|
|
||||||
Middlewares: map[string]*dynamic.Middleware{},
|
|
||||||
Routers: map[string]*dynamic.Router{},
|
|
||||||
Services: map[string]*dynamic.Service{},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
desc: "Ingress with a bad host syntax",
|
|
||||||
expected: &dynamic.Configuration{
|
|
||||||
TCP: &dynamic.TCPConfiguration{},
|
|
||||||
HTTP: &dynamic.HTTPConfiguration{
|
|
||||||
Middlewares: map[string]*dynamic.Middleware{},
|
|
||||||
Routers: map[string]*dynamic.Router{
|
|
||||||
"testing-traefik-courgette-carotte": {
|
|
||||||
Rule: "Host(`traefik.courgette`) && PathPrefix(`/carotte`)",
|
|
||||||
Service: "testing-service1-80",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Services: map[string]*dynamic.Service{
|
|
||||||
"testing-service1-80": {
|
|
||||||
LoadBalancer: &dynamic.ServersLoadBalancer{
|
|
||||||
PassHostHeader: Bool(true),
|
|
||||||
Servers: []dynamic.Server{
|
|
||||||
{
|
|
||||||
URL: "http://10.10.0.1:8080",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
URL: "http://10.21.0.1:8080",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
desc: "Ingress with only a bad host syntax",
|
|
||||||
expected: &dynamic.Configuration{
|
|
||||||
TCP: &dynamic.TCPConfiguration{},
|
|
||||||
HTTP: &dynamic.HTTPConfiguration{
|
|
||||||
Middlewares: map[string]*dynamic.Middleware{},
|
|
||||||
Routers: map[string]*dynamic.Router{},
|
|
||||||
Services: map[string]*dynamic.Service{},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
desc: "Ingress with two services",
|
desc: "Ingress with two services",
|
||||||
expected: &dynamic.Configuration{
|
expected: &dynamic.Configuration{
|
||||||
|
|
Loading…
Reference in a new issue