Skip to content
Kong Docs are moving soon! Our docs are migrating to a new home. You'll be automatically redirected to the new site in the future. In the meantime, view this page on the new site!
Kong Logo | Kong Docs Logo
  • Docs
    • Explore the API Specs
      View all API Specs View all API Specs View all API Specs arrow image
    • Documentation
      API Specs
      Kong Gateway
      Lightweight, fast, and flexible cloud-native API gateway
      Kong Konnect
      Single platform for SaaS end-to-end connectivity
      Kong AI Gateway
      Multi-LLM AI Gateway for GenAI infrastructure
      Kong Mesh
      Enterprise service mesh based on Kuma and Envoy
      decK
      Helps manage Kong’s configuration in a declarative fashion
      Kong Ingress Controller
      Works inside a Kubernetes cluster and configures Kong to proxy traffic
      Kong Gateway Operator
      Manage your Kong deployments on Kubernetes using YAML Manifests
      Insomnia
      Collaborative API development platform
  • Plugin Hub
    • Explore the Plugin Hub
      View all plugins View all plugins View all plugins arrow image
    • Functionality View all View all arrow image
      View all plugins
      AI's icon
      AI
      Govern, secure, and control AI traffic with multi-LLM AI Gateway plugins
      Authentication's icon
      Authentication
      Protect your services with an authentication layer
      Security's icon
      Security
      Protect your services with additional security layer
      Traffic Control's icon
      Traffic Control
      Manage, throttle and restrict inbound and outbound API traffic
      Serverless's icon
      Serverless
      Invoke serverless functions in combination with other plugins
      Analytics & Monitoring's icon
      Analytics & Monitoring
      Visualize, inspect and monitor APIs and microservices traffic
      Transformations's icon
      Transformations
      Transform request and responses on the fly on Kong
      Logging's icon
      Logging
      Log request and response data using the best transport for your infrastructure
  • Support
  • Community
  • Kong Academy
Get a Demo Start Free Trial
Kong Mesh
dev
  • Home icon
  • Kong Mesh
  • Policies
  • Mesh HTTP Route
