Skip to content

Modify header for backenRefs #7775

@akardaspg

Description

@akardaspg

Description:
Hello looking for available solution to modify HOST header before backendRef hit

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: example-route
spec:
  parentRefs:
    - name: gw
  hostnames:
    - "some.name.test"
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /
      backendRefs:
        - name: backend-1
          port: 80
          weight: 50
          filters:
            - type: URLRewrite
              urlRewrite:
                hostname: backend-1.some.url.test
        - name: backend-2
          port: 80
          weight: 50
          filters:
            - type: URLRewrite
              urlRewrite:
                hostname: backend-2.some.url.test

The problem is that URLRewrite won't work on backendRef level:

"message": "Failed to process route rule 0 backendRef 0: Specific filter is not supported within BackendRef, only RequestHeaderModifier, ResponseHeaderModifier and gateway.envoyproxy.io/HTTPRouteFilter are supported.\nFailed to process route rule 0 backendRef 1: Specific filter is not supported within BackendRef, only RequestHeaderModifier, ResponseHeaderModifier and gateway.envoyproxy.io/HTTPRouteFilter are supported.",

And on the other side RequestHeaderModifier cant modify HOST header at all. Tried also HTTPRouteFilter on backend level, like:

backendRefs:
        - name: backend-1
          port: 80
          weight: 50
          filters:
          - type: RequestHeaderModifier
            requestHeaderModifier:
              set:
                - name: "x-target-host"
                  value: "backend-1.some.url.test"
          - type: ExtensionRef
            extensionRef:
              group: gateway.envoyproxy.io
              kind: HTTPRouteFilter
              name: backend-1-rewrite
        - name: backend-2
          port: 80
          weight: 50
          filters:
          - type: RequestHeaderModifier
            requestHeaderModifier:
              set:
                - name: "x-target-host"
                  value: "backend-2.some.url.test"
          - type: ExtensionRef
            extensionRef:
              group: gateway.envoyproxy.io
              kind: HTTPRouteFilter
              name: backend-2-rewrite
---
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: HTTPRouteFilter
metadata:
  name: backend-1-rewrite
  namespace: default
spec:
  urlRewrite:
    hostname:
      type: Header
      header: x-target-host
---
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: HTTPRouteFilter
metadata:
  name: backend-2-rewrite
  namespace: default
spec:
  urlRewrite:
    hostname:
      type: Header
      header: x-target-host

it wont complain any errors, but envoy config for host_rewrite_header is null either:

{
  "name": "httproute/default/example-route/rule/0/backend/0",
  "host_rewrite_header": null
}
{
  "name": "httproute/default/example-route/rule/0/backend/1",
  "host_rewrite_header": null
}

Any hints, how I can achieve this kind of behaviour to modify header while reaching backend ?

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions