diff --git a/dataclients/kubernetes/routegroup.go b/dataclients/kubernetes/routegroup.go index 1e7826b762..ee0c12404b 100644 --- a/dataclients/kubernetes/routegroup.go +++ b/dataclients/kubernetes/routegroup.go @@ -298,6 +298,7 @@ func applyBackend(ctx *routeGroupContext, backend *definitions.SkipperBackend, r case eskip.ForwardBackend: r.Backend = ctx.forwardBackendURL r.BackendType = eskip.NetworkBackend + r.Filters = []*eskip.Filter{} } if ctx.backendNameTracingTag { diff --git a/dataclients/kubernetes/testdata/routegroups/backends/forward-with-filters.eskip b/dataclients/kubernetes/testdata/routegroups/backends/forward-with-filters.eskip new file mode 100644 index 0000000000..30df5d9c59 --- /dev/null +++ b/dataclients/kubernetes/testdata/routegroups/backends/forward-with-filters.eskip @@ -0,0 +1,8 @@ +kube_rg____example_org__catchall__0_0: + Host("^(example[.]org[.]?(:[0-9]+)?)$") + -> ; + +kube_rg__default__myapp__all__0_0: + Host("^(example[.]org[.]?(:[0-9]+)?)$") + && PathSubtree("/") + -> "http://forward.example"; diff --git a/dataclients/kubernetes/testdata/routegroups/backends/forward-with-filters.kube b/dataclients/kubernetes/testdata/routegroups/backends/forward-with-filters.kube new file mode 100644 index 0000000000..cd884002c2 --- /dev/null +++ b/dataclients/kubernetes/testdata/routegroups/backends/forward-with-filters.kube @@ -0,0 +1 @@ +forward-backend-url: http://forward.example \ No newline at end of file diff --git a/dataclients/kubernetes/testdata/routegroups/backends/forward-with-filters.yaml b/dataclients/kubernetes/testdata/routegroups/backends/forward-with-filters.yaml new file mode 100644 index 0000000000..21c057446e --- /dev/null +++ b/dataclients/kubernetes/testdata/routegroups/backends/forward-with-filters.yaml @@ -0,0 +1,16 @@ +apiVersion: zalando.org/v1 +kind: RouteGroup +metadata: + name: myapp +spec: + hosts: + - example.org + backends: + - name: fwd + type: forward + routes: + - pathSubtree: / + filters: + - status(200) + backends: + - backendName: fwd diff --git a/routesrv/routesrv_test.go b/routesrv/routesrv_test.go index ab1595fce6..2c68882a68 100644 --- a/routesrv/routesrv_test.go +++ b/routesrv/routesrv_test.go @@ -651,6 +651,37 @@ func TestRoutesWithForwardBackend(t *testing.T) { wantHTTPCode(t, w, http.StatusOK) } +func TestRoutesWithForwardBackendFiltersDropped(t *testing.T) { + defer tl.Reset() + ks, _ := newKubeServer(t, loadKubeYAML(t, "testdata/forward-backend-with-filter.yaml")) + ks.Start() + defer ks.Close() + rs := newRouteServerWithOptions(t, skipper.Options{ + SourcePollTimeout: pollInterval, + Kubernetes: true, + KubernetesURL: ks.URL, + ForwardBackendURL: "http://forward.example", + }) + + rs.StartUpdates() + defer rs.StopUpdates() + + if err := tl.WaitFor(routesrv.LogRoutesInitialized, waitTimeout); err != nil { + t.Fatalf("routes not initialized: %v", err) + } + w := getRoutes(rs) + + want := parseEskipFixture(t, "testdata/forward-backend-with-filter.eskip") + got, err := eskip.Parse(w.Body.String()) + if err != nil { + t.Fatalf("served routes are not valid eskip: %s", w.Body) + } + if !eskip.EqLists(got, want) { + t.Errorf("expected to receive route without filters: %s", cmp.Diff(got, want)) + } + wantHTTPCode(t, w, http.StatusOK) +} + func TestESkipBytesHandlerWithCorrectEtag(t *testing.T) { defer tl.Reset() ks, _ := newKubeServer(t, loadKubeYAML(t, "testdata/lb-target-multi.yaml")) diff --git a/routesrv/testdata/forward-backend-with-filter.eskip b/routesrv/testdata/forward-backend-with-filter.eskip new file mode 100644 index 0000000000..1e9e897142 --- /dev/null +++ b/routesrv/testdata/forward-backend-with-filter.eskip @@ -0,0 +1 @@ +kube_rg__default__my_test__all__0_0: PathSubtree("/") -> "http://forward.example"; \ No newline at end of file diff --git a/routesrv/testdata/forward-backend-with-filter.yaml b/routesrv/testdata/forward-backend-with-filter.yaml new file mode 100644 index 0000000000..281a2b7487 --- /dev/null +++ b/routesrv/testdata/forward-backend-with-filter.yaml @@ -0,0 +1,14 @@ +apiVersion: zalando.org/v1 +kind: RouteGroup +metadata: + name: my-test +spec: + backends: + - name: fwd + type: forward + routes: + - pathSubtree: / + filters: + - status(200) + backends: + - backendName: fwd