Repository: envoyproxy/gateway

Issue:
consistent hashing on multiple headers
*Description*:
>Describe the desired behavior, what scenario it enables and how it
would be used.

Chash on multiple headers is a legit use case. Example: when user identity is split across multiple headers, X-Tenant-ID + X-User-ID in multi-tenant apps.

[optional *Relevant Links*:]
>Any extra documentation required to understand the issue.

Hash_policy is a list in envoy https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto, so we could support this in gateway

opened on behalf of Owen from envoy gateway slack channel.

https://envoyproxy.slack.com/archives/C03E6NHLESV/p1760003411597089



Discussion:
@arkodg: +1 to this

2 Parts to this problem

* We need to be creative and introduce a new slice field with a similar name, and deprecate the current field
https://github.com/envoyproxy/gateway/blob/c7cc6ceff4cacf6893bf91feed4fd6d01c9fc707/api/v1alpha1/loadbalancer_types.go#L30

* Implement this in https://github.com/envoyproxy/gateway/blob/c7cc6ceff4cacf6893bf91feed4fd6d01c9fc707/internal/xds/translator/route.go#L101

Solution patch:
diff --git a/api/v1alpha1/loadbalancer_types.go b/api/v1alpha1/loadbalancer_types.go
index a46acf3db..7cc7ea146 100644
--- a/api/v1alpha1/loadbalancer_types.go
+++ b/api/v1alpha1/loadbalancer_types.go
@@ -70,11 +70,13 @@ const (
 // +union
 //
 // +kubebuilder:validation:XValidation:rule="self.type == 'Header' ? has(self.header) : !has(self.header)",message="If consistent hash type is header, the header field must be set."
+// +kubebuilder:validation:XValidation:rule="self.type == 'Headers' ? has(self.headers) : !has(self.headers)",message="If consistent hash type is headers, the headers field must be set."
 // +kubebuilder:validation:XValidation:rule="self.type == 'Cookie' ? has(self.cookie) : !has(self.cookie)",message="If consistent hash type is cookie, the cookie field must be set."
 type ConsistentHash struct {
 	// ConsistentHashType defines the type of input to hash on. Valid Type values are
 	// "SourceIP",
 	// "Header",
+	// "Headers",
 	// "Cookie".
 	//
 	// +unionDiscriminator
@@ -82,9 +84,15 @@ type ConsistentHash struct {
 
 	// Header configures the header hash policy when the consistent hash type is set to Header.
 	//
+	// Deprecated: use Headers instead
 	// +optional
 	Header *Header `json:"header,omitempty"`
 
+	// Headers configures the header hash policy for each header, when the consistent hash type is set to Headers.
+	//
+	// +optional
+	Headers []*Header `json:"headers,omitempty"`
+
 	// Cookie configures the cookie hash policy when the consistent hash type is set to Cookie.
 	//
 	// +optional
@@ -127,14 +135,18 @@ type Cookie struct {
 }
 
 // ConsistentHashType defines the type of input to hash on.
-// +kubebuilder:validation:Enum=SourceIP;Header;Cookie
+// +kubebuilder:validation:Enum=SourceIP;Header;Headers;Cookie
 type ConsistentHashType string
 
 const (
 	// SourceIPConsistentHashType hashes based on the source IP address.
 	SourceIPConsistentHashType ConsistentHashType = "SourceIP"
 	// HeaderConsistentHashType hashes based on a request header.
+	//
+	// Deprecated: use HeadersConsistentHashType instead
 	HeaderConsistentHashType ConsistentHashType = "Header"
+	// HeadersConsistentHashType hashes based on multiple request headers.
+	HeadersConsistentHashType ConsistentHashType = "Headers"
 	// CookieConsistentHashType hashes based on a cookie.
 	CookieConsistentHashType ConsistentHashType = "Cookie"
 )
diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go
index 48de73f16..abd8cc941 100644
--- a/api/v1alpha1/zz_generated.deepcopy.go
+++ b/api/v1alpha1/zz_generated.deepcopy.go
@@ -1391,6 +1391,17 @@ func (in *ConsistentHash) DeepCopyInto(out *ConsistentHash) {
 		*out = new(Header)
 		**out = **in
 	}
+	if in.Headers != nil {
+		in, out := &in.Headers, &out.Headers
+		*out = make([]*Header, len(*in))
+		for i := range *in {
+			if (*in)[i] != nil {
+				in, out := &(*in)[i], &(*out)[i]
+				*out = new(Header)
+				**out = **in
+			}
+		}
+	}
 	if in.Cookie != nil {
 		in, out := &in.Cookie, &out.Cookie
 		*out = new(Cookie)
diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml
index 767dfd67d..d92823098 100644
--- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml
+++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml
@@ -675,8 +675,10 @@ spec:
                         - name
                         type: object
                       header:
-                        description: Header configures the header hash policy when
-                          the consistent hash type is set to Header.
+                        description: |-
+                          Header configures the header hash policy when the consistent hash type is set to Header.
+
+                          Deprecated: use Headers instead
                         properties:
                           name:
                             description: Name of the header to hash.
@@ -684,6 +686,21 @@ spec:
                         required:
                         - name
                         type: object
+                      headers:
+                        description: Headers configures the header hash policy for
+                          each header, when the consistent hash type is set to Headers.
+                        items:
+                          description: |-
+                            Header defines the header hashing configuration for consistent hash based
+                            load balancing.
+                          properties:
+                            name:
+                              description: Name of the header to hash.
+                              type: string
+                          required:
+                          - name
+                          type: object
+                        type: array
                       tableSize:
                         default: 65537
                         description: The table size for consistent hashing, must be
@@ -697,10 +714,12 @@ spec:
                           ConsistentHashType defines the type of input to hash on. Valid Type values are
                           "SourceIP",
                           "Header",
+                          "Headers",
                           "Cookie".
                         enum:
                         - SourceIP
                         - Header
+                        - Headers
                         - Cookie
                         type: string
                     required:
@@ -710,6 +729,9 @@ spec:
                     - message: If consistent hash type is header, the header field
                         must be set.
                       rule: 'self.type == ''Header'' ? has(self.header) : !has(self.header)'
+                    - message: If consistent hash type is headers, the headers field
+                        must be set.
+                      rule: 'self.type == ''Headers'' ? has(self.headers) : !has(self.headers)'
                     - message: If consistent hash type is cookie, the cookie field
                         must be set.
                       rule: 'self.type == ''Cookie'' ? has(self.cookie) : !has(self.cookie)'
diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml
index 2d057a35f..8f50f21d4 100644
--- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml
+++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml
@@ -714,8 +714,10 @@ spec:
                                   - name
                                   type: object
                                 header:
-                                  description: Header configures the header hash policy
-                                    when the consistent hash type is set to Header.
+                                  description: |-
+                                    Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                    Deprecated: use Headers instead
                                   properties:
                                     name:
                                       description: Name of the header to hash.
@@ -723,6 +725,22 @@ spec:
                                   required:
                                   - name
                                   type: object
+                                headers:
+                                  description: Headers configures the header hash
+                                    policy for each header, when the consistent hash
+                                    type is set to Headers.
+                                  items:
+                                    description: |-
+                                      Header defines the header hashing configuration for consistent hash based
+                                      load balancing.
+                                    properties:
+                                      name:
+                                        description: Name of the header to hash.
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
                                 tableSize:
                                   default: 65537
                                   description: The table size for consistent hashing,
@@ -736,10 +754,12 @@ spec:
                                     ConsistentHashType defines the type of input to hash on. Valid Type values are
                                     "SourceIP",
                                     "Header",
+                                    "Headers",
                                     "Cookie".
                                   enum:
                                   - SourceIP
                                   - Header
+                                  - Headers
                                   - Cookie
                                   type: string
                               required:
@@ -750,6 +770,10 @@ spec:
                                   field must be set.
                                 rule: 'self.type == ''Header'' ? has(self.header)
                                   : !has(self.header)'
+                              - message: If consistent hash type is headers, the headers
+                                  field must be set.
+                                rule: 'self.type == ''Headers'' ? has(self.headers)
+                                  : !has(self.headers)'
                               - message: If consistent hash type is cookie, the cookie
                                   field must be set.
                                 rule: 'self.type == ''Cookie'' ? has(self.cookie)
diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml
index e177a4e41..00d79b075 100644
--- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml
+++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml
@@ -11686,10 +11686,10 @@ spec:
                                                     - name
                                                     type: object
                                                   header:
-                                                    description: Header configures
-                                                      the header hash policy when
-                                                      the consistent hash type is
-                                                      set to Header.
+                                                    description: |-
+                                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                                      Deprecated: use Headers instead
                                                     properties:
                                                       name:
                                                         description: Name of the header
@@ -11698,6 +11698,24 @@ spec:
                                                     required:
                                                     - name
                                                     type: object
+                                                  headers:
+                                                    description: Headers configures
+                                                      the header hash policy for each
+                                                      header, when the consistent
+                                                      hash type is set to Headers.
+                                                    items:
+                                                      description: |-
+                                                        Header defines the header hashing configuration for consistent hash based
+                                                        load balancing.
+                                                      properties:
+                                                        name:
+                                                          description: Name of the
+                                                            header to hash.
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      type: object
+                                                    type: array
                                                   tableSize:
                                                     default: 65537
                                                     description: The table size for
@@ -11712,10 +11730,12 @@ spec:
                                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                                       "SourceIP",
                                                       "Header",
+                                                      "Headers",
                                                       "Cookie".
                                                     enum:
                                                     - SourceIP
                                                     - Header
+                                                    - Headers
                                                     - Cookie
                                                     type: string
                                                 required:
@@ -11727,6 +11747,11 @@ spec:
                                                     be set.
                                                   rule: 'self.type == ''Header'' ?
                                                     has(self.header) : !has(self.header)'
+                                                - message: If consistent hash type
+                                                    is headers, the headers field
+                                                    must be set.
+                                                  rule: 'self.type == ''Headers''
+                                                    ? has(self.headers) : !has(self.headers)'
                                                 - message: If consistent hash type
                                                     is cookie, the cookie field must
                                                     be set.
@@ -12816,10 +12841,10 @@ spec:
                                                     - name
                                                     type: object
                                                   header:
-                                                    description: Header configures
-                                                      the header hash policy when
-                                                      the consistent hash type is
-                                                      set to Header.
+                                                    description: |-
+                                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                                      Deprecated: use Headers instead
                                                     properties:
                                                       name:
                                                         description: Name of the header
@@ -12828,6 +12853,24 @@ spec:
                                                     required:
                                                     - name
                                                     type: object
+                                                  headers:
+                                                    description: Headers configures
+                                                      the header hash policy for each
+                                                      header, when the consistent
+                                                      hash type is set to Headers.
+                                                    items:
+                                                      description: |-
+                                                        Header defines the header hashing configuration for consistent hash based
+                                                        load balancing.
+                                                      properties:
+                                                        name:
+                                                          description: Name of the
+                                                            header to hash.
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      type: object
+                                                    type: array
                                                   tableSize:
                                                     default: 65537
                                                     description: The table size for
@@ -12842,10 +12885,12 @@ spec:
                                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                                       "SourceIP",
                                                       "Header",
+                                                      "Headers",
                                                       "Cookie".
                                                     enum:
                                                     - SourceIP
                                                     - Header
+                                                    - Headers
                                                     - Cookie
                                                     type: string
                                                 required:
@@ -12857,6 +12902,11 @@ spec:
                                                     be set.
                                                   rule: 'self.type == ''Header'' ?
                                                     has(self.header) : !has(self.header)'
+                                                - message: If consistent hash type
+                                                    is headers, the headers field
+                                                    must be set.
+                                                  rule: 'self.type == ''Headers''
+                                                    ? has(self.headers) : !has(self.headers)'
                                                 - message: If consistent hash type
                                                     is cookie, the cookie field must
                                                     be set.
@@ -14038,9 +14088,10 @@ spec:
                                               - name
                                               type: object
                                             header:
-                                              description: Header configures the header
-                                                hash policy when the consistent hash
-                                                type is set to Header.
+                                              description: |-
+                                                Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                                Deprecated: use Headers instead
                                               properties:
                                                 name:
                                                   description: Name of the header
@@ -14049,6 +14100,24 @@ spec:
                                               required:
                                               - name
                                               type: object
+                                            headers:
+                                              description: Headers configures the
+                                                header hash policy for each header,
+                                                when the consistent hash type is set
+                                                to Headers.
+                                              items:
+                                                description: |-
+                                                  Header defines the header hashing configuration for consistent hash based
+                                                  load balancing.
+                                                properties:
+                                                  name:
+                                                    description: Name of the header
+                                                      to hash.
+                                                    type: string
+                                                required:
+                                                - name
+                                                type: object
+                                              type: array
                                             tableSize:
                                               default: 65537
                                               description: The table size for consistent
@@ -14063,10 +14132,12 @@ spec:
                                                 ConsistentHashType defines the type of input to hash on. Valid Type values are
                                                 "SourceIP",
                                                 "Header",
+                                                "Headers",
                                                 "Cookie".
                                               enum:
                                               - SourceIP
                                               - Header
+                                              - Headers
                                               - Cookie
                                               type: string
                                           required:
@@ -14077,6 +14148,10 @@ spec:
                                               the header field must be set.
                                             rule: 'self.type == ''Header'' ? has(self.header)
                                               : !has(self.header)'
+                                          - message: If consistent hash type is headers,
+                                              the headers field must be set.
+                                            rule: 'self.type == ''Headers'' ? has(self.headers)
+                                              : !has(self.headers)'
                                           - message: If consistent hash type is cookie,
                                               the cookie field must be set.
                                             rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -15171,9 +15246,10 @@ spec:
                                         - name
                                         type: object
                                       header:
-                                        description: Header configures the header
-                                          hash policy when the consistent hash type
-                                          is set to Header.
+                                        description: |-
+                                          Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                          Deprecated: use Headers instead
                                         properties:
                                           name:
                                             description: Name of the header to hash.
@@ -15181,6 +15257,22 @@ spec:
                                         required:
                                         - name
                                         type: object
+                                      headers:
+                                        description: Headers configures the header
+                                          hash policy for each header, when the consistent
+                                          hash type is set to Headers.
+                                        items:
+                                          description: |-
+                                            Header defines the header hashing configuration for consistent hash based
+                                            load balancing.
+                                          properties:
+                                            name:
+                                              description: Name of the header to hash.
+                                              type: string
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
                                       tableSize:
                                         default: 65537
                                         description: The table size for consistent
@@ -15195,10 +15287,12 @@ spec:
                                           ConsistentHashType defines the type of input to hash on. Valid Type values are
                                           "SourceIP",
                                           "Header",
+                                          "Headers",
                                           "Cookie".
                                         enum:
                                         - SourceIP
                                         - Header
+                                        - Headers
                                         - Cookie
                                         type: string
                                     required:
@@ -15209,6 +15303,10 @@ spec:
                                         the header field must be set.
                                       rule: 'self.type == ''Header'' ? has(self.header)
                                         : !has(self.header)'
+                                    - message: If consistent hash type is headers,
+                                        the headers field must be set.
+                                      rule: 'self.type == ''Headers'' ? has(self.headers)
+                                        : !has(self.headers)'
                                     - message: If consistent hash type is cookie,
                                         the cookie field must be set.
                                       rule: 'self.type == ''Cookie'' ? has(self.cookie)
diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml
index c91bef867..5f39586b7 100644
--- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml
+++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml
@@ -1233,9 +1233,10 @@ spec:
                                     - name
                                     type: object
                                   header:
-                                    description: Header configures the header hash
-                                      policy when the consistent hash type is set
-                                      to Header.
+                                    description: |-
+                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                      Deprecated: use Headers instead
                                     properties:
                                       name:
                                         description: Name of the header to hash.
@@ -1243,6 +1244,22 @@ spec:
                                     required:
                                     - name
                                     type: object
+                                  headers:
+                                    description: Headers configures the header hash
+                                      policy for each header, when the consistent
+                                      hash type is set to Headers.
+                                    items:
+                                      description: |-
+                                        Header defines the header hashing configuration for consistent hash based
+                                        load balancing.
+                                      properties:
+                                        name:
+                                          description: Name of the header to hash.
+                                          type: string
+                                      required:
+                                      - name
+                                      type: object
+                                    type: array
                                   tableSize:
                                     default: 65537
                                     description: The table size for consistent hashing,
@@ -1256,10 +1273,12 @@ spec:
                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                       "SourceIP",
                                       "Header",
+                                      "Headers",
                                       "Cookie".
                                     enum:
                                     - SourceIP
                                     - Header
+                                    - Headers
                                     - Cookie
                                     type: string
                                 required:
@@ -1270,6 +1289,10 @@ spec:
                                     header field must be set.
                                   rule: 'self.type == ''Header'' ? has(self.header)
                                     : !has(self.header)'
+                                - message: If consistent hash type is headers, the
+                                    headers field must be set.
+                                  rule: 'self.type == ''Headers'' ? has(self.headers)
+                                    : !has(self.headers)'
                                 - message: If consistent hash type is cookie, the
                                     cookie field must be set.
                                   rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -2257,9 +2280,10 @@ spec:
                                     - name
                                     type: object
                                   header:
-                                    description: Header configures the header hash
-                                      policy when the consistent hash type is set
-                                      to Header.
+                                    description: |-
+                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                      Deprecated: use Headers instead
                                     properties:
                                       name:
                                         description: Name of the header to hash.
@@ -2267,6 +2291,22 @@ spec:
                                     required:
                                     - name
                                     type: object
+                                  headers:
+                                    description: Headers configures the header hash
+                                      policy for each header, when the consistent
+                                      hash type is set to Headers.
+                                    items:
+                                      description: |-
+                                        Header defines the header hashing configuration for consistent hash based
+                                        load balancing.
+                                      properties:
+                                        name:
+                                          description: Name of the header to hash.
+                                          type: string
+                                      required:
+                                      - name
+                                      type: object
+                                    type: array
                                   tableSize:
                                     default: 65537
                                     description: The table size for consistent hashing,
@@ -2280,10 +2320,12 @@ spec:
                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                       "SourceIP",
                                       "Header",
+                                      "Headers",
                                       "Cookie".
                                     enum:
                                     - SourceIP
                                     - Header
+                                    - Headers
                                     - Cookie
                                     type: string
                                 required:
@@ -2294,6 +2336,10 @@ spec:
                                     header field must be set.
                                   rule: 'self.type == ''Header'' ? has(self.header)
                                     : !has(self.header)'
+                                - message: If consistent hash type is headers, the
+                                    headers field must be set.
+                                  rule: 'self.type == ''Headers'' ? has(self.headers)
+                                    : !has(self.headers)'
                                 - message: If consistent hash type is cookie, the
                                     cookie field must be set.
                                   rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -3492,9 +3538,10 @@ spec:
                                           - name
                                           type: object
                                         header:
-                                          description: Header configures the header
-                                            hash policy when the consistent hash type
-                                            is set to Header.
+                                          description: |-
+                                            Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                            Deprecated: use Headers instead
                                           properties:
                                             name:
                                               description: Name of the header to hash.
@@ -3502,6 +3549,23 @@ spec:
                                           required:
                                           - name
                                           type: object
+                                        headers:
+                                          description: Headers configures the header
+                                            hash policy for each header, when the
+                                            consistent hash type is set to Headers.
+                                          items:
+                                            description: |-
+                                              Header defines the header hashing configuration for consistent hash based
+                                              load balancing.
+                                            properties:
+                                              name:
+                                                description: Name of the header to
+                                                  hash.
+                                                type: string
+                                            required:
+                                            - name
+                                            type: object
+                                          type: array
                                         tableSize:
                                           default: 65537
                                           description: The table size for consistent
@@ -3516,10 +3580,12 @@ spec:
                                             ConsistentHashType defines the type of input to hash on. Valid Type values are
                                             "SourceIP",
                                             "Header",
+                                            "Headers",
                                             "Cookie".
                                           enum:
                                           - SourceIP
                                           - Header
+                                          - Headers
                                           - Cookie
                                           type: string
                                       required:
@@ -3530,6 +3596,10 @@ spec:
                                           the header field must be set.
                                         rule: 'self.type == ''Header'' ? has(self.header)
                                           : !has(self.header)'
+                                      - message: If consistent hash type is headers,
+                                          the headers field must be set.
+                                        rule: 'self.type == ''Headers'' ? has(self.headers)
+                                          : !has(self.headers)'
                                       - message: If consistent hash type is cookie,
                                           the cookie field must be set.
                                         rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -4784,9 +4854,10 @@ spec:
                                     - name
                                     type: object
                                   header:
-                                    description: Header configures the header hash
-                                      policy when the consistent hash type is set
-                                      to Header.
+                                    description: |-
+                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                      Deprecated: use Headers instead
                                     properties:
                                       name:
                                         description: Name of the header to hash.
@@ -4794,6 +4865,22 @@ spec:
                                     required:
                                     - name
                                     type: object
+                                  headers:
+                                    description: Headers configures the header hash
+                                      policy for each header, when the consistent
+                                      hash type is set to Headers.
+                                    items:
+                                      description: |-
+                                        Header defines the header hashing configuration for consistent hash based
+                                        load balancing.
+                                      properties:
+                                        name:
+                                          description: Name of the header to hash.
+                                          type: string
+                                      required:
+                                      - name
+                                      type: object
+                                    type: array
                                   tableSize:
                                     default: 65537
                                     description: The table size for consistent hashing,
@@ -4807,10 +4894,12 @@ spec:
                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                       "SourceIP",
                                       "Header",
+                                      "Headers",
                                       "Cookie".
                                     enum:
                                     - SourceIP
                                     - Header
+                                    - Headers
                                     - Cookie
                                     type: string
                                 required:
@@ -4821,6 +4910,10 @@ spec:
                                     header field must be set.
                                   rule: 'self.type == ''Header'' ? has(self.header)
                                     : !has(self.header)'
+                                - message: If consistent hash type is headers, the
+                                    headers field must be set.
+                                  rule: 'self.type == ''Headers'' ? has(self.headers)
+                                    : !has(self.headers)'
                                 - message: If consistent hash type is cookie, the
                                     cookie field must be set.
                                   rule: 'self.type == ''Cookie'' ? has(self.cookie)
diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml
index 5df1439aa..a241a1ee2 100644
--- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml
+++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml
@@ -674,8 +674,10 @@ spec:
                         - name
                         type: object
                       header:
-                        description: Header configures the header hash policy when
-                          the consistent hash type is set to Header.
+                        description: |-
+                          Header configures the header hash policy when the consistent hash type is set to Header.
+
+                          Deprecated: use Headers instead
                         properties:
                           name:
                             description: Name of the header to hash.
@@ -683,6 +685,21 @@ spec:
                         required:
                         - name
                         type: object
+                      headers:
+                        description: Headers configures the header hash policy for
+                          each header, when the consistent hash type is set to Headers.
+                        items:
+                          description: |-
+                            Header defines the header hashing configuration for consistent hash based
+                            load balancing.
+                          properties:
+                            name:
+                              description: Name of the header to hash.
+                              type: string
+                          required:
+                          - name
+                          type: object
+                        type: array
                       tableSize:
                         default: 65537
                         description: The table size for consistent hashing, must be
@@ -696,10 +713,12 @@ spec:
                           ConsistentHashType defines the type of input to hash on. Valid Type values are
                           "SourceIP",
                           "Header",
+                          "Headers",
                           "Cookie".
                         enum:
                         - SourceIP
                         - Header
+                        - Headers
                         - Cookie
                         type: string
                     required:
@@ -709,6 +728,9 @@ spec:
                     - message: If consistent hash type is header, the header field
                         must be set.
                       rule: 'self.type == ''Header'' ? has(self.header) : !has(self.header)'
+                    - message: If consistent hash type is headers, the headers field
+                        must be set.
+                      rule: 'self.type == ''Headers'' ? has(self.headers) : !has(self.headers)'
                     - message: If consistent hash type is cookie, the cookie field
                         must be set.
                       rule: 'self.type == ''Cookie'' ? has(self.cookie) : !has(self.cookie)'
diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml
index d11914c0a..435ae16a7 100644
--- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml
+++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml
@@ -713,8 +713,10 @@ spec:
                                   - name
                                   type: object
                                 header:
-                                  description: Header configures the header hash policy
-                                    when the consistent hash type is set to Header.
+                                  description: |-
+                                    Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                    Deprecated: use Headers instead
                                   properties:
                                     name:
                                       description: Name of the header to hash.
@@ -722,6 +724,22 @@ spec:
                                   required:
                                   - name
                                   type: object
+                                headers:
+                                  description: Headers configures the header hash
+                                    policy for each header, when the consistent hash
+                                    type is set to Headers.
+                                  items:
+                                    description: |-
+                                      Header defines the header hashing configuration for consistent hash based
+                                      load balancing.
+                                    properties:
+                                      name:
+                                        description: Name of the header to hash.
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
                                 tableSize:
                                   default: 65537
                                   description: The table size for consistent hashing,
@@ -735,10 +753,12 @@ spec:
                                     ConsistentHashType defines the type of input to hash on. Valid Type values are
                                     "SourceIP",
                                     "Header",
+                                    "Headers",
                                     "Cookie".
                                   enum:
                                   - SourceIP
                                   - Header
+                                  - Headers
                                   - Cookie
                                   type: string
                               required:
@@ -749,6 +769,10 @@ spec:
                                   field must be set.
                                 rule: 'self.type == ''Header'' ? has(self.header)
                                   : !has(self.header)'
+                              - message: If consistent hash type is headers, the headers
+                                  field must be set.
+                                rule: 'self.type == ''Headers'' ? has(self.headers)
+                                  : !has(self.headers)'
                               - message: If consistent hash type is cookie, the cookie
                                   field must be set.
                                 rule: 'self.type == ''Cookie'' ? has(self.cookie)
diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml
index 9df7e75ef..ae6ec5f24 100644
--- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml
+++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml
@@ -11685,10 +11685,10 @@ spec:
                                                     - name
                                                     type: object
                                                   header:
-                                                    description: Header configures
-                                                      the header hash policy when
-                                                      the consistent hash type is
-                                                      set to Header.
+                                                    description: |-
+                                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                                      Deprecated: use Headers instead
                                                     properties:
                                                       name:
                                                         description: Name of the header
@@ -11697,6 +11697,24 @@ spec:
                                                     required:
                                                     - name
                                                     type: object
+                                                  headers:
+                                                    description: Headers configures
+                                                      the header hash policy for each
+                                                      header, when the consistent
+                                                      hash type is set to Headers.
+                                                    items:
+                                                      description: |-
+                                                        Header defines the header hashing configuration for consistent hash based
+                                                        load balancing.
+                                                      properties:
+                                                        name:
+                                                          description: Name of the
+                                                            header to hash.
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      type: object
+                                                    type: array
                                                   tableSize:
                                                     default: 65537
                                                     description: The table size for
@@ -11711,10 +11729,12 @@ spec:
                                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                                       "SourceIP",
                                                       "Header",
+                                                      "Headers",
                                                       "Cookie".
                                                     enum:
                                                     - SourceIP
                                                     - Header
+                                                    - Headers
                                                     - Cookie
                                                     type: string
                                                 required:
@@ -11726,6 +11746,11 @@ spec:
                                                     be set.
                                                   rule: 'self.type == ''Header'' ?
                                                     has(self.header) : !has(self.header)'
+                                                - message: If consistent hash type
+                                                    is headers, the headers field
+                                                    must be set.
+                                                  rule: 'self.type == ''Headers''
+                                                    ? has(self.headers) : !has(self.headers)'
                                                 - message: If consistent hash type
                                                     is cookie, the cookie field must
                                                     be set.
@@ -12815,10 +12840,10 @@ spec:
                                                     - name
                                                     type: object
                                                   header:
-                                                    description: Header configures
-                                                      the header hash policy when
-                                                      the consistent hash type is
-                                                      set to Header.
+                                                    description: |-
+                                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                                      Deprecated: use Headers instead
                                                     properties:
                                                       name:
                                                         description: Name of the header
@@ -12827,6 +12852,24 @@ spec:
                                                     required:
                                                     - name
                                                     type: object
+                                                  headers:
+                                                    description: Headers configures
+                                                      the header hash policy for each
+                                                      header, when the consistent
+                                                      hash type is set to Headers.
+                                                    items:
+                                                      description: |-
+                                                        Header defines the header hashing configuration for consistent hash based
+                                                        load balancing.
+                                                      properties:
+                                                        name:
+                                                          description: Name of the
+                                                            header to hash.
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      type: object
+                                                    type: array
                                                   tableSize:
                                                     default: 65537
                                                     description: The table size for
@@ -12841,10 +12884,12 @@ spec:
                                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                                       "SourceIP",
                                                       "Header",
+                                                      "Headers",
                                                       "Cookie".
                                                     enum:
                                                     - SourceIP
                                                     - Header
+                                                    - Headers
                                                     - Cookie
                                                     type: string
                                                 required:
@@ -12856,6 +12901,11 @@ spec:
                                                     be set.
                                                   rule: 'self.type == ''Header'' ?
                                                     has(self.header) : !has(self.header)'
+                                                - message: If consistent hash type
+                                                    is headers, the headers field
+                                                    must be set.
+                                                  rule: 'self.type == ''Headers''
+                                                    ? has(self.headers) : !has(self.headers)'
                                                 - message: If consistent hash type
                                                     is cookie, the cookie field must
                                                     be set.
@@ -14037,9 +14087,10 @@ spec:
                                               - name
                                               type: object
                                             header:
-                                              description: Header configures the header
-                                                hash policy when the consistent hash
-                                                type is set to Header.
+                                              description: |-
+                                                Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                                Deprecated: use Headers instead
                                               properties:
                                                 name:
                                                   description: Name of the header
@@ -14048,6 +14099,24 @@ spec:
                                               required:
                                               - name
                                               type: object
+                                            headers:
+                                              description: Headers configures the
+                                                header hash policy for each header,
+                                                when the consistent hash type is set
+                                                to Headers.
+                                              items:
+                                                description: |-
+                                                  Header defines the header hashing configuration for consistent hash based
+                                                  load balancing.
+                                                properties:
+                                                  name:
+                                                    description: Name of the header
+                                                      to hash.
+                                                    type: string
+                                                required:
+                                                - name
+                                                type: object
+                                              type: array
                                             tableSize:
                                               default: 65537
                                               description: The table size for consistent
@@ -14062,10 +14131,12 @@ spec:
                                                 ConsistentHashType defines the type of input to hash on. Valid Type values are
                                                 "SourceIP",
                                                 "Header",
+                                                "Headers",
                                                 "Cookie".
                                               enum:
                                               - SourceIP
                                               - Header
+                                              - Headers
                                               - Cookie
                                               type: string
                                           required:
@@ -14076,6 +14147,10 @@ spec:
                                               the header field must be set.
                                             rule: 'self.type == ''Header'' ? has(self.header)
                                               : !has(self.header)'
+                                          - message: If consistent hash type is headers,
+                                              the headers field must be set.
+                                            rule: 'self.type == ''Headers'' ? has(self.headers)
+                                              : !has(self.headers)'
                                           - message: If consistent hash type is cookie,
                                               the cookie field must be set.
                                             rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -15170,9 +15245,10 @@ spec:
                                         - name
                                         type: object
                                       header:
-                                        description: Header configures the header
-                                          hash policy when the consistent hash type
-                                          is set to Header.
+                                        description: |-
+                                          Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                          Deprecated: use Headers instead
                                         properties:
                                           name:
                                             description: Name of the header to hash.
@@ -15180,6 +15256,22 @@ spec:
                                         required:
                                         - name
                                         type: object
+                                      headers:
+                                        description: Headers configures the header
+                                          hash policy for each header, when the consistent
+                                          hash type is set to Headers.
+                                        items:
+                                          description: |-
+                                            Header defines the header hashing configuration for consistent hash based
+                                            load balancing.
+                                          properties:
+                                            name:
+                                              description: Name of the header to hash.
+                                              type: string
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
                                       tableSize:
                                         default: 65537
                                         description: The table size for consistent
@@ -15194,10 +15286,12 @@ spec:
                                           ConsistentHashType defines the type of input to hash on. Valid Type values are
                                           "SourceIP",
                                           "Header",
+                                          "Headers",
                                           "Cookie".
                                         enum:
                                         - SourceIP
                                         - Header
+                                        - Headers
                                         - Cookie
                                         type: string
                                     required:
@@ -15208,6 +15302,10 @@ spec:
                                         the header field must be set.
                                       rule: 'self.type == ''Header'' ? has(self.header)
                                         : !has(self.header)'
+                                    - message: If consistent hash type is headers,
+                                        the headers field must be set.
+                                      rule: 'self.type == ''Headers'' ? has(self.headers)
+                                        : !has(self.headers)'
                                     - message: If consistent hash type is cookie,
                                         the cookie field must be set.
                                       rule: 'self.type == ''Cookie'' ? has(self.cookie)
diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml
index 18d6a561a..136fa8ffa 100644
--- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml
+++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml
@@ -1232,9 +1232,10 @@ spec:
                                     - name
                                     type: object
                                   header:
-                                    description: Header configures the header hash
-                                      policy when the consistent hash type is set
-                                      to Header.
+                                    description: |-
+                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                      Deprecated: use Headers instead
                                     properties:
                                       name:
                                         description: Name of the header to hash.
@@ -1242,6 +1243,22 @@ spec:
                                     required:
                                     - name
                                     type: object
+                                  headers:
+                                    description: Headers configures the header hash
+                                      policy for each header, when the consistent
+                                      hash type is set to Headers.
+                                    items:
+                                      description: |-
+                                        Header defines the header hashing configuration for consistent hash based
+                                        load balancing.
+                                      properties:
+                                        name:
+                                          description: Name of the header to hash.
+                                          type: string
+                                      required:
+                                      - name
+                                      type: object
+                                    type: array
                                   tableSize:
                                     default: 65537
                                     description: The table size for consistent hashing,
@@ -1255,10 +1272,12 @@ spec:
                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                       "SourceIP",
                                       "Header",
+                                      "Headers",
                                       "Cookie".
                                     enum:
                                     - SourceIP
                                     - Header
+                                    - Headers
                                     - Cookie
                                     type: string
                                 required:
@@ -1269,6 +1288,10 @@ spec:
                                     header field must be set.
                                   rule: 'self.type == ''Header'' ? has(self.header)
                                     : !has(self.header)'
+                                - message: If consistent hash type is headers, the
+                                    headers field must be set.
+                                  rule: 'self.type == ''Headers'' ? has(self.headers)
+                                    : !has(self.headers)'
                                 - message: If consistent hash type is cookie, the
                                     cookie field must be set.
                                   rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -2256,9 +2279,10 @@ spec:
                                     - name
                                     type: object
                                   header:
-                                    description: Header configures the header hash
-                                      policy when the consistent hash type is set
-                                      to Header.
+                                    description: |-
+                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                      Deprecated: use Headers instead
                                     properties:
                                       name:
                                         description: Name of the header to hash.
@@ -2266,6 +2290,22 @@ spec:
                                     required:
                                     - name
                                     type: object
+                                  headers:
+                                    description: Headers configures the header hash
+                                      policy for each header, when the consistent
+                                      hash type is set to Headers.
+                                    items:
+                                      description: |-
+                                        Header defines the header hashing configuration for consistent hash based
+                                        load balancing.
+                                      properties:
+                                        name:
+                                          description: Name of the header to hash.
+                                          type: string
+                                      required:
+                                      - name
+                                      type: object
+                                    type: array
                                   tableSize:
                                     default: 65537
                                     description: The table size for consistent hashing,
@@ -2279,10 +2319,12 @@ spec:
                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                       "SourceIP",
                                       "Header",
+                                      "Headers",
                                       "Cookie".
                                     enum:
                                     - SourceIP
                                     - Header
+                                    - Headers
                                     - Cookie
                                     type: string
                                 required:
@@ -2293,6 +2335,10 @@ spec:
                                     header field must be set.
                                   rule: 'self.type == ''Header'' ? has(self.header)
                                     : !has(self.header)'
+                                - message: If consistent hash type is headers, the
+                                    headers field must be set.
+                                  rule: 'self.type == ''Headers'' ? has(self.headers)
+                                    : !has(self.headers)'
                                 - message: If consistent hash type is cookie, the
                                     cookie field must be set.
                                   rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -3491,9 +3537,10 @@ spec:
                                           - name
                                           type: object
                                         header:
-                                          description: Header configures the header
-                                            hash policy when the consistent hash type
-                                            is set to Header.
+                                          description: |-
+                                            Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                            Deprecated: use Headers instead
                                           properties:
                                             name:
                                               description: Name of the header to hash.
@@ -3501,6 +3548,23 @@ spec:
                                           required:
                                           - name
                                           type: object
+                                        headers:
+                                          description: Headers configures the header
+                                            hash policy for each header, when the
+                                            consistent hash type is set to Headers.
+                                          items:
+                                            description: |-
+                                              Header defines the header hashing configuration for consistent hash based
+                                              load balancing.
+                                            properties:
+                                              name:
+                                                description: Name of the header to
+                                                  hash.
+                                                type: string
+                                            required:
+                                            - name
+                                            type: object
+                                          type: array
                                         tableSize:
                                           default: 65537
                                           description: The table size for consistent
@@ -3515,10 +3579,12 @@ spec:
                                             ConsistentHashType defines the type of input to hash on. Valid Type values are
                                             "SourceIP",
                                             "Header",
+                                            "Headers",
                                             "Cookie".
                                           enum:
                                           - SourceIP
                                           - Header
+                                          - Headers
                                           - Cookie
                                           type: string
                                       required:
@@ -3529,6 +3595,10 @@ spec:
                                           the header field must be set.
                                         rule: 'self.type == ''Header'' ? has(self.header)
                                           : !has(self.header)'
+                                      - message: If consistent hash type is headers,
+                                          the headers field must be set.
+                                        rule: 'self.type == ''Headers'' ? has(self.headers)
+                                          : !has(self.headers)'
                                       - message: If consistent hash type is cookie,
                                           the cookie field must be set.
                                         rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -4783,9 +4853,10 @@ spec:
                                     - name
                                     type: object
                                   header:
-                                    description: Header configures the header hash
-                                      policy when the consistent hash type is set
-                                      to Header.
+                                    description: |-
+                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                      Deprecated: use Headers instead
                                     properties:
                                       name:
                                         description: Name of the header to hash.
@@ -4793,6 +4864,22 @@ spec:
                                     required:
                                     - name
                                     type: object
+                                  headers:
+                                    description: Headers configures the header hash
+                                      policy for each header, when the consistent
+                                      hash type is set to Headers.
+                                    items:
+                                      description: |-
+                                        Header defines the header hashing configuration for consistent hash based
+                                        load balancing.
+                                      properties:
+                                        name:
+                                          description: Name of the header to hash.
+                                          type: string
+                                      required:
+                                      - name
+                                      type: object
+                                    type: array
                                   tableSize:
                                     default: 65537
                                     description: The table size for consistent hashing,
@@ -4806,10 +4893,12 @@ spec:
                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                       "SourceIP",
                                       "Header",
+                                      "Headers",
                                       "Cookie".
                                     enum:
                                     - SourceIP
                                     - Header
+                                    - Headers
                                     - Cookie
                                     type: string
                                 required:
@@ -4820,6 +4909,10 @@ spec:
                                     header field must be set.
                                   rule: 'self.type == ''Header'' ? has(self.header)
                                     : !has(self.header)'
+                                - message: If consistent hash type is headers, the
+                                    headers field must be set.
+                                  rule: 'self.type == ''Headers'' ? has(self.headers)
+                                    : !has(self.headers)'
                                 - message: If consistent hash type is cookie, the
                                     cookie field must be set.
                                   rule: 'self.type == ''Cookie'' ? has(self.cookie)
diff --git a/internal/gatewayapi/backendtrafficpolicy.go b/internal/gatewayapi/backendtrafficpolicy.go
index 7e514b76a..dbd54f4d9 100644
--- a/internal/gatewayapi/backendtrafficpolicy.go
+++ b/internal/gatewayapi/backendtrafficpolicy.go
@@ -1138,11 +1138,11 @@ func buildResponseOverride(policy *egv1a1.BackendTrafficPolicy, resources *resou
 	}, nil
 }
 
-func checkResponseBodySize(b *string) error {
+func checkResponseBodySize(b []byte) error {
 	// Make this configurable in the future
 	// https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route.proto.html#max_direct_response_body_size_bytes
 	maxDirectResponseSize := 4096
-	lenB := len(*b)
+	lenB := len(b)
 	if lenB > maxDirectResponseSize {
 		return fmt.Errorf("response.body size %d greater than the max size %d", lenB, maxDirectResponseSize)
 	}
@@ -1150,38 +1150,45 @@ func checkResponseBodySize(b *string) error {
 	return nil
 }
 
-func getCustomResponseBody(body *egv1a1.CustomResponseBody, resources *resource.Resources, policyNs string) (*string, error) {
+func getCustomResponseBody(body *egv1a1.CustomResponseBody, resources *resource.Resources, policyNs string) ([]byte, error) {
 	if body != nil && body.Type != nil && *body.Type == egv1a1.ResponseValueTypeValueRef {
 		cm := resources.GetConfigMap(policyNs, string(body.ValueRef.Name))
 		if cm != nil {
 			b, dataOk := cm.Data["response.body"]
 			switch {
 			case dataOk:
-				if err := checkResponseBodySize(&b); err != nil {
+				body := []byte(b)
+				if err := checkResponseBodySize(body); err != nil {
 					return nil, err
 				}
-				return &b, nil
+				return body, nil
 			case len(cm.Data) > 0: // Fallback to the first key if response.body is not found
 				for _, value := range cm.Data {
-					b = value
-					break
+					body := []byte(value)
+					if err := checkResponseBodySize(body); err != nil {
+						return nil, err
+					}
+					return body, nil
 				}
-				if err := checkResponseBodySize(&b); err != nil {
-					return nil, err
+			case len(cm.BinaryData) > 0:
+				for _, binData := range cm.BinaryData {
+					if err := checkResponseBodySize(binData); err != nil {
+						return nil, err
+					}
+					return binData, nil
 				}
-				return &b, nil
 			default:
 				return nil, fmt.Errorf("can't find the key response.body in the referenced configmap %s", body.ValueRef.Name)
 			}
-
 		} else {
 			return nil, fmt.Errorf("can't find the referenced configmap %s", body.ValueRef.Name)
 		}
 	} else if body != nil && body.Inline != nil {
-		if err := checkResponseBodySize(body.Inline); err != nil {
+		inlineValue := []byte(*body.Inline)
+		if err := checkResponseBodySize(inlineValue); err != nil {
 			return nil, err
 		}
-		return body.Inline, nil
+		return inlineValue, nil
 	}
 
 	return nil, nil
diff --git a/internal/gatewayapi/clustersettings.go b/internal/gatewayapi/clustersettings.go
index 409acd787..aa5acf183 100644
--- a/internal/gatewayapi/clustersettings.go
+++ b/internal/gatewayapi/clustersettings.go
@@ -359,9 +359,19 @@ func buildConsistentHashLoadBalancer(policy egv1a1.LoadBalancer) (*ir.Consistent
 	case egv1a1.SourceIPConsistentHashType:
 		consistentHash.SourceIP = ptr.To(true)
 	case egv1a1.HeaderConsistentHashType:
-		consistentHash.Header = &ir.Header{
-			Name: policy.ConsistentHash.Header.Name,
-		}
+		consistentHash.Headers = []*egv1a1.Header{
+			{
+				Name: policy.ConsistentHash.Header.Name,
+			},
+		}
+	case egv1a1.HeadersConsistentHashType:
+		headers := make([]*egv1a1.Header, 0, len(policy.ConsistentHash.Headers))
+		for _, h := range policy.ConsistentHash.Headers {
+			headers = append(headers, &egv1a1.Header{
+				Name: h.Name,
+			})
+		}
+		consistentHash.Headers = headers
 	case egv1a1.CookieConsistentHashType:
 		consistentHash.Cookie = policy.ConsistentHash.Cookie
 	}
diff --git a/internal/ir/xds.go b/internal/ir/xds.go
index 0f34c3f17..571b6bf6d 100644
--- a/internal/ir/xds.go
+++ b/internal/ir/xds.go
@@ -625,7 +625,7 @@ type CustomResponse struct {
 	ContentType *string `json:"contentType,omitempty"`
 
 	// Body of the Custom Response
-	Body *string `json:"body,omitempty"`
+	Body []byte `json:"body,omitempty"`
 
 	// StatusCode will be used for the response's status code.
 	StatusCode *uint32 `json:"statusCode,omitempty"`
@@ -2592,15 +2592,10 @@ type Random struct{}
 // +k8s:deepcopy-gen=true
 type ConsistentHash struct {
 	// Hash based on the Source IP Address
-	SourceIP  *bool          `json:"sourceIP,omitempty" yaml:"sourceIP,omitempty"`
-	Header    *Header        `json:"header,omitempty" yaml:"header,omitempty"`
-	Cookie    *egv1a1.Cookie `json:"cookie,omitempty" yaml:"cookie,omitempty"`
-	TableSize *uint64        `json:"tableSize,omitempty" yaml:"tableSize,omitempty"`
-}
-
-// Header consistent hash type settings
-type Header struct {
-	Name string `json:"name" yaml:"name"`
+	SourceIP  *bool            `json:"sourceIP,omitempty" yaml:"sourceIP,omitempty"`
+	Headers   []*egv1a1.Header `json:"headers,omitempty" yaml:"headers,omitempty"`
+	Cookie    *egv1a1.Cookie   `json:"cookie,omitempty" yaml:"cookie,omitempty"`
+	TableSize *uint64          `json:"tableSize,omitempty" yaml:"tableSize,omitempty"`
 }
 
 type ProxyProtocolVersion string
diff --git a/internal/ir/zz_generated.deepcopy.go b/internal/ir/zz_generated.deepcopy.go
index dd166963f..fc1d97bbd 100644
--- a/internal/ir/zz_generated.deepcopy.go
+++ b/internal/ir/zz_generated.deepcopy.go
@@ -661,10 +661,16 @@ func (in *ConsistentHash) DeepCopyInto(out *ConsistentHash) {
 		*out = new(bool)
 		**out = **in
 	}
-	if in.Header != nil {
-		in, out := &in.Header, &out.Header
-		*out = new(Header)
-		**out = **in
+	if in.Headers != nil {
+		in, out := &in.Headers, &out.Headers
+		*out = make([]*v1alpha1.Header, len(*in))
+		for i := range *in {
+			if (*in)[i] != nil {
+				in, out := &(*in)[i], &(*out)[i]
+				*out = new(v1alpha1.Header)
+				**out = **in
+			}
+		}
 	}
 	if in.Cookie != nil {
 		in, out := &in.Cookie, &out.Cookie
@@ -784,8 +790,8 @@ func (in *CustomResponse) DeepCopyInto(out *CustomResponse) {
 	}
 	if in.Body != nil {
 		in, out := &in.Body, &out.Body
-		*out = new(string)
-		**out = **in
+		*out = make([]byte, len(*in))
+		copy(*out, *in)
 	}
 	if in.StatusCode != nil {
 		in, out := &in.StatusCode, &out.StatusCode
diff --git a/internal/xds/translator/custom_response.go b/internal/xds/translator/custom_response.go
index 2d6eedaaf..64a4c2fd7 100644
--- a/internal/xds/translator/custom_response.go
+++ b/internal/xds/translator/custom_response.go
@@ -422,10 +422,10 @@ func (c *customResponse) buildRedirectAction(r ir.ResponseOverrideRule) (*anypb.
 func (c *customResponse) buildResponseAction(r ir.ResponseOverrideRule) (*anypb.Any, error) {
 	response := &policyv3.LocalResponsePolicy{}
 
-	if r.Response.Body != nil && *r.Response.Body != "" {
+	if len(r.Response.Body) > 0 {
 		response.BodyFormat = &corev3.SubstitutionFormatString{
 			Format: &corev3.SubstitutionFormatString_TextFormat{
-				TextFormat: *r.Response.Body,
+				TextFormat: string(r.Response.Body),
 			},
 		}
 	}
diff --git a/internal/xds/translator/route.go b/internal/xds/translator/route.go
index 6100369fd..c23d59c96 100644
--- a/internal/xds/translator/route.go
+++ b/internal/xds/translator/route.go
@@ -524,10 +524,10 @@ func buildXdsDirectResponseAction(res *ir.CustomResponse) *routev3.DirectRespons
 		routeAction.Status = *res.StatusCode
 	}
 
-	if res.Body != nil && *res.Body != "" {
+	if len(res.Body) > 0 {
 		routeAction.Body = &corev3.DataSource{
-			Specifier: &corev3.DataSource_InlineString{
-				InlineString: *res.Body,
+			Specifier: &corev3.DataSource_InlineBytes{
+				InlineBytes: res.Body,
 			},
 		}
 	}
@@ -620,15 +620,19 @@ func buildHashPolicy(httpRoute *ir.HTTPRoute) []*routev3.RouteAction_HashPolicy
 	ch := httpRoute.Traffic.LoadBalancer.ConsistentHash
 
 	switch {
-	case ch.Header != nil:
-		hashPolicy := &routev3.RouteAction_HashPolicy{
-			PolicySpecifier: &routev3.RouteAction_HashPolicy_Header_{
-				Header: &routev3.RouteAction_HashPolicy_Header{
-					HeaderName: ch.Header.Name,
+	case ch.Headers != nil:
+		hps := make([]*routev3.RouteAction_HashPolicy, 0, len(ch.Headers))
+		for _, h := range ch.Headers {
+			hp := &routev3.RouteAction_HashPolicy{
+				PolicySpecifier: &routev3.RouteAction_HashPolicy_Header_{
+					Header: &routev3.RouteAction_HashPolicy_Header{
+						HeaderName: h.Name,
+					},
 				},
-			},
+			}
+			hps = append(hps, hp)
 		}
-		return []*routev3.RouteAction_HashPolicy{hashPolicy}
+		return hps
 	case ch.Cookie != nil:
 		hashPolicy := &routev3.RouteAction_HashPolicy{
 			PolicySpecifier: &routev3.RouteAction_HashPolicy_Cookie_{
diff --git a/release-notes/current.yaml b/release-notes/current.yaml
index 38e69f22a..c9245da64 100644
--- a/release-notes/current.yaml
+++ b/release-notes/current.yaml
@@ -24,6 +24,7 @@ new features: |
   Added support for OCSP stapling in the listener TLS certificates.
   Added support for returning 503 responses when no valid backend endpoints exist.
   Added support for CSRFTokenTTL in OIDC authn to configure the lifetime of the CSRF token used during the OAuth2 authorization code flow.
+  Added support for binaryData in ConfigMap referenced by HTTPRouteFilter for direct response.
 
 
 bug fixes: |



Test patch:
diff --git a/internal/gatewayapi/testdata/backendtrafficpolicy-with-response-override.out.yaml b/internal/gatewayapi/testdata/backendtrafficpolicy-with-response-override.out.yaml
index ce3cafb9e..7de0e69d3 100644
--- a/internal/gatewayapi/testdata/backendtrafficpolicy-with-response-override.out.yaml
+++ b/internal/gatewayapi/testdata/backendtrafficpolicy-with-response-override.out.yaml
@@ -524,7 +524,7 @@ xdsIR:
                   name: X-Set-Header
                   value:
                   - set-404
-                body: gateway-1 Not Found
+                body: Z2F0ZXdheS0xIE5vdCBGb3VuZA==
                 contentType: text/plain
             - match:
                 statusCodes:
@@ -534,10 +534,7 @@ xdsIR:
                     start: 501
               name: backendtrafficpolicy/default/policy-for-gateway/responseoverride/rule/1
               response:
-                body: |
-                  {
-                    "error": "Internal Server Error"
-                  }
+                body: ewogICJlcnJvciI6ICJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IiCn0K
                 contentType: application/json
     readyListener:
       address: 0.0.0.0
@@ -622,7 +619,7 @@ xdsIR:
                 - value: 404
               name: backendtrafficpolicy/default/policy-for-route-1/responseoverride/rule/0
               response:
-                body: httproute-1 Not Found
+                body: aHR0cHJvdXRlLTEgTm90IEZvdW5k
                 contentType: text/plain
             - match:
                 statusCodes:
@@ -632,10 +629,7 @@ xdsIR:
                     start: 501
               name: backendtrafficpolicy/default/policy-for-route-1/responseoverride/rule/1
               response:
-                body: |
-                  {
-                    "error": "Internal Server Error"
-                  }
+                body: ewogICJlcnJvciI6ICJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IiCn0K
                 contentType: application/json
       - destination:
           metadata:
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-with-traffic-features.out.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-with-traffic-features.out.yaml
index ccd0362fa..6ad70fea7 100644
--- a/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-with-traffic-features.out.yaml
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-extproc-with-traffic-features.out.yaml
@@ -445,8 +445,8 @@ xdsIR:
                 resetStreamOnError: true
               loadBalancer:
                 consistentHash:
-                  header:
-                    name: X-some-header
+                  headers:
+                  - name: X-some-header
               proxyProtocol:
                 version: V2
               tcpKeepalive:
diff --git a/internal/gatewayapi/testdata/envoyproxy-accesslog-with-traffic.out.yaml b/internal/gatewayapi/testdata/envoyproxy-accesslog-with-traffic.out.yaml
index 031906568..85dd67172 100644
--- a/internal/gatewayapi/testdata/envoyproxy-accesslog-with-traffic.out.yaml
+++ b/internal/gatewayapi/testdata/envoyproxy-accesslog-with-traffic.out.yaml
@@ -256,8 +256,8 @@ xdsIR:
             resetStreamOnError: true
           loadBalancer:
             consistentHash:
-              header:
-                name: X-some-header
+              headers:
+              - name: X-some-header
           proxyProtocol:
             version: V2
           tcpKeepalive:
@@ -324,8 +324,8 @@ xdsIR:
             resetStreamOnError: true
           loadBalancer:
             consistentHash:
-              header:
-                name: X-some-header
+              headers:
+              - name: X-some-header
           proxyProtocol:
             version: V2
           tcpKeepalive:
diff --git a/internal/gatewayapi/testdata/envoyproxy-tracing-backend-uds.out.yaml b/internal/gatewayapi/testdata/envoyproxy-tracing-backend-uds.out.yaml
index 4ac237e6d..a5f15e740 100644
--- a/internal/gatewayapi/testdata/envoyproxy-tracing-backend-uds.out.yaml
+++ b/internal/gatewayapi/testdata/envoyproxy-tracing-backend-uds.out.yaml
@@ -288,8 +288,8 @@ xdsIR:
           resetStreamOnError: true
         loadBalancer:
           consistentHash:
-            header:
-              name: X-some-header
+            headers:
+            - name: X-some-header
         proxyProtocol:
           version: V2
         tcpKeepalive:
diff --git a/internal/gatewayapi/testdata/envoyproxy-tracing-backend.out.yaml b/internal/gatewayapi/testdata/envoyproxy-tracing-backend.out.yaml
index df1e5a3cc..415138f03 100644
--- a/internal/gatewayapi/testdata/envoyproxy-tracing-backend.out.yaml
+++ b/internal/gatewayapi/testdata/envoyproxy-tracing-backend.out.yaml
@@ -265,8 +265,8 @@ xdsIR:
           resetStreamOnError: true
         loadBalancer:
           consistentHash:
-            header:
-              name: X-some-header
+            headers:
+            - name: X-some-header
         proxyProtocol:
           version: V2
         tcpKeepalive:
diff --git a/internal/gatewayapi/testdata/httproute-with-direct-response.in.yaml b/internal/gatewayapi/testdata/httproute-with-direct-response.in.yaml
index 64344d2e0..f481e9286 100644
--- a/internal/gatewayapi/testdata/httproute-with-direct-response.in.yaml
+++ b/internal/gatewayapi/testdata/httproute-with-direct-response.in.yaml
@@ -88,6 +88,27 @@ httpRoutes:
           group: gateway.envoyproxy.io
           kind: HTTPRouteFilter
           name: direct-response-too-long
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    name: direct-response-binary
+    namespace: default
+  spec:
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - matches:
+      - path:
+          type: PathPrefix
+          value: /logo
+      filters:
+      - type: ExtensionRef
+        extensionRef:
+          group: gateway.envoyproxy.io
+          kind: HTTPRouteFilter
+          name: direct-response-binary-logo
 configMaps:
 - apiVersion: v1
   kind: ConfigMap
@@ -96,6 +117,13 @@ configMaps:
     namespace: default
   data:
     response.body: '{"error": "Internal Server Error"}'
+- apiVersion: v1
+  kind: ConfigMap
+  metadata:
+    name: logo-binary-data
+    namespace: default
+  binaryData:
+    logo.png: iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==
 httpFilters:
 - apiVersion: gateway.envoyproxy.io/v1alpha1
   kind: HTTPRouteFilter
@@ -156,3 +184,18 @@ httpFilters:
       body:
         type: Inline
         inline: "-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"
+- apiVersion: gateway.envoyproxy.io/v1alpha1
+  kind: HTTPRouteFilter
+  metadata:
+    name: direct-response-binary-logo
+    namespace: default
+  spec:
+    directResponse:
+      contentType: image/png
+      statusCode: 502
+      body:
+        type: ValueRef
+        valueRef:
+          group: ""
+          kind: ConfigMap
+          name: logo-binary-data
diff --git a/internal/gatewayapi/testdata/httproute-with-direct-response.out.yaml b/internal/gatewayapi/testdata/httproute-with-direct-response.out.yaml
index a14145bcb..fe51435fe 100644
--- a/internal/gatewayapi/testdata/httproute-with-direct-response.out.yaml
+++ b/internal/gatewayapi/testdata/httproute-with-direct-response.out.yaml
@@ -16,7 +16,7 @@ gateways:
       protocol: HTTP
   status:
     listeners:
-    - attachedRoutes: 3
+    - attachedRoutes: 4
       conditions:
       - lastTransitionTime: null
         message: Sending translated listener configuration to the data plane
@@ -168,6 +168,45 @@ httpRoutes:
         name: gateway-1
         namespace: envoy-gateway
         sectionName: http
+- apiVersion: gateway.networking.k8s.io/v1
+  kind: HTTPRoute
+  metadata:
+    name: direct-response-binary
+    namespace: default
+  spec:
+    parentRefs:
+    - name: gateway-1
+      namespace: envoy-gateway
+      sectionName: http
+    rules:
+    - filters:
+      - extensionRef:
+          group: gateway.envoyproxy.io
+          kind: HTTPRouteFilter
+          name: direct-response-binary-logo
+        type: ExtensionRef
+      matches:
+      - path:
+          type: PathPrefix
+          value: /logo
+  status:
+    parents:
+    - conditions:
+      - lastTransitionTime: null
+        message: Route is accepted
+        reason: Accepted
+        status: "True"
+        type: Accepted
+      - lastTransitionTime: null
+        message: Resolved all the Object references for the Route
+        reason: ResolvedRefs
+        status: "True"
+        type: ResolvedRefs
+      controllerName: gateway.envoyproxy.io/gatewayclass-controller
+      parentRef:
+        name: gateway-1
+        namespace: envoy-gateway
+        sectionName: http
 infraIR:
   envoy-gateway/gateway-1:
     proxy:
@@ -243,7 +282,7 @@ xdsIR:
           value:
           - set-502
         directResponse:
-          body: '{"error": "Internal Server Error"}'
+          body: eyJlcnJvciI6ICJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IifQ==
           statusCode: 502
         hostname: '*.envoyproxy.io'
         isHTTP2: false
@@ -262,7 +301,7 @@ xdsIR:
           value:
           - text/plain
         directResponse:
-          body: OK
+          body: T0s=
           statusCode: 200
         hostname: '*.envoyproxy.io'
         isHTTP2: false
@@ -275,6 +314,25 @@ xdsIR:
           distinct: false
           name: ""
           prefix: /inline
+      - addResponseHeaders:
+        - append: false
+          name: Content-Type
+          value:
+          - image/png
+        directResponse:
+          body: iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==
+          statusCode: 502
+        hostname: '*.envoyproxy.io'
+        isHTTP2: false
+        metadata:
+          kind: HTTPRoute
+          name: direct-response-binary
+          namespace: default
+        name: httproute/default/direct-response-binary/rule/0/match/0/*_envoyproxy_io
+        pathMatch:
+          distinct: false
+          name: ""
+          prefix: /logo
     readyListener:
       address: 0.0.0.0
       ipFamily: IPv4
diff --git a/internal/ir/xds_test.go b/internal/ir/xds_test.go
index 5ff8d08b6..378580568 100644
--- a/internal/ir/xds_test.go
+++ b/internal/ir/xds_test.go
@@ -1320,8 +1320,10 @@ func TestValidateLoadBalancer(t *testing.T) {
 			name: "consistent hash with header hash policy",
 			input: LoadBalancer{
 				ConsistentHash: &ConsistentHash{
-					Header: &Header{
-						Name: "name",
+					Headers: []*egv1a1.Header{
+						{
+							Name: "name",
+						},
 					},
 				},
 			},
diff --git a/internal/xds/translator/route_test.go b/internal/xds/translator/route_test.go
index fa895bd53..1c347755c 100644
--- a/internal/xds/translator/route_test.go
+++ b/internal/xds/translator/route_test.go
@@ -12,6 +12,7 @@ import (
 	routev3 "github.com/envoyproxy/go-control-plane/envoy/config/route/v3"
 	"k8s.io/utils/ptr"
 
+	egv1a1 "github.com/envoyproxy/gateway/api/v1alpha1"
 	"github.com/envoyproxy/gateway/internal/ir"
 )
 
@@ -79,7 +80,7 @@ func TestBuildHashPolicy(t *testing.T) {
 			name: "ConsistentHash with Header",
 			httpRoute: &ir.HTTPRoute{
 				Traffic: &ir.TrafficFeatures{
-					LoadBalancer: &ir.LoadBalancer{ConsistentHash: &ir.ConsistentHash{Header: &ir.Header{Name: "name"}}},
+					LoadBalancer: &ir.LoadBalancer{ConsistentHash: &ir.ConsistentHash{Headers: []*egv1a1.Header{{Name: "name"}}}},
 				},
 			},
 			want: []*routev3.RouteAction_HashPolicy{
@@ -92,6 +93,41 @@ func TestBuildHashPolicy(t *testing.T) {
 				},
 			},
 		},
+		{
+			name: "ConsistentHash with multiple Headers",
+			httpRoute: &ir.HTTPRoute{
+				Traffic: &ir.TrafficFeatures{
+					LoadBalancer: &ir.LoadBalancer{ConsistentHash: &ir.ConsistentHash{Headers: []*egv1a1.Header{
+						{Name: "name"},
+						{Name: "bazz"},
+						{Name: "buzz"},
+					}}},
+				},
+			},
+			want: []*routev3.RouteAction_HashPolicy{
+				{
+					PolicySpecifier: &routev3.RouteAction_HashPolicy_Header_{
+						Header: &routev3.RouteAction_HashPolicy_Header{
+							HeaderName: "name",
+						},
+					},
+				},
+				{
+					PolicySpecifier: &routev3.RouteAction_HashPolicy_Header_{
+						Header: &routev3.RouteAction_HashPolicy_Header{
+							HeaderName: "bazz",
+						},
+					},
+				},
+				{
+					PolicySpecifier: &routev3.RouteAction_HashPolicy_Header_{
+						Header: &routev3.RouteAction_HashPolicy_Header{
+							HeaderName: "buzz",
+						},
+					},
+				},
+			},
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
diff --git a/internal/xds/translator/testdata/in/xds-ir/accesslog-invalid.yaml b/internal/xds/translator/testdata/in/xds-ir/accesslog-invalid.yaml
index 7749fe3c4..28ec81179 100644
--- a/internal/xds/translator/testdata/in/xds-ir/accesslog-invalid.yaml
+++ b/internal/xds/translator/testdata/in/xds-ir/accesslog-invalid.yaml
@@ -44,5 +44,5 @@ http:
           port: 50000
         name: "direct-route-dest/backend/0"
     directResponse:
-      body: "Unknown custom filter type: UnsupportedType"
+      body: VW5rbm93biBjdXN0b20gZmlsdGVyIHR5cGU6IFVuc3VwcG9ydGVkVHlwZQ==
       statusCode: 500
diff --git a/internal/xds/translator/testdata/in/xds-ir/custom-response.yaml b/internal/xds/translator/testdata/in/xds-ir/custom-response.yaml
index b13fbd3e0..a24f5605f 100644
--- a/internal/xds/translator/testdata/in/xds-ir/custom-response.yaml
+++ b/internal/xds/translator/testdata/in/xds-ir/custom-response.yaml
@@ -49,7 +49,7 @@ http:
                       name: X-Set-Header
                       value:
                         - set-404
-                  body: gateway-1 Not Found
+                  body: Z2F0ZXdheS0xIE5vdCBGb3VuZA==
                   contentType: text/plain
               - match:
                   statusCodes:
@@ -59,10 +59,7 @@ http:
                         start: 501
                 name: backendtrafficpolicy/default/policy-for-gateway/responseoverride/rule/1
                 response:
-                  body: |
-                    {
-                      "error": "Internal Server Error"
-                    }
+                  body: ewogICJlcnJvciI6ICJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IiCn0K
                   contentType: application/json
               - match:
                   statusCodes:
diff --git a/internal/xds/translator/testdata/in/xds-ir/http-route-direct-response.yaml b/internal/xds/translator/testdata/in/xds-ir/http-route-direct-response.yaml
index 56b2f02fb..bd14eafd7 100644
--- a/internal/xds/translator/testdata/in/xds-ir/http-route-direct-response.yaml
+++ b/internal/xds/translator/testdata/in/xds-ir/http-route-direct-response.yaml
@@ -32,5 +32,5 @@ http:
           port: 50000
         name: "direct-route-dest/backend/0"
     directResponse:
-      body: "Unknown custom filter type: UnsupportedType"
+      body: VW5rbm93biBjdXN0b20gZmlsdGVyIHR5cGU6IFVuc3VwcG9ydGVkVHlwZQ==
       statusCode: 500
diff --git a/internal/xds/translator/testdata/in/xds-ir/load-balancer.yaml b/internal/xds/translator/testdata/in/xds-ir/load-balancer.yaml
index 1b4b84e77..58f30c05b 100644
--- a/internal/xds/translator/testdata/in/xds-ir/load-balancer.yaml
+++ b/internal/xds/translator/testdata/in/xds-ir/load-balancer.yaml
@@ -90,8 +90,8 @@ http:
     traffic:
       loadBalancer:
         consistentHash:
-          header:
-            name: name
+          headers:
+          - name: name
     destination:
       name: "seventh-route-dest"
       settings:
@@ -187,3 +187,18 @@ http:
         - host: "1.2.3.4"
           port: 50000
         name: "thirteen-route-dest/backend/0"
+  - name: "fourteenth-route"
+    hostname: "*"
+    traffic:
+      loadBalancer:
+        consistentHash:
+          headers:
+          - name: name
+          - name: bar
+    destination:
+      name: "fourteenth-route-dest"
+      settings:
+      - endpoints:
+        - host: "1.2.3.4"
+          port: 50000
+        name: "fourteenth-route-dest/backend/0"
diff --git a/internal/xds/translator/testdata/in/xds-ir/tracing-invalid.yaml b/internal/xds/translator/testdata/in/xds-ir/tracing-invalid.yaml
index 00329fd9c..1b1e5e603 100644
--- a/internal/xds/translator/testdata/in/xds-ir/tracing-invalid.yaml
+++ b/internal/xds/translator/testdata/in/xds-ir/tracing-invalid.yaml
@@ -40,5 +40,5 @@ http:
                   port: 50000
               name: "direct-route-dest/backend/0"
         directResponse:
-          body: "Unknown custom filter type: UnsupportedType"
+          body: VW5rbm93biBjdXN0b20gZmlsdGVyIHR5cGU6IFVuc3VwcG9ydGVkVHlwZQ==
           statusCode: 500
diff --git a/internal/xds/translator/testdata/in/xds-ir/tracing-unknown-provider-type.yaml b/internal/xds/translator/testdata/in/xds-ir/tracing-unknown-provider-type.yaml
index 5d8e2e81d..13c5df586 100644
--- a/internal/xds/translator/testdata/in/xds-ir/tracing-unknown-provider-type.yaml
+++ b/internal/xds/translator/testdata/in/xds-ir/tracing-unknown-provider-type.yaml
@@ -49,5 +49,5 @@ http:
                   port: 50000
               name: "direct-route-dest/backend/0"
         directResponse:
-          body: "Unknown custom filter type: UnsupportedType"
+          body: VW5rbm93biBjdXN0b20gZmlsdGVyIHR5cGU6IFVuc3VwcG9ydGVkVHlwZQ==
           statusCode: 500
diff --git a/internal/xds/translator/testdata/out/xds-ir/http-route-direct-response.routes.yaml b/internal/xds/translator/testdata/out/xds-ir/http-route-direct-response.routes.yaml
index f97abbfa3..718e8bdc7 100644
--- a/internal/xds/translator/testdata/out/xds-ir/http-route-direct-response.routes.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/http-route-direct-response.routes.yaml
@@ -7,7 +7,7 @@
     routes:
     - directResponse:
         body:
-          inlineString: 'Unknown custom filter type: UnsupportedType'
+          inlineBytes: VW5rbm93biBjdXN0b20gZmlsdGVyIHR5cGU6IFVuc3VwcG9ydGVkVHlwZQ==
         status: 500
       match:
         prefix: /
diff --git a/internal/xds/translator/testdata/out/xds-ir/load-balancer.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/load-balancer.clusters.yaml
index f11b34d81..c1b5f6ae9 100644
--- a/internal/xds/translator/testdata/out/xds-ir/load-balancer.clusters.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/load-balancer.clusters.yaml
@@ -321,3 +321,25 @@
   name: thirteen-route-dest
   perConnectionBufferLimitBytes: 32768
   type: EDS
+- circuitBreakers:
+    thresholds:
+    - maxRetries: 1024
+  commonLbConfig: {}
+  connectTimeout: 10s
+  dnsLookupFamily: V4_PREFERRED
+  edsClusterConfig:
+    edsConfig:
+      ads: {}
+      resourceApiVersion: V3
+    serviceName: fourteenth-route-dest
+  ignoreHealthOnHostRemoval: true
+  lbPolicy: MAGLEV
+  loadBalancingPolicy:
+    policies:
+    - typedExtensionConfig:
+        name: envoy.load_balancing_policies.maglev
+        typedConfig:
+          '@type': type.googleapis.com/envoy.extensions.load_balancing_policies.maglev.v3.Maglev
+  name: fourteenth-route-dest
+  perConnectionBufferLimitBytes: 32768
+  type: EDS
diff --git a/internal/xds/translator/testdata/out/xds-ir/load-balancer.endpoints.yaml b/internal/xds/translator/testdata/out/xds-ir/load-balancer.endpoints.yaml
index ccc67bb12..5a4034e5e 100644
--- a/internal/xds/translator/testdata/out/xds-ir/load-balancer.endpoints.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/load-balancer.endpoints.yaml
@@ -154,3 +154,15 @@
     loadBalancingWeight: 1
     locality:
       region: thirteen-route-dest/backend/0
+- clusterName: fourteenth-route-dest
+  endpoints:
+  - lbEndpoints:
+    - endpoint:
+        address:
+          socketAddress:
+            address: 1.2.3.4
+            portValue: 50000
+      loadBalancingWeight: 1
+    loadBalancingWeight: 1
+    locality:
+      region: fourteenth-route-dest/backend/0
diff --git a/internal/xds/translator/testdata/out/xds-ir/load-balancer.routes.yaml b/internal/xds/translator/testdata/out/xds-ir/load-balancer.routes.yaml
index f439041c5..2a39a6352 100644
--- a/internal/xds/translator/testdata/out/xds-ir/load-balancer.routes.yaml
+++ b/internal/xds/translator/testdata/out/xds-ir/load-balancer.routes.yaml
@@ -111,3 +111,15 @@
         cluster: thirteen-route-dest
         upgradeConfigs:
         - upgradeType: websocket
+    - match:
+        prefix: /
+      name: fourteenth-route
+      route:
+        cluster: fourteenth-route-dest
+        hashPolicy:
+        - header:
+            headerName: name
+        - header:
+            headerName: bar
+        upgradeConfigs:
+        - upgradeType: websocket
diff --git a/site/content/en/latest/api/extension_types.md b/site/content/en/latest/api/extension_types.md
index fc870f979..16fdbd57b 100644
--- a/site/content/en/latest/api/extension_types.md
+++ b/site/content/en/latest/api/extension_types.md
@@ -933,8 +933,9 @@ _Appears in:_
 
 | Field | Type | Required | Default | Description |
 | ---   | ---  | ---      | ---     | ---         |
-| `type` | _[ConsistentHashType](#consistenthashtype)_ |  true  |  | ConsistentHashType defines the type of input to hash on. Valid Type values are<br />"SourceIP",<br />"Header",<br />"Cookie". |
-| `header` | _[Header](#header)_ |  false  |  | Header configures the header hash policy when the consistent hash type is set to Header. |
+| `type` | _[ConsistentHashType](#consistenthashtype)_ |  true  |  | ConsistentHashType defines the type of input to hash on. Valid Type values are<br />"SourceIP",<br />"Header",<br />"Headers",<br />"Cookie". |
+| `header` | _[Header](#header)_ |  false  |  | Header configures the header hash policy when the consistent hash type is set to Header.<br />Deprecated: use Headers instead |
+| `headers` | _[Header](#header) array_ |  false  |  | Headers configures the header hash policy for each header, when the consistent hash type is set to Headers. |
 | `cookie` | _[Cookie](#cookie)_ |  false  |  | Cookie configures the cookie hash policy when the consistent hash type is set to Cookie. |
 | `tableSize` | _integer_ |  false  | 65537 | The table size for consistent hashing, must be prime number limited to 5000011. |
 
@@ -951,7 +952,8 @@ _Appears in:_
 | Value | Description |
 | ----- | ----------- |
 | `SourceIP` | SourceIPConsistentHashType hashes based on the source IP address.<br /> | 
-| `Header` | HeaderConsistentHashType hashes based on a request header.<br /> | 
+| `Header` | HeaderConsistentHashType hashes based on a request header.<br />Deprecated: use HeadersConsistentHashType instead<br /> | 
+| `Headers` | HeadersConsistentHashType hashes based on multiple request headers.<br /> | 
 | `Cookie` | CookieConsistentHashType hashes based on a cookie.<br /> | 
 
 
diff --git a/test/e2e/testdata/load_balancing_consistent_hash_multi_header.yaml b/test/e2e/testdata/load_balancing_consistent_hash_multi_header.yaml
new file mode 100644
index 000000000..62ff4f5df
--- /dev/null
+++ b/test/e2e/testdata/load_balancing_consistent_hash_multi_header.yaml
@@ -0,0 +1,83 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: lb-backend-header
+  namespace: gateway-conformance-infra
+spec:
+  selector:
+    app: lb-backend-header
+  ports:
+    - protocol: TCP
+      port: 8080
+      targetPort: 3000
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: lb-backend-header
+  namespace: gateway-conformance-infra
+  labels:
+    app: lb-backend-header
+spec:
+  replicas: 4
+  selector:
+    matchLabels:
+      app: lb-backend-header
+  template:
+    metadata:
+      labels:
+        app: lb-backend-header
+    spec:
+      containers:
+        - name: backend
+          image: gcr.io/k8s-staging-gateway-api/echo-basic:v20231214-v1.0.0-140-gf544a46e
+          imagePullPolicy: IfNotPresent
+          env:
+            - name: POD_NAME
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.name
+            - name: NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+            - name: SERVICE_NAME
+              value: lb-backend-header
+          resources:
+            requests:
+              cpu: 10m
+---
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: BackendTrafficPolicy
+metadata:
+  name: header-lb-policy
+  namespace: gateway-conformance-infra
+spec:
+  targetRefs:
+    - group: gateway.networking.k8s.io
+      kind: HTTPRoute
+      name: header-lb-route
+  loadBalancer:
+    type: ConsistentHash
+    consistentHash:
+      type: Headers
+      headers:
+        - name: "Lb-Test-1"
+        - name: "Lb-Test-2"
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: header-lb-route
+  namespace: gateway-conformance-infra
+spec:
+  parentRefs:
+    - name: same-namespace
+  rules:
+    - matches:
+        - path:
+            type: PathPrefix
+            value: /header
+      backendRefs:
+        - name: lb-backend-header
+          port: 8080
diff --git a/test/e2e/tests/load_balancing.go b/test/e2e/tests/load_balancing.go
index 9223aae3b..2e9bc7a84 100644
--- a/test/e2e/tests/load_balancing.go
+++ b/test/e2e/tests/load_balancing.go
@@ -43,6 +43,7 @@ func init() {
 		ConsistentHashHeaderLoadBalancingTest,
 		ConsistentHashCookieLoadBalancingTest,
 		EndpointOverrideLoadBalancingTest,
+		MultiHeaderConsistentHashHeaderLoadBalancingTest,
 	)
 }
 
@@ -240,6 +241,69 @@ var ConsistentHashHeaderLoadBalancingTest = suite.ConformanceTest{
 	},
 }
 
+var MultiHeaderConsistentHashHeaderLoadBalancingTest = suite.ConformanceTest{
+	ShortName:   "MultiHeaderBasedConsistentHashLoadBalancing",
+	Description: "Test for multiple header based consistent hash load balancing type",
+	Manifests:   []string{"testdata/load_balancing_consistent_hash_multi_header.yaml"},
+	Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
+		const sendRequests = 10
+
+		ns := "gateway-conformance-infra"
+		routeNN := types.NamespacedName{Name: "header-lb-route", Namespace: ns}
+		gwNN := types.NamespacedName{Name: "same-namespace", Namespace: ns}
+
+		ancestorRef := gwapiv1.ParentReference{
+			Group:     gatewayapi.GroupPtr(gwapiv1.GroupName),
+			Kind:      gatewayapi.KindPtr(resource.KindGateway),
+			Namespace: gatewayapi.NamespacePtr(gwNN.Namespace),
+			Name:      gwapiv1.ObjectName(gwNN.Name),
+		}
+		BackendTrafficPolicyMustBeAccepted(t, suite.Client, types.NamespacedName{Name: "header-lb-policy", Namespace: ns}, suite.ControllerName, ancestorRef)
+		WaitForPods(t, suite.Client, ns, map[string]string{"app": "lb-backend-header"}, corev1.PodRunning, &PodReady)
+
+		gwAddr := kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN), routeNN)
+
+		expectedResponse := http.ExpectedResponse{
+			Request: http.Request{
+				Path: "/header",
+			},
+			Response: http.Response{
+				StatusCode: 200,
+			},
+			Namespace: ns,
+		}
+
+		// Test with different combinations of multiple headers
+		headerCombinations := []struct {
+			name    string
+			header1 string
+			header2 string
+		}{
+			{"combo1", "value-a", "value-b"},
+			{"combo2", "value-x", "value-y"},
+			{"combo3", "test1", "test2"},
+			{"combo4", "foo", "bar"},
+			{"combo5", "alpha", "beta"},
+		}
+
+		for _, combo := range headerCombinations {
+			t.Run(combo.name, func(t *testing.T) {
+				req := http.MakeRequest(t, &expectedResponse, gwAddr, "HTTP", "http")
+				// Set both headers for the consistent hash
+				req.Headers["Lb-Test-1"] = []string{combo.header1}
+				req.Headers["Lb-Test-2"] = []string{combo.header2}
+
+				got := runTrafficTest(t, suite, &req, &expectedResponse, sendRequests, func(trafficMap map[string]int) bool {
+					// All traffic with the same header combination should route to the same pod
+					return len(trafficMap) == 1
+				})
+				require.True(t, got, "Expected all requests with headers %s=%s, %s=%s to route to the same pod",
+					"Lb-Test-1", combo.header1, "Lb-Test-2", combo.header2)
+			})
+		}
+	},
+}
+
 var ConsistentHashCookieLoadBalancingTest = suite.ConformanceTest{
 	ShortName:   "CookieBasedConsistentHashLoadBalancing",
 	Description: "Test for cookie based consistent hash load balancing type",
diff --git a/test/helm/gateway-crds-helm/all.out.yaml b/test/helm/gateway-crds-helm/all.out.yaml
index 4fc7a9a93..b4627d79f 100644
--- a/test/helm/gateway-crds-helm/all.out.yaml
+++ b/test/helm/gateway-crds-helm/all.out.yaml
@@ -21676,8 +21676,10 @@ spec:
                         - name
                         type: object
                       header:
-                        description: Header configures the header hash policy when
-                          the consistent hash type is set to Header.
+                        description: |-
+                          Header configures the header hash policy when the consistent hash type is set to Header.
+
+                          Deprecated: use Headers instead
                         properties:
                           name:
                             description: Name of the header to hash.
@@ -21685,6 +21687,21 @@ spec:
                         required:
                         - name
                         type: object
+                      headers:
+                        description: Headers configures the header hash policy for
+                          each header, when the consistent hash type is set to Headers.
+                        items:
+                          description: |-
+                            Header defines the header hashing configuration for consistent hash based
+                            load balancing.
+                          properties:
+                            name:
+                              description: Name of the header to hash.
+                              type: string
+                          required:
+                          - name
+                          type: object
+                        type: array
                       tableSize:
                         default: 65537
                         description: The table size for consistent hashing, must be
@@ -21698,10 +21715,12 @@ spec:
                           ConsistentHashType defines the type of input to hash on. Valid Type values are
                           "SourceIP",
                           "Header",
+                          "Headers",
                           "Cookie".
                         enum:
                         - SourceIP
                         - Header
+                        - Headers
                         - Cookie
                         type: string
                     required:
@@ -21711,6 +21730,9 @@ spec:
                     - message: If consistent hash type is header, the header field
                         must be set.
                       rule: 'self.type == ''Header'' ? has(self.header) : !has(self.header)'
+                    - message: If consistent hash type is headers, the headers field
+                        must be set.
+                      rule: 'self.type == ''Headers'' ? has(self.headers) : !has(self.headers)'
                     - message: If consistent hash type is cookie, the cookie field
                         must be set.
                       rule: 'self.type == ''Cookie'' ? has(self.cookie) : !has(self.cookie)'
@@ -26009,8 +26031,10 @@ spec:
                                   - name
                                   type: object
                                 header:
-                                  description: Header configures the header hash policy
-                                    when the consistent hash type is set to Header.
+                                  description: |-
+                                    Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                    Deprecated: use Headers instead
                                   properties:
                                     name:
                                       description: Name of the header to hash.
@@ -26018,6 +26042,22 @@ spec:
                                   required:
                                   - name
                                   type: object
+                                headers:
+                                  description: Headers configures the header hash
+                                    policy for each header, when the consistent hash
+                                    type is set to Headers.
+                                  items:
+                                    description: |-
+                                      Header defines the header hashing configuration for consistent hash based
+                                      load balancing.
+                                    properties:
+                                      name:
+                                        description: Name of the header to hash.
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
                                 tableSize:
                                   default: 65537
                                   description: The table size for consistent hashing,
@@ -26031,10 +26071,12 @@ spec:
                                     ConsistentHashType defines the type of input to hash on. Valid Type values are
                                     "SourceIP",
                                     "Header",
+                                    "Headers",
                                     "Cookie".
                                   enum:
                                   - SourceIP
                                   - Header
+                                  - Headers
                                   - Cookie
                                   type: string
                               required:
@@ -26045,6 +26087,10 @@ spec:
                                   field must be set.
                                 rule: 'self.type == ''Header'' ? has(self.header)
                                   : !has(self.header)'
+                              - message: If consistent hash type is headers, the headers
+                                  field must be set.
+                                rule: 'self.type == ''Headers'' ? has(self.headers)
+                                  : !has(self.headers)'
                               - message: If consistent hash type is cookie, the cookie
                                   field must be set.
                                 rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -39541,10 +39587,10 @@ spec:
                                                     - name
                                                     type: object
                                                   header:
-                                                    description: Header configures
-                                                      the header hash policy when
-                                                      the consistent hash type is
-                                                      set to Header.
+                                                    description: |-
+                                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                                      Deprecated: use Headers instead
                                                     properties:
                                                       name:
                                                         description: Name of the header
@@ -39553,6 +39599,24 @@ spec:
                                                     required:
                                                     - name
                                                     type: object
+                                                  headers:
+                                                    description: Headers configures
+                                                      the header hash policy for each
+                                                      header, when the consistent
+                                                      hash type is set to Headers.
+                                                    items:
+                                                      description: |-
+                                                        Header defines the header hashing configuration for consistent hash based
+                                                        load balancing.
+                                                      properties:
+                                                        name:
+                                                          description: Name of the
+                                                            header to hash.
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      type: object
+                                                    type: array
                                                   tableSize:
                                                     default: 65537
                                                     description: The table size for
@@ -39567,10 +39631,12 @@ spec:
                                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                                       "SourceIP",
                                                       "Header",
+                                                      "Headers",
                                                       "Cookie".
                                                     enum:
                                                     - SourceIP
                                                     - Header
+                                                    - Headers
                                                     - Cookie
                                                     type: string
                                                 required:
@@ -39582,6 +39648,11 @@ spec:
                                                     be set.
                                                   rule: 'self.type == ''Header'' ?
                                                     has(self.header) : !has(self.header)'
+                                                - message: If consistent hash type
+                                                    is headers, the headers field
+                                                    must be set.
+                                                  rule: 'self.type == ''Headers''
+                                                    ? has(self.headers) : !has(self.headers)'
                                                 - message: If consistent hash type
                                                     is cookie, the cookie field must
                                                     be set.
@@ -40671,10 +40742,10 @@ spec:
                                                     - name
                                                     type: object
                                                   header:
-                                                    description: Header configures
-                                                      the header hash policy when
-                                                      the consistent hash type is
-                                                      set to Header.
+                                                    description: |-
+                                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                                      Deprecated: use Headers instead
                                                     properties:
                                                       name:
                                                         description: Name of the header
@@ -40683,6 +40754,24 @@ spec:
                                                     required:
                                                     - name
                                                     type: object
+                                                  headers:
+                                                    description: Headers configures
+                                                      the header hash policy for each
+                                                      header, when the consistent
+                                                      hash type is set to Headers.
+                                                    items:
+                                                      description: |-
+                                                        Header defines the header hashing configuration for consistent hash based
+                                                        load balancing.
+                                                      properties:
+                                                        name:
+                                                          description: Name of the
+                                                            header to hash.
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      type: object
+                                                    type: array
                                                   tableSize:
                                                     default: 65537
                                                     description: The table size for
@@ -40697,10 +40786,12 @@ spec:
                                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                                       "SourceIP",
                                                       "Header",
+                                                      "Headers",
                                                       "Cookie".
                                                     enum:
                                                     - SourceIP
                                                     - Header
+                                                    - Headers
                                                     - Cookie
                                                     type: string
                                                 required:
@@ -40712,6 +40803,11 @@ spec:
                                                     be set.
                                                   rule: 'self.type == ''Header'' ?
                                                     has(self.header) : !has(self.header)'
+                                                - message: If consistent hash type
+                                                    is headers, the headers field
+                                                    must be set.
+                                                  rule: 'self.type == ''Headers''
+                                                    ? has(self.headers) : !has(self.headers)'
                                                 - message: If consistent hash type
                                                     is cookie, the cookie field must
                                                     be set.
@@ -41893,9 +41989,10 @@ spec:
                                               - name
                                               type: object
                                             header:
-                                              description: Header configures the header
-                                                hash policy when the consistent hash
-                                                type is set to Header.
+                                              description: |-
+                                                Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                                Deprecated: use Headers instead
                                               properties:
                                                 name:
                                                   description: Name of the header
@@ -41904,6 +42001,24 @@ spec:
                                               required:
                                               - name
                                               type: object
+                                            headers:
+                                              description: Headers configures the
+                                                header hash policy for each header,
+                                                when the consistent hash type is set
+                                                to Headers.
+                                              items:
+                                                description: |-
+                                                  Header defines the header hashing configuration for consistent hash based
+                                                  load balancing.
+                                                properties:
+                                                  name:
+                                                    description: Name of the header
+                                                      to hash.
+                                                    type: string
+                                                required:
+                                                - name
+                                                type: object
+                                              type: array
                                             tableSize:
                                               default: 65537
                                               description: The table size for consistent
@@ -41918,10 +42033,12 @@ spec:
                                                 ConsistentHashType defines the type of input to hash on. Valid Type values are
                                                 "SourceIP",
                                                 "Header",
+                                                "Headers",
                                                 "Cookie".
                                               enum:
                                               - SourceIP
                                               - Header
+                                              - Headers
                                               - Cookie
                                               type: string
                                           required:
@@ -41932,6 +42049,10 @@ spec:
                                               the header field must be set.
                                             rule: 'self.type == ''Header'' ? has(self.header)
                                               : !has(self.header)'
+                                          - message: If consistent hash type is headers,
+                                              the headers field must be set.
+                                            rule: 'self.type == ''Headers'' ? has(self.headers)
+                                              : !has(self.headers)'
                                           - message: If consistent hash type is cookie,
                                               the cookie field must be set.
                                             rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -43026,9 +43147,10 @@ spec:
                                         - name
                                         type: object
                                       header:
-                                        description: Header configures the header
-                                          hash policy when the consistent hash type
-                                          is set to Header.
+                                        description: |-
+                                          Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                          Deprecated: use Headers instead
                                         properties:
                                           name:
                                             description: Name of the header to hash.
@@ -43036,6 +43158,22 @@ spec:
                                         required:
                                         - name
                                         type: object
+                                      headers:
+                                        description: Headers configures the header
+                                          hash policy for each header, when the consistent
+                                          hash type is set to Headers.
+                                        items:
+                                          description: |-
+                                            Header defines the header hashing configuration for consistent hash based
+                                            load balancing.
+                                          properties:
+                                            name:
+                                              description: Name of the header to hash.
+                                              type: string
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
                                       tableSize:
                                         default: 65537
                                         description: The table size for consistent
@@ -43050,10 +43188,12 @@ spec:
                                           ConsistentHashType defines the type of input to hash on. Valid Type values are
                                           "SourceIP",
                                           "Header",
+                                          "Headers",
                                           "Cookie".
                                         enum:
                                         - SourceIP
                                         - Header
+                                        - Headers
                                         - Cookie
                                         type: string
                                     required:
@@ -43064,6 +43204,10 @@ spec:
                                         the header field must be set.
                                       rule: 'self.type == ''Header'' ? has(self.header)
                                         : !has(self.header)'
+                                    - message: If consistent hash type is headers,
+                                        the headers field must be set.
+                                      rule: 'self.type == ''Headers'' ? has(self.headers)
+                                        : !has(self.headers)'
                                     - message: If consistent hash type is cookie,
                                         the cookie field must be set.
                                       rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -45134,9 +45278,10 @@ spec:
                                     - name
                                     type: object
                                   header:
-                                    description: Header configures the header hash
-                                      policy when the consistent hash type is set
-                                      to Header.
+                                    description: |-
+                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                      Deprecated: use Headers instead
                                     properties:
                                       name:
                                         description: Name of the header to hash.
@@ -45144,6 +45289,22 @@ spec:
                                     required:
                                     - name
                                     type: object
+                                  headers:
+                                    description: Headers configures the header hash
+                                      policy for each header, when the consistent
+                                      hash type is set to Headers.
+                                    items:
+                                      description: |-
+                                        Header defines the header hashing configuration for consistent hash based
+                                        load balancing.
+                                      properties:
+                                        name:
+                                          description: Name of the header to hash.
+                                          type: string
+                                      required:
+                                      - name
+                                      type: object
+                                    type: array
                                   tableSize:
                                     default: 65537
                                     description: The table size for consistent hashing,
@@ -45157,10 +45318,12 @@ spec:
                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                       "SourceIP",
                                       "Header",
+                                      "Headers",
                                       "Cookie".
                                     enum:
                                     - SourceIP
                                     - Header
+                                    - Headers
                                     - Cookie
                                     type: string
                                 required:
@@ -45171,6 +45334,10 @@ spec:
                                     header field must be set.
                                   rule: 'self.type == ''Header'' ? has(self.header)
                                     : !has(self.header)'
+                                - message: If consistent hash type is headers, the
+                                    headers field must be set.
+                                  rule: 'self.type == ''Headers'' ? has(self.headers)
+                                    : !has(self.headers)'
                                 - message: If consistent hash type is cookie, the
                                     cookie field must be set.
                                   rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -46158,9 +46325,10 @@ spec:
                                     - name
                                     type: object
                                   header:
-                                    description: Header configures the header hash
-                                      policy when the consistent hash type is set
-                                      to Header.
+                                    description: |-
+                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                      Deprecated: use Headers instead
                                     properties:
                                       name:
                                         description: Name of the header to hash.
@@ -46168,6 +46336,22 @@ spec:
                                     required:
                                     - name
                                     type: object
+                                  headers:
+                                    description: Headers configures the header hash
+                                      policy for each header, when the consistent
+                                      hash type is set to Headers.
+                                    items:
+                                      description: |-
+                                        Header defines the header hashing configuration for consistent hash based
+                                        load balancing.
+                                      properties:
+                                        name:
+                                          description: Name of the header to hash.
+                                          type: string
+                                      required:
+                                      - name
+                                      type: object
+                                    type: array
                                   tableSize:
                                     default: 65537
                                     description: The table size for consistent hashing,
@@ -46181,10 +46365,12 @@ spec:
                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                       "SourceIP",
                                       "Header",
+                                      "Headers",
                                       "Cookie".
                                     enum:
                                     - SourceIP
                                     - Header
+                                    - Headers
                                     - Cookie
                                     type: string
                                 required:
@@ -46195,6 +46381,10 @@ spec:
                                     header field must be set.
                                   rule: 'self.type == ''Header'' ? has(self.header)
                                     : !has(self.header)'
+                                - message: If consistent hash type is headers, the
+                                    headers field must be set.
+                                  rule: 'self.type == ''Headers'' ? has(self.headers)
+                                    : !has(self.headers)'
                                 - message: If consistent hash type is cookie, the
                                     cookie field must be set.
                                   rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -47393,9 +47583,10 @@ spec:
                                           - name
                                           type: object
                                         header:
-                                          description: Header configures the header
-                                            hash policy when the consistent hash type
-                                            is set to Header.
+                                          description: |-
+                                            Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                            Deprecated: use Headers instead
                                           properties:
                                             name:
                                               description: Name of the header to hash.
@@ -47403,6 +47594,23 @@ spec:
                                           required:
                                           - name
                                           type: object
+                                        headers:
+                                          description: Headers configures the header
+                                            hash policy for each header, when the
+                                            consistent hash type is set to Headers.
+                                          items:
+                                            description: |-
+                                              Header defines the header hashing configuration for consistent hash based
+                                              load balancing.
+                                            properties:
+                                              name:
+                                                description: Name of the header to
+                                                  hash.
+                                                type: string
+                                            required:
+                                            - name
+                                            type: object
+                                          type: array
                                         tableSize:
                                           default: 65537
                                           description: The table size for consistent
@@ -47417,10 +47625,12 @@ spec:
                                             ConsistentHashType defines the type of input to hash on. Valid Type values are
                                             "SourceIP",
                                             "Header",
+                                            "Headers",
                                             "Cookie".
                                           enum:
                                           - SourceIP
                                           - Header
+                                          - Headers
                                           - Cookie
                                           type: string
                                       required:
@@ -47431,6 +47641,10 @@ spec:
                                           the header field must be set.
                                         rule: 'self.type == ''Header'' ? has(self.header)
                                           : !has(self.header)'
+                                      - message: If consistent hash type is headers,
+                                          the headers field must be set.
+                                        rule: 'self.type == ''Headers'' ? has(self.headers)
+                                          : !has(self.headers)'
                                       - message: If consistent hash type is cookie,
                                           the cookie field must be set.
                                         rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -48685,9 +48899,10 @@ spec:
                                     - name
                                     type: object
                                   header:
-                                    description: Header configures the header hash
-                                      policy when the consistent hash type is set
-                                      to Header.
+                                    description: |-
+                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                      Deprecated: use Headers instead
                                     properties:
                                       name:
                                         description: Name of the header to hash.
@@ -48695,6 +48910,22 @@ spec:
                                     required:
                                     - name
                                     type: object
+                                  headers:
+                                    description: Headers configures the header hash
+                                      policy for each header, when the consistent
+                                      hash type is set to Headers.
+                                    items:
+                                      description: |-
+                                        Header defines the header hashing configuration for consistent hash based
+                                        load balancing.
+                                      properties:
+                                        name:
+                                          description: Name of the header to hash.
+                                          type: string
+                                      required:
+                                      - name
+                                      type: object
+                                    type: array
                                   tableSize:
                                     default: 65537
                                     description: The table size for consistent hashing,
@@ -48708,10 +48939,12 @@ spec:
                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                       "SourceIP",
                                       "Header",
+                                      "Headers",
                                       "Cookie".
                                     enum:
                                     - SourceIP
                                     - Header
+                                    - Headers
                                     - Cookie
                                     type: string
                                 required:
@@ -48722,6 +48955,10 @@ spec:
                                     header field must be set.
                                   rule: 'self.type == ''Header'' ? has(self.header)
                                     : !has(self.header)'
+                                - message: If consistent hash type is headers, the
+                                    headers field must be set.
+                                  rule: 'self.type == ''Headers'' ? has(self.headers)
+                                    : !has(self.headers)'
                                 - message: If consistent hash type is cookie, the
                                     cookie field must be set.
                                   rule: 'self.type == ''Cookie'' ? has(self.cookie)
diff --git a/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml b/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml
index 894b3589c..d900aa60d 100644
--- a/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml
+++ b/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml
@@ -1020,8 +1020,10 @@ spec:
                         - name
                         type: object
                       header:
-                        description: Header configures the header hash policy when
-                          the consistent hash type is set to Header.
+                        description: |-
+                          Header configures the header hash policy when the consistent hash type is set to Header.
+
+                          Deprecated: use Headers instead
                         properties:
                           name:
                             description: Name of the header to hash.
@@ -1029,6 +1031,21 @@ spec:
                         required:
                         - name
                         type: object
+                      headers:
+                        description: Headers configures the header hash policy for
+                          each header, when the consistent hash type is set to Headers.
+                        items:
+                          description: |-
+                            Header defines the header hashing configuration for consistent hash based
+                            load balancing.
+                          properties:
+                            name:
+                              description: Name of the header to hash.
+                              type: string
+                          required:
+                          - name
+                          type: object
+                        type: array
                       tableSize:
                         default: 65537
                         description: The table size for consistent hashing, must be
@@ -1042,10 +1059,12 @@ spec:
                           ConsistentHashType defines the type of input to hash on. Valid Type values are
                           "SourceIP",
                           "Header",
+                          "Headers",
                           "Cookie".
                         enum:
                         - SourceIP
                         - Header
+                        - Headers
                         - Cookie
                         type: string
                     required:
@@ -1055,6 +1074,9 @@ spec:
                     - message: If consistent hash type is header, the header field
                         must be set.
                       rule: 'self.type == ''Header'' ? has(self.header) : !has(self.header)'
+                    - message: If consistent hash type is headers, the headers field
+                        must be set.
+                      rule: 'self.type == ''Headers'' ? has(self.headers) : !has(self.headers)'
                     - message: If consistent hash type is cookie, the cookie field
                         must be set.
                       rule: 'self.type == ''Cookie'' ? has(self.cookie) : !has(self.cookie)'
@@ -5353,8 +5375,10 @@ spec:
                                   - name
                                   type: object
                                 header:
-                                  description: Header configures the header hash policy
-                                    when the consistent hash type is set to Header.
+                                  description: |-
+                                    Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                    Deprecated: use Headers instead
                                   properties:
                                     name:
                                       description: Name of the header to hash.
@@ -5362,6 +5386,22 @@ spec:
                                   required:
                                   - name
                                   type: object
+                                headers:
+                                  description: Headers configures the header hash
+                                    policy for each header, when the consistent hash
+                                    type is set to Headers.
+                                  items:
+                                    description: |-
+                                      Header defines the header hashing configuration for consistent hash based
+                                      load balancing.
+                                    properties:
+                                      name:
+                                        description: Name of the header to hash.
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
                                 tableSize:
                                   default: 65537
                                   description: The table size for consistent hashing,
@@ -5375,10 +5415,12 @@ spec:
                                     ConsistentHashType defines the type of input to hash on. Valid Type values are
                                     "SourceIP",
                                     "Header",
+                                    "Headers",
                                     "Cookie".
                                   enum:
                                   - SourceIP
                                   - Header
+                                  - Headers
                                   - Cookie
                                   type: string
                               required:
@@ -5389,6 +5431,10 @@ spec:
                                   field must be set.
                                 rule: 'self.type == ''Header'' ? has(self.header)
                                   : !has(self.header)'
+                              - message: If consistent hash type is headers, the headers
+                                  field must be set.
+                                rule: 'self.type == ''Headers'' ? has(self.headers)
+                                  : !has(self.headers)'
                               - message: If consistent hash type is cookie, the cookie
                                   field must be set.
                                 rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -18885,10 +18931,10 @@ spec:
                                                     - name
                                                     type: object
                                                   header:
-                                                    description: Header configures
-                                                      the header hash policy when
-                                                      the consistent hash type is
-                                                      set to Header.
+                                                    description: |-
+                                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                                      Deprecated: use Headers instead
                                                     properties:
                                                       name:
                                                         description: Name of the header
@@ -18897,6 +18943,24 @@ spec:
                                                     required:
                                                     - name
                                                     type: object
+                                                  headers:
+                                                    description: Headers configures
+                                                      the header hash policy for each
+                                                      header, when the consistent
+                                                      hash type is set to Headers.
+                                                    items:
+                                                      description: |-
+                                                        Header defines the header hashing configuration for consistent hash based
+                                                        load balancing.
+                                                      properties:
+                                                        name:
+                                                          description: Name of the
+                                                            header to hash.
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      type: object
+                                                    type: array
                                                   tableSize:
                                                     default: 65537
                                                     description: The table size for
@@ -18911,10 +18975,12 @@ spec:
                                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                                       "SourceIP",
                                                       "Header",
+                                                      "Headers",
                                                       "Cookie".
                                                     enum:
                                                     - SourceIP
                                                     - Header
+                                                    - Headers
                                                     - Cookie
                                                     type: string
                                                 required:
@@ -18926,6 +18992,11 @@ spec:
                                                     be set.
                                                   rule: 'self.type == ''Header'' ?
                                                     has(self.header) : !has(self.header)'
+                                                - message: If consistent hash type
+                                                    is headers, the headers field
+                                                    must be set.
+                                                  rule: 'self.type == ''Headers''
+                                                    ? has(self.headers) : !has(self.headers)'
                                                 - message: If consistent hash type
                                                     is cookie, the cookie field must
                                                     be set.
@@ -20015,10 +20086,10 @@ spec:
                                                     - name
                                                     type: object
                                                   header:
-                                                    description: Header configures
-                                                      the header hash policy when
-                                                      the consistent hash type is
-                                                      set to Header.
+                                                    description: |-
+                                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                                      Deprecated: use Headers instead
                                                     properties:
                                                       name:
                                                         description: Name of the header
@@ -20027,6 +20098,24 @@ spec:
                                                     required:
                                                     - name
                                                     type: object
+                                                  headers:
+                                                    description: Headers configures
+                                                      the header hash policy for each
+                                                      header, when the consistent
+                                                      hash type is set to Headers.
+                                                    items:
+                                                      description: |-
+                                                        Header defines the header hashing configuration for consistent hash based
+                                                        load balancing.
+                                                      properties:
+                                                        name:
+                                                          description: Name of the
+                                                            header to hash.
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      type: object
+                                                    type: array
                                                   tableSize:
                                                     default: 65537
                                                     description: The table size for
@@ -20041,10 +20130,12 @@ spec:
                                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                                       "SourceIP",
                                                       "Header",
+                                                      "Headers",
                                                       "Cookie".
                                                     enum:
                                                     - SourceIP
                                                     - Header
+                                                    - Headers
                                                     - Cookie
                                                     type: string
                                                 required:
@@ -20056,6 +20147,11 @@ spec:
                                                     be set.
                                                   rule: 'self.type == ''Header'' ?
                                                     has(self.header) : !has(self.header)'
+                                                - message: If consistent hash type
+                                                    is headers, the headers field
+                                                    must be set.
+                                                  rule: 'self.type == ''Headers''
+                                                    ? has(self.headers) : !has(self.headers)'
                                                 - message: If consistent hash type
                                                     is cookie, the cookie field must
                                                     be set.
@@ -21237,9 +21333,10 @@ spec:
                                               - name
                                               type: object
                                             header:
-                                              description: Header configures the header
-                                                hash policy when the consistent hash
-                                                type is set to Header.
+                                              description: |-
+                                                Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                                Deprecated: use Headers instead
                                               properties:
                                                 name:
                                                   description: Name of the header
@@ -21248,6 +21345,24 @@ spec:
                                               required:
                                               - name
                                               type: object
+                                            headers:
+                                              description: Headers configures the
+                                                header hash policy for each header,
+                                                when the consistent hash type is set
+                                                to Headers.
+                                              items:
+                                                description: |-
+                                                  Header defines the header hashing configuration for consistent hash based
+                                                  load balancing.
+                                                properties:
+                                                  name:
+                                                    description: Name of the header
+                                                      to hash.
+                                                    type: string
+                                                required:
+                                                - name
+                                                type: object
+                                              type: array
                                             tableSize:
                                               default: 65537
                                               description: The table size for consistent
@@ -21262,10 +21377,12 @@ spec:
                                                 ConsistentHashType defines the type of input to hash on. Valid Type values are
                                                 "SourceIP",
                                                 "Header",
+                                                "Headers",
                                                 "Cookie".
                                               enum:
                                               - SourceIP
                                               - Header
+                                              - Headers
                                               - Cookie
                                               type: string
                                           required:
@@ -21276,6 +21393,10 @@ spec:
                                               the header field must be set.
                                             rule: 'self.type == ''Header'' ? has(self.header)
                                               : !has(self.header)'
+                                          - message: If consistent hash type is headers,
+                                              the headers field must be set.
+                                            rule: 'self.type == ''Headers'' ? has(self.headers)
+                                              : !has(self.headers)'
                                           - message: If consistent hash type is cookie,
                                               the cookie field must be set.
                                             rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -22370,9 +22491,10 @@ spec:
                                         - name
                                         type: object
                                       header:
-                                        description: Header configures the header
-                                          hash policy when the consistent hash type
-                                          is set to Header.
+                                        description: |-
+                                          Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                          Deprecated: use Headers instead
                                         properties:
                                           name:
                                             description: Name of the header to hash.
@@ -22380,6 +22502,22 @@ spec:
                                         required:
                                         - name
                                         type: object
+                                      headers:
+                                        description: Headers configures the header
+                                          hash policy for each header, when the consistent
+                                          hash type is set to Headers.
+                                        items:
+                                          description: |-
+                                            Header defines the header hashing configuration for consistent hash based
+                                            load balancing.
+                                          properties:
+                                            name:
+                                              description: Name of the header to hash.
+                                              type: string
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
                                       tableSize:
                                         default: 65537
                                         description: The table size for consistent
@@ -22394,10 +22532,12 @@ spec:
                                           ConsistentHashType defines the type of input to hash on. Valid Type values are
                                           "SourceIP",
                                           "Header",
+                                          "Headers",
                                           "Cookie".
                                         enum:
                                         - SourceIP
                                         - Header
+                                        - Headers
                                         - Cookie
                                         type: string
                                     required:
@@ -22408,6 +22548,10 @@ spec:
                                         the header field must be set.
                                       rule: 'self.type == ''Header'' ? has(self.header)
                                         : !has(self.header)'
+                                    - message: If consistent hash type is headers,
+                                        the headers field must be set.
+                                      rule: 'self.type == ''Headers'' ? has(self.headers)
+                                        : !has(self.headers)'
                                     - message: If consistent hash type is cookie,
                                         the cookie field must be set.
                                       rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -24478,9 +24622,10 @@ spec:
                                     - name
                                     type: object
                                   header:
-                                    description: Header configures the header hash
-                                      policy when the consistent hash type is set
-                                      to Header.
+                                    description: |-
+                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                      Deprecated: use Headers instead
                                     properties:
                                       name:
                                         description: Name of the header to hash.
@@ -24488,6 +24633,22 @@ spec:
                                     required:
                                     - name
                                     type: object
+                                  headers:
+                                    description: Headers configures the header hash
+                                      policy for each header, when the consistent
+                                      hash type is set to Headers.
+                                    items:
+                                      description: |-
+                                        Header defines the header hashing configuration for consistent hash based
+                                        load balancing.
+                                      properties:
+                                        name:
+                                          description: Name of the header to hash.
+                                          type: string
+                                      required:
+                                      - name
+                                      type: object
+                                    type: array
                                   tableSize:
                                     default: 65537
                                     description: The table size for consistent hashing,
@@ -24501,10 +24662,12 @@ spec:
                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                       "SourceIP",
                                       "Header",
+                                      "Headers",
                                       "Cookie".
                                     enum:
                                     - SourceIP
                                     - Header
+                                    - Headers
                                     - Cookie
                                     type: string
                                 required:
@@ -24515,6 +24678,10 @@ spec:
                                     header field must be set.
                                   rule: 'self.type == ''Header'' ? has(self.header)
                                     : !has(self.header)'
+                                - message: If consistent hash type is headers, the
+                                    headers field must be set.
+                                  rule: 'self.type == ''Headers'' ? has(self.headers)
+                                    : !has(self.headers)'
                                 - message: If consistent hash type is cookie, the
                                     cookie field must be set.
                                   rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -25502,9 +25669,10 @@ spec:
                                     - name
                                     type: object
                                   header:
-                                    description: Header configures the header hash
-                                      policy when the consistent hash type is set
-                                      to Header.
+                                    description: |-
+                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                      Deprecated: use Headers instead
                                     properties:
                                       name:
                                         description: Name of the header to hash.
@@ -25512,6 +25680,22 @@ spec:
                                     required:
                                     - name
                                     type: object
+                                  headers:
+                                    description: Headers configures the header hash
+                                      policy for each header, when the consistent
+                                      hash type is set to Headers.
+                                    items:
+                                      description: |-
+                                        Header defines the header hashing configuration for consistent hash based
+                                        load balancing.
+                                      properties:
+                                        name:
+                                          description: Name of the header to hash.
+                                          type: string
+                                      required:
+                                      - name
+                                      type: object
+                                    type: array
                                   tableSize:
                                     default: 65537
                                     description: The table size for consistent hashing,
@@ -25525,10 +25709,12 @@ spec:
                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                       "SourceIP",
                                       "Header",
+                                      "Headers",
                                       "Cookie".
                                     enum:
                                     - SourceIP
                                     - Header
+                                    - Headers
                                     - Cookie
                                     type: string
                                 required:
@@ -25539,6 +25725,10 @@ spec:
                                     header field must be set.
                                   rule: 'self.type == ''Header'' ? has(self.header)
                                     : !has(self.header)'
+                                - message: If consistent hash type is headers, the
+                                    headers field must be set.
+                                  rule: 'self.type == ''Headers'' ? has(self.headers)
+                                    : !has(self.headers)'
                                 - message: If consistent hash type is cookie, the
                                     cookie field must be set.
                                   rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -26737,9 +26927,10 @@ spec:
                                           - name
                                           type: object
                                         header:
-                                          description: Header configures the header
-                                            hash policy when the consistent hash type
-                                            is set to Header.
+                                          description: |-
+                                            Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                            Deprecated: use Headers instead
                                           properties:
                                             name:
                                               description: Name of the header to hash.
@@ -26747,6 +26938,23 @@ spec:
                                           required:
                                           - name
                                           type: object
+                                        headers:
+                                          description: Headers configures the header
+                                            hash policy for each header, when the
+                                            consistent hash type is set to Headers.
+                                          items:
+                                            description: |-
+                                              Header defines the header hashing configuration for consistent hash based
+                                              load balancing.
+                                            properties:
+                                              name:
+                                                description: Name of the header to
+                                                  hash.
+                                                type: string
+                                            required:
+                                            - name
+                                            type: object
+                                          type: array
                                         tableSize:
                                           default: 65537
                                           description: The table size for consistent
@@ -26761,10 +26969,12 @@ spec:
                                             ConsistentHashType defines the type of input to hash on. Valid Type values are
                                             "SourceIP",
                                             "Header",
+                                            "Headers",
                                             "Cookie".
                                           enum:
                                           - SourceIP
                                           - Header
+                                          - Headers
                                           - Cookie
                                           type: string
                                       required:
@@ -26775,6 +26985,10 @@ spec:
                                           the header field must be set.
                                         rule: 'self.type == ''Header'' ? has(self.header)
                                           : !has(self.header)'
+                                      - message: If consistent hash type is headers,
+                                          the headers field must be set.
+                                        rule: 'self.type == ''Headers'' ? has(self.headers)
+                                          : !has(self.headers)'
                                       - message: If consistent hash type is cookie,
                                           the cookie field must be set.
                                         rule: 'self.type == ''Cookie'' ? has(self.cookie)
@@ -28029,9 +28243,10 @@ spec:
                                     - name
                                     type: object
                                   header:
-                                    description: Header configures the header hash
-                                      policy when the consistent hash type is set
-                                      to Header.
+                                    description: |-
+                                      Header configures the header hash policy when the consistent hash type is set to Header.
+
+                                      Deprecated: use Headers instead
                                     properties:
                                       name:
                                         description: Name of the header to hash.
@@ -28039,6 +28254,22 @@ spec:
                                     required:
                                     - name
                                     type: object
+                                  headers:
+                                    description: Headers configures the header hash
+                                      policy for each header, when the consistent
+                                      hash type is set to Headers.
+                                    items:
+                                      description: |-
+                                        Header defines the header hashing configuration for consistent hash based
+                                        load balancing.
+                                      properties:
+                                        name:
+                                          description: Name of the header to hash.
+                                          type: string
+                                      required:
+                                      - name
+                                      type: object
+                                    type: array
                                   tableSize:
                                     default: 65537
                                     description: The table size for consistent hashing,
@@ -28052,10 +28283,12 @@ spec:
                                       ConsistentHashType defines the type of input to hash on. Valid Type values are
                                       "SourceIP",
                                       "Header",
+                                      "Headers",
                                       "Cookie".
                                     enum:
                                     - SourceIP
                                     - Header
+                                    - Headers
                                     - Cookie
                                     type: string
                                 required:
@@ -28066,6 +28299,10 @@ spec:
                                     header field must be set.
                                   rule: 'self.type == ''Header'' ? has(self.header)
                                     : !has(self.header)'
+                                - message: If consistent hash type is headers, the
+                                    headers field must be set.
+                                  rule: 'self.type == ''Headers'' ? has(self.headers)
+                                    : !has(self.headers)'
                                 - message: If consistent hash type is cookie, the
                                     cookie field must be set.
                                   rule: 'self.type == ''Cookie'' ? has(self.cookie)