diff --git a/api/v1alpha1/httproutefilter_types.go b/api/v1alpha1/httproutefilter_types.go
index 7f56ca07d7c..9ae8be59842 100644
--- a/api/v1alpha1/httproutefilter_types.go
+++ b/api/v1alpha1/httproutefilter_types.go
@@ -33,6 +33,8 @@ type HTTPRouteFilter struct {
type HTTPRouteFilterSpec struct {
// +optional
URLRewrite *HTTPURLRewriteFilter `json:"urlRewrite,omitempty"`
+ // +optional
+ DirectResponse *HTTPDirectResponseFilter `json:"directResponse,omitempty"`
}
// HTTPURLRewriteFilter define rewrites of HTTP URL components such as path and host
@@ -49,6 +51,24 @@ type HTTPURLRewriteFilter struct {
Path *HTTPPathModifier `json:"path,omitempty"`
}
+// HTTPDirectResponseFilter defines the configuration to return a fixed response.
+type HTTPDirectResponseFilter struct {
+ // Content Type of the response. This will be set in the Content-Type header.
+ //
+ // +optional
+ ContentType *string `json:"contentType,omitempty"`
+
+ // Body of the Response
+ //
+ // +optional
+ Body *CustomResponseBody `json:"body,omitempty"`
+
+ // Status Code of the HTTP response
+ // If unset, defaults to 200.
+ // +optional
+ StatusCode *int `json:"statusCode,omitempty"`
+}
+
// HTTPPathModifierType defines the type of path redirect or rewrite.
type HTTPPathModifierType string
diff --git a/api/v1alpha1/shared_types.go b/api/v1alpha1/shared_types.go
index 8e98b904e35..fe795c833db 100644
--- a/api/v1alpha1/shared_types.go
+++ b/api/v1alpha1/shared_types.go
@@ -669,7 +669,9 @@ type CustomResponse struct {
ContentType *string `json:"contentType,omitempty"`
// Body of the Custom Response
- Body CustomResponseBody `json:"body"`
+ //
+ // +optional
+ Body *CustomResponseBody `json:"body,omitempty"`
}
// ResponseValueType defines the types of values for the response body supported by Envoy Gateway.
diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go
index d6a4f9daf2f..696c99259fb 100644
--- a/api/v1alpha1/zz_generated.deepcopy.go
+++ b/api/v1alpha1/zz_generated.deepcopy.go
@@ -1148,7 +1148,11 @@ func (in *CustomResponse) DeepCopyInto(out *CustomResponse) {
*out = new(string)
**out = **in
}
- in.Body.DeepCopyInto(&out.Body)
+ if in.Body != nil {
+ in, out := &in.Body, &out.Body
+ *out = new(CustomResponseBody)
+ (*in).DeepCopyInto(*out)
+ }
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomResponse.
@@ -2688,6 +2692,36 @@ func (in *HTTPClientTimeout) DeepCopy() *HTTPClientTimeout {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *HTTPDirectResponseFilter) DeepCopyInto(out *HTTPDirectResponseFilter) {
+ *out = *in
+ if in.ContentType != nil {
+ in, out := &in.ContentType, &out.ContentType
+ *out = new(string)
+ **out = **in
+ }
+ if in.Body != nil {
+ in, out := &in.Body, &out.Body
+ *out = new(CustomResponseBody)
+ (*in).DeepCopyInto(*out)
+ }
+ if in.StatusCode != nil {
+ in, out := &in.StatusCode, &out.StatusCode
+ *out = new(int)
+ **out = **in
+ }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPDirectResponseFilter.
+func (in *HTTPDirectResponseFilter) DeepCopy() *HTTPDirectResponseFilter {
+ if in == nil {
+ return nil
+ }
+ out := new(HTTPDirectResponseFilter)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HTTPExtAuthService) DeepCopyInto(out *HTTPExtAuthService) {
*out = *in
@@ -2820,6 +2854,11 @@ func (in *HTTPRouteFilterSpec) DeepCopyInto(out *HTTPRouteFilterSpec) {
*out = new(HTTPURLRewriteFilter)
(*in).DeepCopyInto(*out)
}
+ if in.DirectResponse != nil {
+ in, out := &in.DirectResponse, &out.DirectResponse
+ *out = new(HTTPDirectResponseFilter)
+ (*in).DeepCopyInto(*out)
+ }
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPRouteFilterSpec.
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 521ee8bcf46..7b2e937312d 100644
--- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml
+++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml
@@ -1035,8 +1035,6 @@ spec:
description: Content Type of the response. This will be
set in the Content-Type header.
type: string
- required:
- - body
type: object
required:
- match
diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_httproutefilters.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_httproutefilters.yaml
index 7a55ec8871f..8a75fec4211 100644
--- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_httproutefilters.yaml
+++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_httproutefilters.yaml
@@ -49,6 +49,66 @@ spec:
spec:
description: Spec defines the desired state of HTTPRouteFilter.
properties:
+ directResponse:
+ description: HTTPDirectResponseFilter defines the configuration to
+ return a fixed response.
+ properties:
+ body:
+ description: Body of the Response
+ properties:
+ inline:
+ description: Inline contains the value as an inline string.
+ type: string
+ type:
+ description: Type is the type of method to use to read the
+ body value.
+ enum:
+ - Inline
+ - ValueRef
+ type: string
+ valueRef:
+ description: |-
+ ValueRef contains the contents of the body
+ specified as a local object reference.
+ Only a reference to ConfigMap is supported.
+ properties:
+ group:
+ description: |-
+ Group is the group of the referent. For example, "gateway.networking.k8s.io".
+ When unspecified or empty string, core API group is inferred.
+ maxLength: 253
+ pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+ type: string
+ kind:
+ description: Kind is kind of the referent. For example
+ "HTTPRoute" or "Service".
+ maxLength: 63
+ minLength: 1
+ pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
+ type: string
+ name:
+ description: Name is the name of the referent.
+ maxLength: 253
+ minLength: 1
+ type: string
+ required:
+ - group
+ - kind
+ - name
+ type: object
+ required:
+ - type
+ type: object
+ contentType:
+ description: Content Type of the response. This will be set in
+ the Content-Type header.
+ type: string
+ statusCode:
+ description: |-
+ Status Code of the HTTP response
+ If unset, defaults to 200.
+ type: integer
+ type: object
urlRewrite:
description: HTTPURLRewriteFilter define rewrites of HTTP URL components
such as path and host
diff --git a/site/content/en/latest/api/extension_types.md b/site/content/en/latest/api/extension_types.md
index 8a54fb2d6c6..fe361099a84 100644
--- a/site/content/en/latest/api/extension_types.md
+++ b/site/content/en/latest/api/extension_types.md
@@ -866,7 +866,7 @@ _Appears in:_
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `contentType` | _string_ | false | Content Type of the response. This will be set in the Content-Type header. |
-| `body` | _[CustomResponseBody](#customresponsebody)_ | true | Body of the Custom Response |
+| `body` | _[CustomResponseBody](#customresponsebody)_ | false | Body of the Custom Response |
#### CustomResponseBody
@@ -877,6 +877,7 @@ CustomResponseBody
_Appears in:_
- [CustomResponse](#customresponse)
+- [HTTPDirectResponseFilter](#httpdirectresponsefilter)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
@@ -1922,6 +1923,22 @@ _Appears in:_
| `idleTimeout` | _[Duration](https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.Duration)_ | false | IdleTimeout for an HTTP connection. Idle time is defined as a period in which there are no active requests in the connection.
Default: 1 hour. |
+#### HTTPDirectResponseFilter
+
+
+
+HTTPDirectResponseFilter defines the configuration to return a fixed response.
+
+_Appears in:_
+- [HTTPRouteFilterSpec](#httproutefilterspec)
+
+| Field | Type | Required | Description |
+| --- | --- | --- | --- |
+| `contentType` | _string_ | false | Content Type of the response. This will be set in the Content-Type header. |
+| `body` | _[CustomResponseBody](#customresponsebody)_ | false | Body of the Response |
+| `statusCode` | _integer_ | false | Status Code of the HTTP response
If unset, defaults to 200. |
+
+
#### HTTPExtAuthService
@@ -2045,6 +2062,7 @@ _Appears in:_
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `urlRewrite` | _[HTTPURLRewriteFilter](#httpurlrewritefilter)_ | false | |
+| `directResponse` | _[HTTPDirectResponseFilter](#httpdirectresponsefilter)_ | false | |
#### HTTPStatus
diff --git a/site/content/zh/latest/api/extension_types.md b/site/content/zh/latest/api/extension_types.md
index 8a54fb2d6c6..fe361099a84 100644
--- a/site/content/zh/latest/api/extension_types.md
+++ b/site/content/zh/latest/api/extension_types.md
@@ -866,7 +866,7 @@ _Appears in:_
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `contentType` | _string_ | false | Content Type of the response. This will be set in the Content-Type header. |
-| `body` | _[CustomResponseBody](#customresponsebody)_ | true | Body of the Custom Response |
+| `body` | _[CustomResponseBody](#customresponsebody)_ | false | Body of the Custom Response |
#### CustomResponseBody
@@ -877,6 +877,7 @@ CustomResponseBody
_Appears in:_
- [CustomResponse](#customresponse)
+- [HTTPDirectResponseFilter](#httpdirectresponsefilter)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
@@ -1922,6 +1923,22 @@ _Appears in:_
| `idleTimeout` | _[Duration](https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.Duration)_ | false | IdleTimeout for an HTTP connection. Idle time is defined as a period in which there are no active requests in the connection.
Default: 1 hour. |
+#### HTTPDirectResponseFilter
+
+
+
+HTTPDirectResponseFilter defines the configuration to return a fixed response.
+
+_Appears in:_
+- [HTTPRouteFilterSpec](#httproutefilterspec)
+
+| Field | Type | Required | Description |
+| --- | --- | --- | --- |
+| `contentType` | _string_ | false | Content Type of the response. This will be set in the Content-Type header. |
+| `body` | _[CustomResponseBody](#customresponsebody)_ | false | Body of the Response |
+| `statusCode` | _integer_ | false | Status Code of the HTTP response
If unset, defaults to 200. |
+
+
#### HTTPExtAuthService
@@ -2045,6 +2062,7 @@ _Appears in:_
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `urlRewrite` | _[HTTPURLRewriteFilter](#httpurlrewritefilter)_ | false | |
+| `directResponse` | _[HTTPDirectResponseFilter](#httpdirectresponsefilter)_ | false | |
#### HTTPStatus