github-edit-pageEdit this page
report-issueReport an issue
  • Kong Gateway
  • Kong Konnect
  • Kong Mesh
  • Kong AI Gateway
  • Plugin Hub
  • decK
  • Kong Ingress Controller
  • Kong Gateway Operator
  • Insomnia
  • Kuma

  • Docs contribution guidelines
  • dev
  • 2.10.x (latest)
  • 2.9.x
  • 2.8.x
  • 2.7.x (LTS)
  • 2.6.x
  • 2.5.x
  • 2.4.x
  • 2.3.x
  • 2.2.x
  • Introduction
    • About service meshes
    • Overview of Kong Mesh
    • How Kong Mesh works
    • Architecture
    • Install
    • Concepts
    • Stages of software availability
    • Version support policy
    • Software Bill of Materials
    • Vulnerability patching process
    • Mesh requirements
    • Release notes
  • Quickstart
    • Deploy Kong Mesh on Kubernetes
    • Deploy Kong Mesh on Universal
  • Kong Mesh in Production
    • Overview
    • Deployment topologies
      • Overview
      • Single-zone deployment
      • Multi-zone deployment
    • Use Kong Mesh
    • Control plane deployment
      • Kong Mesh license
      • Deploy a single-zone control plane
      • Deploy a multi-zone global control plane
      • Zone Ingress
      • Zone Egress
      • Configure zone proxy authentication
      • Control plane configuration reference
      • Systemd
      • Kubernetes
      • kumactl
      • Deploy Kong Mesh in Production with Helm
    • Configuring your Mesh and multi-tenancy
    • Data plane configuration
      • Data plane proxy
      • Configure the data plane on Kubernetes
      • Configure the data plane on Universal
      • Configure the Kong Mesh CNI
      • Configure transparent proxying
      • IPv6 support
    • Secure your deployment
      • Manage secrets
      • Authentication with the API server
      • Authentication with the data plane proxy
      • Configure data plane proxy membership
      • Secure access across services
      • Manage control plane permissions on Kubernetes
      • Kong Mesh RBAC
      • FIPS support
    • Kong Mesh user interface
    • Inspect API
      • Matched policies
      • Affected data plane proxies
      • Envoy proxy configuration
    • Upgrades and tuning
      • Upgrade Kong Mesh
      • Performance fine-tuning
      • Version specific upgrade notes
    • Control Plane Configuration
      • Modifying the configuration
      • Inspecting the configuration
      • Store
  • Using Kong Mesh
    • Zero Trust & Application Security
      • Mutual TLS
      • External Service
    • Resiliency & Failover
      • Dataplane Health
      • Service Health Probes
    • Managing incoming traffic with gateways
      • How ingress works in Kuma
      • Delegated gateways
      • Built-in gateways
      • Running built-in gateway pods on Kubernetes
      • Configuring built-in listeners
      • Configuring built-in routes
      • Using the Kubernetes Gateway API
    • Observability
      • Demo setup
      • Control plane metrics
      • Configuring Prometheus
      • Configuring Grafana
      • Configuring Datadog
      • Observability in multi-zone
    • Route & Traffic shaping
      • Protocol support in Kong Mesh
    • Service Discovery & Networking
      • Service Discovery
      • MeshService
      • MeshMultiZoneService
      • HostnameGenerator
      • DNS
      • Non-mesh traffic
      • MeshExternalService
      • Transparent Proxying
  • Policies
    • Introduction
      • What is a policy?
      • What do policies look like?
      • Writing a targetRef
      • Merging configuration
      • Using policies with MeshService
      • Examples
      • Applying policies in shadow mode
    • MeshAccessLog
      • TargetRef support matrix
      • Configuration
      • Examples
    • MeshCircuitBreaker
      • TargetRef support matrix
      • Configuration
      • Examples
    • MeshFaultInjection
      • TargetRef support matrix
      • Configuration
      • Examples
    • MeshHealthCheck
      • TargetRef support matrix
      • Configuration
      • Examples
    • MeshHTTPRoute
      • TargetRef support matrix
      • Configuration
      • Examples
      • Merging
    • MeshLoadBalancingStrategy
      • TargetRef support matrix
      • Configuration
      • Examples
    • MeshMetric
      • TargetRef support matrix
      • Configuration
      • Prometheus
      • OpenTelemetry
      • Examples
    • MeshPassthrough
      • TargetRef support matrix
      • Configuration
      • Examples
    • MeshProxyPatch
      • TargetRef support matrix
      • Configuration
      • Examples
      • Merging
    • MeshRateLimit
      • TargetRef support matrix
      • Configuration
      • Examples
    • MeshRetry
      • TargetRef support matrix
      • Configuration
      • Examples
    • MeshTCPRoute
      • TargetRef support matrix
      • Configuration
      • Examples
      • Route policies with different types targeting the same destination
    • MeshTimeout
      • TargetRef support matrix
      • Configuration
      • Examples
    • MeshTLS
      • TargetRef support matrix
      • Configuration
      • Examples
    • MeshTrace
      • TargetRef support matrix
      • Configuration
      • Examples
    • MeshTrafficPermission
      • TargetRef support matrix
      • Configuration
      • Examples
    • MeshOPA
    • MeshGlobalRateLimit (beta)
    • Previous Policies
      • General notes about Kong Mesh policies
      • How Kong Mesh chooses the right policy to apply
      • Traffic Permissions
      • Traffic Route
      • Traffic Metrics
      • Traffic Trace
      • Traffic Log
      • Locality-aware Load Balancing
      • Fault Injection
      • Health Check
      • Circuit Breaker
      • Retry
      • Timeout
      • Rate Limit
      • Virtual Outbound
      • MeshGatewayRoute
      • OPA policy
  • Guides
    • Federate zone control plane
    • Add a builtin Gateway
    • Add Kong as a delegated Gateway
    • Kubernetes Gateway API
    • Collect Metrics with OpenTelemetry
    • Migration to the new policies
    • Progressively rolling in strict mTLS
    • Producer and consumer policies
    • Configuring inbound traffic with Rules API
    • Upgrading Transparent Proxy
    • Restrict permissions to selected namespaces on Kubernetes
  • Enterprise Features
    • Overview
    • HashiCorp Vault CA
    • Amazon ACM Private CA
    • cert-manager Private CA
    • OPA policy support
    • MeshOPA
    • Multi-zone authentication
    • FIPS support
    • Certificate Authority rotation
    • Role-Based Access Control
    • Red Hat
      • UBI Images
      • Red Hat OpenShift Quickstart
    • Windows Support
    • ECS Support
    • Auditing
    • MeshGlobalRateLimit (beta)
    • Verify signatures for signed Kong Mesh images
    • Build provenance
      • Verify build provenance for signed Kong Mesh images
      • Verify build provenance for signed Kong Mesh binaries
  • Reference
    • HTTP API
    • Kubernetes annotations and labels
    • Kuma data collection
    • Control plane configuration reference
    • Envoy proxy template
  • Community
    • Contribute to Kuma
enterprise-switcher-icon Switch to OSS
On this pageOn this page
  • TargetRef support matrix
  • Configuration
    • Gateways
    • Interactions with MeshTCPRoute
    • Interactions with TrafficRoute
  • Examples
    • Traffic split
    • Traffic modifications
    • Traffic mirror
  • Merging
  • All policy options
    • Matches
    • Default conf
    • Header modification
    • Backends
You are browsing unreleased documentation. See the latest documentation here.

Mesh HTTP Route

This policy uses new policy matching algorithm. It’s recommended to migrate from TrafficRoute. See “Interactions with TrafficRoute” section for more information.

The MeshHTTPRoute policy allows altering and redirecting HTTP requests depending on where the request is coming from and where it’s going to.

TargetRef support matrix

Sidecar
Builtin Gateway
Delegated Gateway
targetRef Allowed kinds
targetRef.kind Mesh, Dataplane, MeshSubset(deprecated)
to[].targetRef.kind MeshService
targetRef Allowed kinds
targetRef.kind Mesh, MeshGateway, MeshGateway with listener tags
to[].targetRef.kind Mesh
targetRef Allowed kinds
targetRef.kind Mesh, MeshSubset
to[].targetRef.kind MeshService

If you don’t understand this table you should read matching docs.

Configuration

Unlike others outbound policies MeshHTTPRoute doesn’t contain default directly in the to array. The default section is nested inside rules, so the policy structure looks like this:

spec:
  to:
    - targetRef: {...}
      rules:
        - matches: [...] # various ways to match an HTTP request (path, method, query)
          default: # configuration applied for the matched HTTP request
            filters: [...]
            backendRefs: [...]

Remember to tag your Service ports with appProtocol: http to use them in a MeshHTTPRoute!

Gateways

In order to route HTTP traffic for a MeshGateway, you need to target the MeshGateway in spec.targetRef and set spec.to[].targetRef.kind: Mesh.

Interactions with MeshTCPRoute

MeshHTTPRoute takes priority over MeshTCPRoute when a proxy is targeted by both and the matching MeshTCPRoute is ignored.

Interactions with TrafficRoute

MeshHTTPRoute takes priority over TrafficRoute when a proxy is targeted by both policies.

All legacy policies like Retry, TrafficLog, Timeout etc. only match on routes defined by TrafficRoute. All new recommended policies like MeshRetry, MeshAccessLog, MeshTimeout etc. match on routes defined by MeshHTTPRoute and TrafficRoute.

If you don’t use legacy policies, it’s recommended to remove any existing TrafficRoute. Otherwise, it’s recommended to migrate to new policies and then removing TrafficRoute.

Examples

Traffic split

We can use MeshHTTPRoute to split an HTTP traffic between different MeshServices implementing A/B testing or canary deployments. If we want to split traffic between v1 and v2 versions of the same service, first we have to create MeshServices backend-v1 and backend-v2 that select backend application instances according to the version.

Kubernetes
Universal
Terraform
apiVersion: kuma.io/v1alpha1
kind: MeshHTTPRoute
metadata:
  name: http-split
  namespace: kuma-demo
  labels:
    kuma.io/mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: frontend
  to:
  - targetRef:
      kind: MeshService
      name: backend_kuma-demo_svc_3001
    rules:
    - matches:
      - path:
          type: PathPrefix
          value: "/"
      default:
        backendRefs:
        - kind: MeshServiceSubset
          name: backend_kuma-demo_svc_3001
          weight: 90
          tags:
            version: v1
        - kind: MeshServiceSubset
          name: backend_kuma-demo_svc_3001
          weight: 10
          tags:
            version: v2
apiVersion: kuma.io/v1alpha1
kind: MeshHTTPRoute
metadata:
  name: http-split
  namespace: kuma-demo
  labels:
    kuma.io/mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: frontend
  to:
  - targetRef:
      kind: MeshService
      name: backend
      namespace: kuma-demo
      sectionName: http
    rules:
    - matches:
      - path:
          type: PathPrefix
          value: "/"
      default:
        backendRefs:
        - kind: MeshService
          name: backend-v1
          namespace: kuma-demo
          port: 3001
          weight: 90
        - kind: MeshService
          name: backend-v2
          namespace: kuma-demo
          port: 3001
          weight: 10
type: MeshHTTPRoute
name: http-split
mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: frontend
  to:
  - targetRef:
      kind: MeshService
      name: backend
    rules:
    - matches:
      - path:
          type: PathPrefix
          value: "/"
      default:
        backendRefs:
        - kind: MeshServiceSubset
          name: backend
          weight: 90
          tags:
            version: v1
        - kind: MeshServiceSubset
          name: backend
          weight: 10
          tags:
            version: v2
type: MeshHTTPRoute
name: http-split
mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: frontend
  to:
  - targetRef:
      kind: MeshService
      name: backend
      sectionName: http
    rules:
    - matches:
      - path:
          type: PathPrefix
          value: "/"
      default:
        backendRefs:
        - kind: MeshService
          name: backend-v1
          port: 3001
          weight: 90
        - kind: MeshService
          name: backend-v2
          port: 3001
          weight: 10
Please adjust konnect_mesh_control_plane.my_meshcontrolplane.id and konnect_mesh.my_mesh.name according to your current configuration
resource "konnect_mesh_http_route" "http_split" {
  provider = konnect-beta
  type = "MeshHTTPRoute"
  name = "http-split"
  spec = {
    target_ref = {
      kind = "Dataplane"
      labels = {
        app = "frontend"
      }
    }
    to = [
      {
        target_ref = {
          kind = "MeshService"
          name = "backend"
          section_name = "http"
        }
        rules = [
          {
            matches = [
              {
                path = {
                  type = "PathPrefix"
                  value = "/"
                }
              }
            ]
            default = {
              backend_refs = [
                {
                  kind = "MeshService"
                  name = "backend-v1"
                  port = "3001"
                  weight = "90"
                },
                {
                  kind = "MeshService"
                  name = "backend-v2"
                  port = "3001"
                  weight = "10"
                }
              ]
            }
          }
        ]
      }
    ]
  }
  labels   = {
    "kuma.io/mesh" = konnect_mesh.my_mesh.name
  }
  cp_id    = konnect_mesh_control_plane.my_meshcontrolplane.id
  mesh     = konnect_mesh.my_mesh.name
}

Traffic modifications

We can use MeshHTTPRoute to modify outgoing requests, by setting new path or changing request and response headers.

Here is an example of a MeshHTTPRoute that adds x-custom-header with value xyz when frontend tries to consume backend.

Kubernetes
Universal
Terraform
apiVersion: kuma.io/v1alpha1
kind: MeshHTTPRoute
metadata:
  name: http-route-1
  namespace: kuma-demo
  labels:
    kuma.io/mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: frontend
  to:
  - targetRef:
      kind: MeshService
      name: backend_kuma-demo_svc_3001
    rules:
    - matches:
      - path:
          type: Exact
          value: "/"
      default:
        filters:
        - type: RequestHeaderModifier
          requestHeaderModifier:
            set:
            - name: x-custom-header
              value: xyz
apiVersion: kuma.io/v1alpha1
kind: MeshHTTPRoute
metadata:
  name: http-route-1
  namespace: kuma-demo
  labels:
    kuma.io/mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: frontend
  to:
  - targetRef:
      kind: MeshService
      name: backend
      namespace: kuma-demo
      sectionName: http
    rules:
    - matches:
      - path:
          type: Exact
          value: "/"
      default:
        filters:
        - type: RequestHeaderModifier
          requestHeaderModifier:
            set:
            - name: x-custom-header
              value: xyz
type: MeshHTTPRoute
name: http-route-1
mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: frontend
  to:
  - targetRef:
      kind: MeshService
      name: backend
    rules:
    - matches:
      - path:
          type: Exact
          value: "/"
      default:
        filters:
        - type: RequestHeaderModifier
          requestHeaderModifier:
            set:
            - name: x-custom-header
              value: xyz
type: MeshHTTPRoute
name: http-route-1
mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: frontend
  to:
  - targetRef:
      kind: MeshService
      name: backend
      sectionName: http
    rules:
    - matches:
      - path:
          type: Exact
          value: "/"
      default:
        filters:
        - type: RequestHeaderModifier
          requestHeaderModifier:
            set:
            - name: x-custom-header
              value: xyz
Please adjust konnect_mesh_control_plane.my_meshcontrolplane.id and konnect_mesh.my_mesh.name according to your current configuration
resource "konnect_mesh_http_route" "http_route_1" {
  provider = konnect-beta
  type = "MeshHTTPRoute"
  name = "http-route-1"
  spec = {
    target_ref = {
      kind = "Dataplane"
      labels = {
        app = "frontend"
      }
    }
    to = [
      {
        target_ref = {
          kind = "MeshService"
          name = "backend"
          section_name = "http"
        }
        rules = [
          {
            matches = [
              {
                path = {
                  type = "Exact"
                  value = "/"
                }
              }
            ]
            default = {
              filters = [
                {
                  type = "RequestHeaderModifier"
                  request_header_modifier = {
                    set = [
                      {
                        name = "x-custom-header"
                        value = "xyz"
                      }
                    ]
                  }
                }
              ]
            }
          }
        ]
      }
    ]
  }
  labels   = {
    "kuma.io/mesh" = konnect_mesh.my_mesh.name
  }
  cp_id    = konnect_mesh_control_plane.my_meshcontrolplane.id
  mesh     = konnect_mesh.my_mesh.name
}

Traffic mirror

MeshHTTPRoute can mirror a fraction of requests to another service. This can be useful when testing a new version of the app with the production payload without interrupting real users.

Kubernetes
Universal
Terraform
apiVersion: kuma.io/v1alpha1
kind: MeshHTTPRoute
metadata:
  name: http-route-1
  namespace: kuma-demo
  labels:
    kuma.io/mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: frontend
  to:
  - targetRef:
      kind: MeshService
      name: backend_kuma-demo_svc_3001
    rules:
    - matches:
      - headers:
        - type: Exact
          name: mirror-this-request
          value: 'true'
      default:
        filters:
        - type: RequestMirror
          requestMirror:
            percentage: 30
            backendRef:
              kind: MeshServiceSubset
              name: backend_kuma-demo_svc_3001
              tags:
                version: v1-experimental
        backendRefs:
        - kind: MeshService
          name: backend_kuma-demo_svc_3001
apiVersion: kuma.io/v1alpha1
kind: MeshHTTPRoute
metadata:
  name: http-route-1
  namespace: kuma-demo
  labels:
    kuma.io/mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: frontend
  to:
  - targetRef:
      kind: MeshService
      name: backend
      namespace: kuma-demo
      sectionName: http
    rules:
    - matches:
      - headers:
        - type: Exact
          name: mirror-this-request
          value: 'true'
      default:
        filters:
        - type: RequestMirror
          requestMirror:
            percentage: 30
            backendRef:
              kind: MeshService
              name: backend-v1-experimental
              namespace: kuma-demo
              port: 3001
        backendRefs:
        - kind: MeshService
          name: backend
          namespace: kuma-demo
          port: 3001
type: MeshHTTPRoute
name: http-route-1
mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: frontend
  to:
  - targetRef:
      kind: MeshService
      name: backend
    rules:
    - matches:
      - headers:
        - type: Exact
          name: mirror-this-request
          value: 'true'
      default:
        filters:
        - type: RequestMirror
          requestMirror:
            percentage: 30
            backendRef:
              kind: MeshServiceSubset
              name: backend
              tags:
                version: v1-experimental
        backendRefs:
        - kind: MeshService
          name: backend
type: MeshHTTPRoute
name: http-route-1
mesh: default
spec:
  targetRef:
    kind: Dataplane
    labels:
      app: frontend
  to:
  - targetRef:
      kind: MeshService
      name: backend
      sectionName: http
    rules:
    - matches:
      - headers:
        - type: Exact
          name: mirror-this-request
          value: 'true'
      default:
        filters:
        - type: RequestMirror
          requestMirror:
            percentage: 30
            backendRef:
              kind: MeshService
              name: backend-v1-experimental
              port: 3001
        backendRefs:
        - kind: MeshService
          name: backend
          port: 3001
Please adjust konnect_mesh_control_plane.my_meshcontrolplane.id and konnect_mesh.my_mesh.name according to your current configuration
resource "konnect_mesh_http_route" "http_route_1" {
  provider = konnect-beta
  type = "MeshHTTPRoute"
  name = "http-route-1"
  spec = {
    target_ref = {
      kind = "Dataplane"
      labels = {
        app = "frontend"
      }
    }
    to = [
      {
        target_ref = {
          kind = "MeshService"
          name = "backend"
          section_name = "http"
        }
        rules = [
          {
            matches = [
              {
                headers = [
                  {
                    type = "Exact"
                    name = "mirror-this-request"
                    value = "true"
                  }
                ]
              }
            ]
            default = {
              filters = [
                {
                  type = "RequestMirror"
                  request_mirror = {
                    percentage = "30"
                    backend_ref = {
                      kind = "MeshService"
                      name = "backend-v1-experimental"
                      port = "3001"
                    }
                  }
                }
              ]
              backend_refs = [
                {
                  kind = "MeshService"
                  name = "backend"
                  port = "3001"
                }
              ]
            }
          }
        ]
      }
    ]
  }
  labels   = {
    "kuma.io/mesh" = konnect_mesh.my_mesh.name
  }
  cp_id    = konnect_mesh_control_plane.my_meshcontrolplane.id
  mesh     = konnect_mesh.my_mesh.name
}

Merging

When several MeshHTTPRoute policies target the same data plane proxy they’re merged. Similar to the new policies the merging order is determined by the top level targetRef. The difference is in spec.to[].rules. Kong Mesh treats rules as a key-value map where matches is a key and default is a value. For example MeshHTTPRoute policies:

# MeshHTTPRoute-1
rules:
  - matches: # key-1
      - path:
          type: Exact
          name: /orders
        method: GET
    default: CONF_1 # value
  - matches: # key-2
      - path:
          type: Exact
          name: /payments
        method: POST
    default: CONF_2 # value
---
# MeshHTTPRoute-2
rules:
  - matches: # key-3
      - path:
          type: Exact
          name: /orders
        method: GET
    default: CONF_3 # value
  - matches: # key-4
      - path:
          type: Exact
          name: /payments
        method: POST
    default: CONF_4 # value

merged in the following list of rules:

rules:
  - matches:
      - path:
          type: Exact
          name: /orders
        method: GET
    default: merge(CONF_1, CONF_3) # because 'key-1' == 'key-3'
  - matches:
      - path:
          type: Exact
          name: /payments
        method: POST
    default: merge(CONF_2, CONF_4) # because 'key-2' == 'key-4'

All policy options

Matches

  • path - (optional) - HTTP path to match the request on
    • type - one of Exact, PathPrefix, RegularExpression
    • value - actual value that’s going to be matched depending on the type
  • method - (optional) - HTTP2 method, available values are CONNECT, DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT, TRACE
  • queryParams - (optional) - list of HTTP URL query parameters. Multiple matches are combined together such that all listed matches must succeed
    • type - one of Exact or RegularExpression
    • name - name of the query parameter
    • value - actual value that’s going to be matched depending on the type

Default conf

  • filters - (optional) - a list of modifications applied to the matched request
    • type - available values are RequestHeaderModifier, ResponseHeaderModifier, RequestRedirect, URLRewrite.
    • requestHeaderModifier - HeaderModifier, must be set if the type is RequestHeaderModifier.
    • responseHeaderModifier - HeaderModifier, must be set if the type is ResponseHeaderModifier.
    • requestRedirect - must be set if the type is RequestRedirect
      • scheme - one of http or http2
      • hostname - is the fully qualified domain name of a network host. This matches the RFC 1123 definition of a hostname with 1 notable exception that numeric IP addresses are not allowed.
      • port - is the port to be used in the value of the Location header in the response. When empty, port (if specified) of the request is used.
      • statusCode - is the HTTP status code to be used in response. Available values are 301, 302, 303, 307, 308.
    • urlRewrite - must be set if the type is URLRewrite
      • hostname - (optional) - is the fully qualified domain name of a network host. This matches the RFC 1123 definition of a hostname with 1 notable exception that numeric IP addresses are not allowed.
      • path - (optional)
        • type - one of ReplaceFullPath, ReplacePrefixMatch
        • replaceFullPath - must be set if the type is ReplaceFullPath
        • replacePrefixMatch - must be set if the type is ReplacePrefixMatch
    • requestMirror - must be set if the type is RequestMirror
      • percentage - percentage of requests to mirror. If not specified, all requests to the target cluster will be mirrored.
      • backendRef - BackendRef, destination to mirror request to
  • backendRefs - BackendRef (optional), list of destinations to redirect requests to

Header modification

  • set - (optional) - list of headers to set. Overrides value if the header exists.
    • name - header’s name
    • value - header’s value
  • add - (optional) - list of headers to add. Appends value if the header exists.
    • name - header’s name
    • value - header’s value
  • remove - (optional) - list of headers’ names to remove

Backends

  • kind - one of MeshService, MeshServiceSubset, MeshExtenalService
  • name - service name
  • tags - service tags, must be specified if the kind is MeshServiceSubset
  • weight - when a request matches the route, the choice of an upstream cluster is determined by its weight. Total weight is a sum of all weights in backendRefs list.

Spec is the specification of the Kuma MeshHTTPRoute resource.

Type: object

Properties

  • targetRef

    • TargetRef is a reference to the resource the policy takes an effect on.The resource could be either a real store object or virtual resourcedefined inplace.
    • Type: object
    • Properties
      • kind required
        • Kind of the referenced resource
        • Type: string
        • The value is restricted to the following:
          1. "Mesh"
          2. "MeshSubset"
          3. "MeshGateway"
          4. "MeshService"
          5. "MeshExternalService"
          6. "MeshMultiZoneService"
          7. "MeshServiceSubset"
          8. "MeshHTTPRoute"
          9. "Dataplane"
      • labels
        • Labels are used to select group of MeshServices that match labels. Either Labels orName and Namespace can be used.
        • Type: object
        • This schema accepts additional properties.
        • Properties
      • mesh
        • Mesh is reserved for future use to identify cross mesh resources.
        • Type: string
      • name
        • Name of the referenced resource. Can only be used with kinds: MeshService,MeshServiceSubset and MeshGatewayRoute
        • Type: string
      • namespace
        • Namespace specifies the namespace of target resource. If empty only resources in policy namespacewill be targeted.
        • Type: string
      • proxyTypes
        • ProxyTypes specifies the data plane types that are subject to the policy. When not specified,all data plane types are targeted by the policy.
        • Type: array
          • Items
          • Type: string
          • The value is restricted to the following:
            1. "Sidecar"
            2. "Gateway"
      • sectionName
        • SectionName is used to target specific section of resource.For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
        • Type: string
      • tags
        • Tags used to select a subset of proxies by tags. Can only be used with kindsMeshSubset and MeshServiceSubset
        • Type: object
        • This schema accepts additional properties.
        • Properties
  • to

    • To matches destination services of requests and holds configuration.

    • Type: array

      • Items

      • Type: object

      • Properties

        • hostnames

          • Hostnames is only valid when targeting MeshGateway and limits theeffects of the rules to requests to this hostname.Given hostnames must intersect with the hostname of the listeners theroute attaches to.
          • Type: array
            • Items
            • Type: string
        • rules required

          • Rules contains the routing rules applies to a combination of top-leveltargetRef and the targetRef in this entry.

          • Type: array

            • Items

            • Type: object

            • Properties

              • default required

                • Default holds routing rules that can be merged with rules from otherpolicies.

                • Type: object

                • Properties

                  • backendRefs

                    • Type: array
                      • Items
                      • BackendRef defines where to forward traffic.
                      • Type: object
                      • Properties
                        • kind required
                          • Kind of the referenced resource
                          • Type: string
                          • The value is restricted to the following:
                            1. "Mesh"
                            2. "MeshSubset"
                            3. "MeshGateway"
                            4. "MeshService"
                            5. "MeshExternalService"
                            6. "MeshMultiZoneService"
                            7. "MeshServiceSubset"
                            8. "MeshHTTPRoute"
                            9. "Dataplane"
                        • labels
                          • Labels are used to select group of MeshServices that match labels. Either Labels orName and Namespace can be used.
                          • Type: object
                          • This schema accepts additional properties.
                          • Properties
                        • mesh
                          • Mesh is reserved for future use to identify cross mesh resources.
                          • Type: string
                        • name
                          • Name of the referenced resource. Can only be used with kinds: MeshService,MeshServiceSubset and MeshGatewayRoute
                          • Type: string
                        • namespace
                          • Namespace specifies the namespace of target resource. If empty only resources in policy namespacewill be targeted.
                          • Type: string
                        • port
                          • Port is only supported when this ref refers to a real MeshService object
                          • Type: integer
                        • proxyTypes
                          • ProxyTypes specifies the data plane types that are subject to the policy. When not specified,all data plane types are targeted by the policy.
                          • Type: array
                            • Items
                            • Type: string
                            • The value is restricted to the following:
                              1. "Sidecar"
                              2. "Gateway"
                        • sectionName
                          • SectionName is used to target specific section of resource.For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
                          • Type: string
                        • tags
                          • Tags used to select a subset of proxies by tags. Can only be used with kindsMeshSubset and MeshServiceSubset
                          • Type: object
                          • This schema accepts additional properties.
                          • Properties
                        • weight
                          • Type: integer
                          • Default: 1
                          • Range: ≥ 0
                  • filters

                    • Type: array

                      • Items

                      • Type: object

                      • Properties

                        • requestHeaderModifier

                          • Only one action is supported per header name.Configuration to set or add multiple values for a header must use RFC 7230header value formatting, separating each value with a comma.

                          • Type: object

                          • Properties

                            • add

                              • Type: array

                              • Item Count: ≤ 16

                                • Items

                                • Type: object

                                • Properties

                                  • name required

                                    • Type: string
                                    • The value must match this pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
                                    • Length: between 1 and 256
                                  • value required

                                    • Type: string
                            • remove

                              • Type: array

                              • Item Count: ≤ 16

                                • Items
                                • Type: string
                            • set

                              • Type: array

                              • Item Count: ≤ 16

                                • Items

                                • Type: object

                                • Properties

                                  • name required

                                    • Type: string
                                    • The value must match this pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
                                    • Length: between 1 and 256
                                  • value required

                                    • Type: string
                        • requestMirror

                          • Type: object

                          • Properties

                            • backendRef required

                              • BackendRef defines where to forward traffic.
                              • Type: object
                              • Properties
                                • kind required
                                  • Kind of the referenced resource
                                  • Type: string
                                  • The value is restricted to the following:
                                    1. "Mesh"
                                    2. "MeshSubset"
                                    3. "MeshGateway"
                                    4. "MeshService"
                                    5. "MeshExternalService"
                                    6. "MeshMultiZoneService"
                                    7. "MeshServiceSubset"
                                    8. "MeshHTTPRoute"
                                    9. "Dataplane"
                                • labels
                                  • Labels are used to select group of MeshServices that match labels. Either Labels orName and Namespace can be used.
                                  • Type: object
                                  • This schema accepts additional properties.
                                  • Properties
                                • mesh
                                  • Mesh is reserved for future use to identify cross mesh resources.
                                  • Type: string
                                • name
                                  • Name of the referenced resource. Can only be used with kinds: MeshService,MeshServiceSubset and MeshGatewayRoute
                                  • Type: string
                                • namespace
                                  • Namespace specifies the namespace of target resource. If empty only resources in policy namespacewill be targeted.
                                  • Type: string
                                • port
                                  • Port is only supported when this ref refers to a real MeshService object
                                  • Type: integer
                                • proxyTypes
                                  • ProxyTypes specifies the data plane types that are subject to the policy. When not specified,all data plane types are targeted by the policy.
                                  • Type: array
                                    • Items
                                    • Type: string
                                    • The value is restricted to the following:
                                      1. "Sidecar"
                                      2. "Gateway"
                                • sectionName
                                  • SectionName is used to target specific section of resource.For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
                                  • Type: string
                                • tags
                                  • Tags used to select a subset of proxies by tags. Can only be used with kindsMeshSubset and MeshServiceSubset
                                  • Type: object
                                  • This schema accepts additional properties.
                                  • Properties
                                • weight
                                  • Type: integer
                                  • Default: 1
                                  • Range: ≥ 0
                            • percentage

                              • Percentage of requests to mirror. If not specified, all requeststo the target cluster will be mirrored.
                        • requestRedirect

                          • Type: object

                          • Properties

                            • hostname

                              • *PreciseHostname is the fully qualified domain name of a network host. Thismatches the RFC 1123 definition of a hostname with 1 notable exception thatnumeric IP addresses are not allowed.Note that as per RFC1035 and RFC1123, a *label* must consist of lower casealphanumeric characters or '-', and must start and end with an alphanumericcharacter. No other punctuation is allowed.*
                              • Type: string
                              • The value must match this pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                              • Length: between 1 and 253
                            • path

                              • Path defines parameters used to modify the path of the incoming request.The modified path is then used to construct the location header.When empty, the request path is used as-is.
                              • Type: object
                              • Properties
                                • replaceFullPath
                                  • Type: string
                                • replacePrefixMatch
                                  • Type: string
                                • type required
                                  • Type: string
                                  • The value is restricted to the following:
                                    1. "ReplaceFullPath"
                                    2. "ReplacePrefixMatch"
                            • port

                              • Port is the port to be used in the value of the Locationheader in the response.When empty, port (if specified) of the request is used.
                              • Type: integer
                              • Range: between 1 and 65535
                            • scheme

                              • Type: string
                              • The value is restricted to the following:
                                1. "http"
                                2. "https"
                            • statusCode

                              • StatusCode is the HTTP status code to be used in response.
                              • Type: integer
                              • The value is restricted to the following:
                                1. 301
                                2. 302
                                3. 303
                                4. 307
                                5. 308
                              • Default: 302
                        • responseHeaderModifier

                          • Only one action is supported per header name.Configuration to set or add multiple values for a header must use RFC 7230header value formatting, separating each value with a comma.

                          • Type: object

                          • Properties

                            • add

                              • Type: array

                              • Item Count: ≤ 16

                                • Items

                                • Type: object

                                • Properties

                                  • name required

                                    • Type: string
                                    • The value must match this pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
                                    • Length: between 1 and 256
                                  • value required

                                    • Type: string
                            • remove

                              • Type: array

                              • Item Count: ≤ 16

                                • Items
                                • Type: string
                            • set

                              • Type: array

                              • Item Count: ≤ 16

                                • Items

                                • Type: object

                                • Properties

                                  • name required

                                    • Type: string
                                    • The value must match this pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
                                    • Length: between 1 and 256
                                  • value required

                                    • Type: string
                        • type required

                          • Type: string
                          • The value is restricted to the following:
                            1. "RequestHeaderModifier"
                            2. "ResponseHeaderModifier"
                            3. "RequestRedirect"
                            4. "URLRewrite"
                            5. "RequestMirror"
                        • urlRewrite

                          • Type: object

                          • Properties

                            • hostToBackendHostname

                              • HostToBackendHostname rewrites the hostname to the hostname of theupstream host. This option is only available when targeting MeshGateways.
                              • Type: boolean
                            • hostname

                              • Hostname is the value to be used to replace the host header value during forwarding.
                              • Type: string
                              • The value must match this pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                              • Length: between 1 and 253
                            • path

                              • Path defines a path rewrite.
                              • Type: object
                              • Properties
                                • replaceFullPath
                                  • Type: string
                                • replacePrefixMatch
                                  • Type: string
                                • type required
                                  • Type: string
                                  • The value is restricted to the following:
                                    1. "ReplaceFullPath"
                                    2. "ReplacePrefixMatch"
              • matches required

                • Matches describes how to match HTTP requests this rule should be appliedto.

                • Type: array

                • Item Count: ≥ 1

                  • Items

                  • Type: object

                  • Properties

                    • headers

                      • Type: array

                        • Items

                        • HeaderMatch describes how to select an HTTP route by matching HTTP requestheaders.

                        • Type: object

                        • Properties

                          • name required

                            • Name is the name of the HTTP Header to be matched. Name MUST be lower caseas they will be handled with case insensitivity (See https://tools.ietf.org/html/rfc7230#section-3.2).
                            • Type: string
                            • The value must match this pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
                            • Length: between 1 and 256
                          • type

                            • Type specifies how to match against the value of the header.
                            • Type: string
                            • The value is restricted to the following:
                              1. "Exact"
                              2. "Present"
                              3. "RegularExpression"
                              4. "Absent"
                              5. "Prefix"
                            • Default: "Exact"
                          • value

                            • Value is the value of HTTP Header to be matched.
                            • Type: string
                    • method

                      • Type: string
                      • The value is restricted to the following:
                        1. "CONNECT"
                        2. "DELETE"
                        3. "GET"
                        4. "HEAD"
                        5. "OPTIONS"
                        6. "PATCH"
                        7. "POST"
                        8. "PUT"
                        9. "TRACE"
                    • path

                      • Type: object
                      • Properties
                        • type required
                          • Type: string
                          • The value is restricted to the following:
                            1. "Exact"
                            2. "PathPrefix"
                            3. "RegularExpression"
                        • value required
                          • Exact or prefix matches must be an absolute path. A prefix matches onlyif separated by a slash or the entire path.
                          • Type: string
                          • Length: ≥ 1
                    • queryParams

                      • QueryParams matches based on HTTP URL query parameters. Multiple matchesare ANDed together such that all listed matches must succeed.

                      • Type: array

                        • Items

                        • Type: object

                        • Properties

                          • name required

                            • Type: string
                            • Length: ≥ 1
                          • type required

                            • Type: string
                            • The value is restricted to the following:
                              1. "Exact"
                              2. "RegularExpression"
                          • value required

                            • Type: string
        • targetRef required

          • TargetRef is a reference to the resource that represents a group ofrequest destinations.
          • Type: object
          • Properties
            • kind required
              • Kind of the referenced resource
              • Type: string
              • The value is restricted to the following:
                1. "Mesh"
                2. "MeshSubset"
                3. "MeshGateway"
                4. "MeshService"
                5. "MeshExternalService"
                6. "MeshMultiZoneService"
                7. "MeshServiceSubset"
                8. "MeshHTTPRoute"
                9. "Dataplane"
            • labels
              • Labels are used to select group of MeshServices that match labels. Either Labels orName and Namespace can be used.
              • Type: object
              • This schema accepts additional properties.
              • Properties
            • mesh
              • Mesh is reserved for future use to identify cross mesh resources.
              • Type: string
            • name
              • Name of the referenced resource. Can only be used with kinds: MeshService,MeshServiceSubset and MeshGatewayRoute
              • Type: string
            • namespace
              • Namespace specifies the namespace of target resource. If empty only resources in policy namespacewill be targeted.
              • Type: string
            • proxyTypes
              • ProxyTypes specifies the data plane types that are subject to the policy. When not specified,all data plane types are targeted by the policy.
              • Type: array
                • Items
                • Type: string
                • The value is restricted to the following:
                  1. "Sidecar"
                  2. "Gateway"
            • sectionName
              • SectionName is used to target specific section of resource.For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
              • Type: string
            • tags
              • Tags used to select a subset of proxies by tags. Can only be used with kindsMeshSubset and MeshServiceSubset
              • Type: object
              • This schema accepts additional properties.
              • Properties

Generated with json-schema-md-doc Fri May 23 2025 09:36:25 GMT+0000 (Coordinated Universal Time)

Thank you for your feedback.
Was this page useful?
Too much on your plate? close cta icon
More features, less infrastructure with Kong Konnect. 1M requests per month for free.
Try it for Free
  • Kong
    Powering the API world

    Increase developer productivity, security, and performance at scale with the unified platform for API management, service mesh, and ingress controller.

    • Products
      • Kong Konnect
      • Kong Gateway Enterprise
      • Kong Gateway
      • Kong Mesh
      • Kong Ingress Controller
      • Kong Insomnia
      • Product Updates
      • Get Started
    • Documentation
      • Kong Konnect Docs
      • Kong Gateway Docs
      • Kong Mesh Docs
      • Kong Insomnia Docs
      • Kong Konnect Plugin Hub
    • Open Source
      • Kong Gateway
      • Kuma
      • Insomnia
      • Kong Community
    • Company
      • About Kong
      • Customers
      • Careers
      • Press
      • Events
      • Contact
  • Terms• Privacy• Trust and Compliance
© Kong Inc. 2025