-
Notifications
You must be signed in to change notification settings - Fork 674
Open
Description
Description:
With merged BackendTrafficPolicies, where the policies exist in different namespaces, responseOverride with a ConfigMap reference may break after merging. This causes routes to be set to return 500 and this is seen in logs.
gatewayapi/backendtrafficpolicy.go:837 setting 500 direct response in routes due to errors in BackendTrafficPolicy {"runner": "gateway-api", "trace_id": "d4007bcdcfa56c7239bd4888522156ad", "span_id": "050d3338a03a1d10", "policy": {"name":"my-app","namespace":"my-app"}, "routes": ["grpcroute/my-app/my-app/rule/0/match/-1/myapp_example_com"], "error": "ResponseOverride: can't find the referenced configmap error-page"}
I assume that after merging BackendTrafficPolicies, the ConfigMap reference is handled in the wrong namespace. There's no way to specify the namespace in the responseOverride ValueRef.
Repro steps:
Create these BackendTrafficPolicies, ConfigMap and HTTPRoute. Note the different namespaces. Observe 500 responses from Envoy, with "can't find the referenced configmap" in the logs.
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: BackendTrafficPolicy
metadata:
name: my-gateway-error-response
namespace: envoy-gateway-system
spec:
targetRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: my-gateway
responseOverride:
- match:
statusCodes:
- type: Range
range:
start: 502
end: 504
response:
contentType: "text/html"
body:
type: "ValueRef"
valueRef:
group: ""
kind: ConfigMap
name: error-pageapiVersion: v1
kind: ConfigMap
metadata:
name: error-page
namespace: envoy-gateway-system
data:
response.body: |
error page contents hereapiVersion: gateway.envoyproxy.io/v1alpha1
kind: BackendTrafficPolicy
metadata:
name: my-app-rate-limit
namespace: my-app
spec:
targetRefs:
- group: gateway.networking.k8s.io
kind: HTTPRoute
name: my-app
mergeType: StrategicMerge
rateLimit:
local:
rules:
- clientSelectors:
- sourceCIDR:
type: Distinct
value: 0.0.0.0/0
limit:
requests: 200
unit: MinuteapiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: my-app
namespace: my-app
spec:
hostnames:
- myapp.example.com
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: my-gateway
namespace: envoy-gateway-system
rules:
- backendRefs:
- group: ""
kind: Service
name: my-app
port: 80
weight: 1
matches:
- path:
type: PathPrefix
value: /Environment:
Envoy gateway 1.7.0
Logs:
gatewayapi/backendtrafficpolicy.go:837 setting 500 direct response in routes due to errors in BackendTrafficPolicy {"runner": "gateway-api", "trace_id": "d4007bcdcfa56c7239bd4888522156ad", "span_id": "050d3338a03a1d10", "policy": {"name":"my-app","namespace":"my-app"}, "routes": ["grpcroute/my-app/my-app/rule/0/match/-1/myapp_example_com"], "error": "ResponseOverride: can't find the referenced configmap error-page"}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
kind/bugSomething isn't workingSomething isn't working