config/crd/networking.gke.io_gcproutingextensions.yaml [48:454]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
            properties:
              extensionChains:
                description: |-
                  ExtensionChains is a set of ordered extension chains that contain
                  the match conditions and extensions to execute. Match conditions for each
                  extension chain are evaluated in sequence for a given request. The first
                  extension chain that has conditions that match the request is executed.
                  Any subsequent extension chains do not execute.
                  Limited to 5 ExtensionChains.
                items:
                  description: |-
                    ExtensionChain is single extension chain wrapper that contains the match conditions
                    and extensions to execute.
                  properties:
                    extensions:
                      description: |-
                        Extensions is a set of extensions to execute for the matching request.
                        Up to 3 Extensions can be defined for each ExtensionChain
                        for the GCPTrafficExtension.
                        GCPRoutingExtension chains are limited to 1 Extension per ExtensionChain.
                      items:
                        description: Extension is a single extension in the chain
                          to execute for the matching request.
                        properties:
                          authority:
                            description: |-
                              Authority is the `:authority` header in the gRPC request sent from Envoy
                              to the callout extension backend service.
                              Required for extensions with callout backend service.
                            maxLength: 1000
                            pattern: ^[A-Za-z0-9-_:%\.\[\]]*$
                            type: string
                          backendRef:
                            description: |-
                              BackendRef identifies an API object that runs the extension.
                              Exactly one of BackendRef or GoogleAPIServiceName should be set.
                            properties:
                              group:
                                default: ""
                                description: Group is the group of the referent.
                                enum:
                                - ""
                                maxLength: 253
                                pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                                type: string
                              kind:
                                default: Service
                                description: Kind is kind of the referent.
                                enum:
                                - 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
                              port:
                                description: Port is the port of the referent.
                                format: int32
                                type: integer
                            required:
                            - group
                            - kind
                            - name
                            - port
                            type: object
                          failOpen:
                            description: |-
                              FailOpen determines how the proxy behaves if the call to the extension
                              fails or times out.

                              When set to `TRUE`, request or response processing continues without
                              error. Any subsequent extensions in the extension chain are also
                              executed. When set to `FALSE` or the default setting of `FALSE` is used,
                              one of the following happens:

                              * If response headers have not been delivered to the downstream client,
                              a generic 500 error is returned to the client. The error response can be
                              tailored by configuring a custom error response in the load balancer.

                              * If response headers have been delivered, then the HTTP stream to the
                              downstream client is reset.
                            type: boolean
                          forwardHeaders:
                            description: |-
                              ForwardHeaders is a list of the HTTP headers to forward to the extension
                              (from the client or backend). If omitted, all headers are sent.
                              Each element indicates the header name.
                            items:
                              description: HTTPHeaderName is the name of the HTTP
                                header.
                              maxLength: 256
                              minLength: 1
                              pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$
                              type: string
                            maxItems: 50
                            type: array
                          googleAPIServiceName:
                            description: |-
                              GoogleAPIServiceName is the name of the Google API service that runs the extension.
                              The name must be in one of the following formats:
                              - <serviceName>.<region>.rep.googleapis.com in regional case.
                              Exactly one of BackendRef or GoogleAPIServiceName should be set.
                            maxLength: 100
                            pattern: ^(modelarmor|dlp)\.([a-z0-9-]+\.rep\.)?googleapis\.com$
                            type: string
                          metadata:
                            additionalProperties:
                              description: MetadataValue is the value of an metadata
                                in GCP Extensions.
                              maxLength: 1023
                              minLength: 1
                              pattern: ^([A-Za-z0-9\/\-._~%!$&'()*+,;=:"\s\[\]\{\}])*$
                              type: string
                            description: |-
                              Metadata provided here is included as part of the
                              `metadata_context` (of type `google.protobuf.Struct`) in the
                              `ProcessingRequest` message sent to the extension
                              server. The metadata is available under the namespace
                              `com.google.<extension_type>.<resource_name>.<extension_chain_name>.<extension_name>`.
                              For example:
                              `com.google.lb_traffic_extension.lbtrafficextension1.chain1.ext1`.

                              The following variables are supported in the metadata:

                              `{forwarding_rule_id}` - substituted with the forwarding rule's fully
                                qualified resource name.
                            maxProperties: 16
                            type: object
                            x-kubernetes-validations:
                            - message: Metadata keys must only contain valid characters
                                (matching ^([A-Za-z0-9\/\-._~%!$&'()*+,;=:\s\[\]\{\}]{1,63})$)
                                and must be up to 63 characters long.
                              rule: self.all(key, key.matches(r"""^([A-Za-z0-9\/\-._~%!$&'()*+,;=:\s\{\}\[\]]{1,63})$"""))
                          name:
                            description: |-
                              Name is the name for this chain.
                              The name is logged as part of the HTTP request logs.
                              The name must conform with RFC-1034, is restricted to lower-cased
                              letters, numbers and hyphens, and can have a maximum length of 63
                              characters. Additionally, the first character must be a letter and the
                              last a letter or a number.
                            maxLength: 63
                            minLength: 1
                            pattern: ^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$
                            type: string
                          requestBodySendMode:
                            description: |-
                              RequestBodySendMode configures processing mode for request processing. If not specified
                              and RequestBody event is supported, the default value STREAMED is used.
                              Supported by both `GCPTrafficExtension` and `GCPRoutingExtension` resources
                              and only for extensions with `backendRef`.
                              When this field is set to `FullDuplexStreamed`, `supportedEvents`
                              must include both `RequestBody` and `RequestTrailers`.
                            enum:
                            - Streamed
                            - FullDuplexStreamed
                            type: string
                          responseBodySendMode:
                            description: |-
                              ResponseBodySendMode configures processing mode for response processing.
                              If not specified and RequestBody event is supported, the default value STREAMED is used.
                              Supported only by `GCPTrafficExtension` resource
                              and only for extensions with `backendRef`.
                              When this field is set to `FullDuplexStreamed`, `supportedEvents`
                              must include both `ResponseBody` and `ResponseTrailers`.
                            enum:
                            - Streamed
                            - FullDuplexStreamed
                            type: string
                          supportedEvents:
                            description: |-
                              SupportedEvents is a set of events during request or response
                              processing for which this extension is called.

                              This field is required for the `GCPTrafficExtension` resource.
                              This field is optional for the `GCPRoutingExtension` resource.

                              If requestBodySendMode is set for the `GCPRoutingExtension` resource,
                              then the `supportedEvents` list can only contain `RequestHeaders` events.
                              If requestBodySendMode is set to `FullDuplexStreamed` for the `GCPRoutingExtension` resource,
                              then the `supportedEvents` list can only contain `RequestHeaders`, `RequestBody`
                              and `RequestTrailers` events.

                              If unspecified, `RequestHeaders` event is assumed as supported.
                              Limited to 6 events.
                            items:
                              description: EventType identifies the part of the request
                                or response for which the extension is called.
                              enum:
                              - RequestHeaders
                              - RequestBody
                              - ResponseHeaders
                              - ResponseBody
                              - RequestTrailers
                              - ResponseTrailers
                              type: string
                            maxItems: 6
                            type: array
                          timeout:
                            description: |-
                              Timeout specifies the timeout for each individual message on the stream.
                              The timeout must be between 10-1000 milliseconds.
                              If omitted, the default timeout is 1000 milliseconds.
                            pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
                            type: string
                        required:
                        - name
                        type: object
                        x-kubernetes-validations:
                        - message: timeout must be between 10-10000 milliseconds
                          rule: 'has(self.timeout) ? duration(self.timeout) >= duration(''10ms'')
                            && duration(self.timeout) <= duration(''10000ms'') : true'
                        - message: authority must be set if backendRef is set
                          rule: 'has(self.backendRef) ? has(self.authority) && size(self.authority)
                            != 0 : true'
                        - message: authority must be not set if googleAPIServiceName
                            is set
                          rule: 'has(self.googleAPIServiceName) ? !has(self.authority)
                            : true'
                        - message: Exactly one of backendRef or googleAPIServiceName
                            should be set
                          rule: '!(has(self.backendRef) && has(self.googleAPIServiceName))
                            && (has(self.backendRef) || has(self.googleAPIServiceName))'
                        - message: requestBodySendMode can be configured only for
                            extensions using backendRef
                          rule: 'has(self.requestBodySendMode) ? has(self.backendRef)
                            : true'
                        - message: responseBodySendMode can be configured only for
                            extensions using backendRef
                          rule: 'has(self.responseBodySendMode) ? has(self.backendRef)
                            : true'
                        - message: If requestBodySendMode is set to `Streamed`, then
                            the `supportedEvents` list must contain `RequestBody`
                            event
                          rule: 'has(self.requestBodySendMode) && self.requestBodySendMode
                            == ''Streamed'' ? self.supportedEvents.exists(e, e ==
                            ''RequestBody'') : true'
                        - message: If responseBodySendMode is set to `Streamed`, then
                            the `supportedEvents` list must contain `ResponseBody`
                            event
                          rule: 'has(self.responseBodySendMode) && self.responseBodySendMode
                            == ''Streamed'' ? self.supportedEvents.exists(e, e ==
                            ''ResponseBody'') : true'
                        - message: 'If requestBodySendMode is set to `FullDuplexStreamed`,
                            then the `supportedEvents` list must contain at least
                            both: `RequestBody` and `RequestTrailers“ events'
                          rule: 'has(self.requestBodySendMode) && self.requestBodySendMode
                            == ''FullDuplexStreamed'' ? self.supportedEvents.exists(e,
                            e == ''RequestBody'') && self.supportedEvents.exists(e,
                            e == ''RequestTrailers'') : true'
                        - message: 'If responseBodySendMode is set to `FullDuplexStreamed`,
                            then the `supportedEvents` list must contain at least
                            both: `ResponseBody` and `ResponseTrailers“ events'
                          rule: 'has(self.responseBodySendMode) && self.responseBodySendMode
                            == ''FullDuplexStreamed'' ? self.supportedEvents.exists(e,
                            e == ''ResponseBody'') && self.supportedEvents.exists(e,
                            e == ''ResponseTrailers'') : true'
                      maxItems: 3
                      minItems: 1
                      type: array
                    matchCondition:
                      description: MatchCondition is the condition under which this
                        chain is invoked for a request.
                      properties:
                        celExpressions:
                          description: |-
                            CELExpressions are expressions that are used to match requests for which
                            the extension chain is executed.
                            Limited to 10 CELExpressions.

                            Expressions are ORed together.
                          items:
                            description: |-
                              CELExpression contains the conditions under which the extension chain is invoked
                              for a request.

                              CELMatcher and BackendRef are ANDed together.
                            properties:
                              backendRefs:
                                description: |-
                                  BackendRefs are Kubernetes Services that are used to match requests
                                  for which the extension chain is executed.
                                items:
                                  description: |-
                                    ExtensionServiceReference defines a reference to the Service
                                    within the namespace of the referrer.
                                  properties:
                                    group:
                                      default: ""
                                      description: Group is the group of the referent.
                                      enum:
                                      - ""
                                      maxLength: 253
                                      pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                                      type: string
                                    kind:
                                      default: Service
                                      description: Kind is kind of the referent.
                                      enum:
                                      - 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
                                    port:
                                      description: Port is the port of the referent.
                                      format: int32
                                      type: integer
                                  required:
                                  - group
                                  - kind
                                  - name
                                  - port
                                  type: object
                                type: array
                              celMatcher:
                                description: |-
                                  CELMatcher is a Common Expression Language (CEL) expression that is used
                                  to match requests for which the extension chain is executed.

                                  For more information, see [CEL matcher language
                                  reference](https://cloud.google.com/service-extensions/docs/cel-matcher-language-reference).
                                maxLength: 512
                                pattern: ^(( )|(request.headers)|(request.method)|(request.host)|(request.path)|(request.query)|(request.scheme)|(response.code)|(response.grpc_status)|(response.headers)|(source.address)|(source.port)|(connection.requested_server_name)|(connection.tls_version)|(connection.sha256_peer_certificate_digest)|(endsWith)|(startsWith)|(matches)|(contains)|(lowerAscii)|(upperAscii)|(int)|(==)|(!=)|(&&)|(>=)|(<=)|(>)|(<)|(\|\|)|(!)|(\+)|(\.)|(/)|('[a-zA-Z0-9\/\-._~%!$&'()*+,;=:\"\\]*')|("[a-zA-Z0-9\/\-._~%!$&'()*+,;=:\"\\]*")|(“[a-zA-Z0-9\/\-._~%!$&'()*+,;=:\"\\]*”)|(R"[a-zA-Z0-9\/\-._~%!$&'()*+,;=:\\]*")|[0-9]|(\()|(\))|(\[)|(\]))+$
                                type: string
                            type: object
                          maxItems: 10
                          type: array
                      type: object
                    name:
                      description: |-
                        Name is the name for this extension chain.
                        The name is logged as part of the HTTP request logs.
                        The name must conform with RFC-1034, is restricted to lower-cased letters,
                        numbers and hyphens, and can have a maximum length of 63 characters.
                        Additionally, the first character must be a letter and the last a letter or a number.
                      maxLength: 63
                      minLength: 1
                      pattern: ^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$
                      type: string
                  required:
                  - extensions
                  - name
                  type: object
                maxItems: 5
                minItems: 1
                type: array
              targetRefs:
                description: |-
                  TargetRefs is a list of API objects this extension applies to.
                  Valid Groups are:
                  - "gateway.networking.k8s.io"

                  Valid Kinds are:
                  - "Gateway"
                items:
                  description: |-
                    LocalObjectReference identifies an API object within the namespace of the
                    referrer.
                    The API object must be valid in the cluster; the Group and Kind must
                    be registered in the cluster for this reference to be valid.

                    References to objects with invalid Group and Kind are not valid, and must
                    be rejected by the implementation, with appropriate Conditions set
                    on the containing object.
                  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
                maxItems: 10
                minItems: 1
                type: array
            required:
            - extensionChains
            - targetRefs
            type: object
          status:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



config/crd/networking.gke.io_gcptrafficextensions.yaml [48:454]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
            properties:
              extensionChains:
                description: |-
                  ExtensionChains is a set of ordered extension chains that contain
                  the match conditions and extensions to execute. Match conditions for each
                  extension chain are evaluated in sequence for a given request. The first
                  extension chain that has conditions that match the request is executed.
                  Any subsequent extension chains do not execute.
                  Limited to 5 ExtensionChains.
                items:
                  description: |-
                    ExtensionChain is single extension chain wrapper that contains the match conditions
                    and extensions to execute.
                  properties:
                    extensions:
                      description: |-
                        Extensions is a set of extensions to execute for the matching request.
                        Up to 3 Extensions can be defined for each ExtensionChain
                        for the GCPTrafficExtension.
                        GCPRoutingExtension chains are limited to 1 Extension per ExtensionChain.
                      items:
                        description: Extension is a single extension in the chain
                          to execute for the matching request.
                        properties:
                          authority:
                            description: |-
                              Authority is the `:authority` header in the gRPC request sent from Envoy
                              to the callout extension backend service.
                              Required for extensions with callout backend service.
                            maxLength: 1000
                            pattern: ^[A-Za-z0-9-_:%\.\[\]]*$
                            type: string
                          backendRef:
                            description: |-
                              BackendRef identifies an API object that runs the extension.
                              Exactly one of BackendRef or GoogleAPIServiceName should be set.
                            properties:
                              group:
                                default: ""
                                description: Group is the group of the referent.
                                enum:
                                - ""
                                maxLength: 253
                                pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                                type: string
                              kind:
                                default: Service
                                description: Kind is kind of the referent.
                                enum:
                                - 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
                              port:
                                description: Port is the port of the referent.
                                format: int32
                                type: integer
                            required:
                            - group
                            - kind
                            - name
                            - port
                            type: object
                          failOpen:
                            description: |-
                              FailOpen determines how the proxy behaves if the call to the extension
                              fails or times out.

                              When set to `TRUE`, request or response processing continues without
                              error. Any subsequent extensions in the extension chain are also
                              executed. When set to `FALSE` or the default setting of `FALSE` is used,
                              one of the following happens:

                              * If response headers have not been delivered to the downstream client,
                              a generic 500 error is returned to the client. The error response can be
                              tailored by configuring a custom error response in the load balancer.

                              * If response headers have been delivered, then the HTTP stream to the
                              downstream client is reset.
                            type: boolean
                          forwardHeaders:
                            description: |-
                              ForwardHeaders is a list of the HTTP headers to forward to the extension
                              (from the client or backend). If omitted, all headers are sent.
                              Each element indicates the header name.
                            items:
                              description: HTTPHeaderName is the name of the HTTP
                                header.
                              maxLength: 256
                              minLength: 1
                              pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$
                              type: string
                            maxItems: 50
                            type: array
                          googleAPIServiceName:
                            description: |-
                              GoogleAPIServiceName is the name of the Google API service that runs the extension.
                              The name must be in one of the following formats:
                              - <serviceName>.<region>.rep.googleapis.com in regional case.
                              Exactly one of BackendRef or GoogleAPIServiceName should be set.
                            maxLength: 100
                            pattern: ^(modelarmor|dlp)\.([a-z0-9-]+\.rep\.)?googleapis\.com$
                            type: string
                          metadata:
                            additionalProperties:
                              description: MetadataValue is the value of an metadata
                                in GCP Extensions.
                              maxLength: 1023
                              minLength: 1
                              pattern: ^([A-Za-z0-9\/\-._~%!$&'()*+,;=:"\s\[\]\{\}])*$
                              type: string
                            description: |-
                              Metadata provided here is included as part of the
                              `metadata_context` (of type `google.protobuf.Struct`) in the
                              `ProcessingRequest` message sent to the extension
                              server. The metadata is available under the namespace
                              `com.google.<extension_type>.<resource_name>.<extension_chain_name>.<extension_name>`.
                              For example:
                              `com.google.lb_traffic_extension.lbtrafficextension1.chain1.ext1`.

                              The following variables are supported in the metadata:

                              `{forwarding_rule_id}` - substituted with the forwarding rule's fully
                                qualified resource name.
                            maxProperties: 16
                            type: object
                            x-kubernetes-validations:
                            - message: Metadata keys must only contain valid characters
                                (matching ^([A-Za-z0-9\/\-._~%!$&'()*+,;=:\s\[\]\{\}]{1,63})$)
                                and must be up to 63 characters long.
                              rule: self.all(key, key.matches(r"""^([A-Za-z0-9\/\-._~%!$&'()*+,;=:\s\{\}\[\]]{1,63})$"""))
                          name:
                            description: |-
                              Name is the name for this chain.
                              The name is logged as part of the HTTP request logs.
                              The name must conform with RFC-1034, is restricted to lower-cased
                              letters, numbers and hyphens, and can have a maximum length of 63
                              characters. Additionally, the first character must be a letter and the
                              last a letter or a number.
                            maxLength: 63
                            minLength: 1
                            pattern: ^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$
                            type: string
                          requestBodySendMode:
                            description: |-
                              RequestBodySendMode configures processing mode for request processing. If not specified
                              and RequestBody event is supported, the default value STREAMED is used.
                              Supported by both `GCPTrafficExtension` and `GCPRoutingExtension` resources
                              and only for extensions with `backendRef`.
                              When this field is set to `FullDuplexStreamed`, `supportedEvents`
                              must include both `RequestBody` and `RequestTrailers`.
                            enum:
                            - Streamed
                            - FullDuplexStreamed
                            type: string
                          responseBodySendMode:
                            description: |-
                              ResponseBodySendMode configures processing mode for response processing.
                              If not specified and RequestBody event is supported, the default value STREAMED is used.
                              Supported only by `GCPTrafficExtension` resource
                              and only for extensions with `backendRef`.
                              When this field is set to `FullDuplexStreamed`, `supportedEvents`
                              must include both `ResponseBody` and `ResponseTrailers`.
                            enum:
                            - Streamed
                            - FullDuplexStreamed
                            type: string
                          supportedEvents:
                            description: |-
                              SupportedEvents is a set of events during request or response
                              processing for which this extension is called.

                              This field is required for the `GCPTrafficExtension` resource.
                              This field is optional for the `GCPRoutingExtension` resource.

                              If requestBodySendMode is set for the `GCPRoutingExtension` resource,
                              then the `supportedEvents` list can only contain `RequestHeaders` events.
                              If requestBodySendMode is set to `FullDuplexStreamed` for the `GCPRoutingExtension` resource,
                              then the `supportedEvents` list can only contain `RequestHeaders`, `RequestBody`
                              and `RequestTrailers` events.

                              If unspecified, `RequestHeaders` event is assumed as supported.
                              Limited to 6 events.
                            items:
                              description: EventType identifies the part of the request
                                or response for which the extension is called.
                              enum:
                              - RequestHeaders
                              - RequestBody
                              - ResponseHeaders
                              - ResponseBody
                              - RequestTrailers
                              - ResponseTrailers
                              type: string
                            maxItems: 6
                            type: array
                          timeout:
                            description: |-
                              Timeout specifies the timeout for each individual message on the stream.
                              The timeout must be between 10-1000 milliseconds.
                              If omitted, the default timeout is 1000 milliseconds.
                            pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
                            type: string
                        required:
                        - name
                        type: object
                        x-kubernetes-validations:
                        - message: timeout must be between 10-10000 milliseconds
                          rule: 'has(self.timeout) ? duration(self.timeout) >= duration(''10ms'')
                            && duration(self.timeout) <= duration(''10000ms'') : true'
                        - message: authority must be set if backendRef is set
                          rule: 'has(self.backendRef) ? has(self.authority) && size(self.authority)
                            != 0 : true'
                        - message: authority must be not set if googleAPIServiceName
                            is set
                          rule: 'has(self.googleAPIServiceName) ? !has(self.authority)
                            : true'
                        - message: Exactly one of backendRef or googleAPIServiceName
                            should be set
                          rule: '!(has(self.backendRef) && has(self.googleAPIServiceName))
                            && (has(self.backendRef) || has(self.googleAPIServiceName))'
                        - message: requestBodySendMode can be configured only for
                            extensions using backendRef
                          rule: 'has(self.requestBodySendMode) ? has(self.backendRef)
                            : true'
                        - message: responseBodySendMode can be configured only for
                            extensions using backendRef
                          rule: 'has(self.responseBodySendMode) ? has(self.backendRef)
                            : true'
                        - message: If requestBodySendMode is set to `Streamed`, then
                            the `supportedEvents` list must contain `RequestBody`
                            event
                          rule: 'has(self.requestBodySendMode) && self.requestBodySendMode
                            == ''Streamed'' ? self.supportedEvents.exists(e, e ==
                            ''RequestBody'') : true'
                        - message: If responseBodySendMode is set to `Streamed`, then
                            the `supportedEvents` list must contain `ResponseBody`
                            event
                          rule: 'has(self.responseBodySendMode) && self.responseBodySendMode
                            == ''Streamed'' ? self.supportedEvents.exists(e, e ==
                            ''ResponseBody'') : true'
                        - message: 'If requestBodySendMode is set to `FullDuplexStreamed`,
                            then the `supportedEvents` list must contain at least
                            both: `RequestBody` and `RequestTrailers“ events'
                          rule: 'has(self.requestBodySendMode) && self.requestBodySendMode
                            == ''FullDuplexStreamed'' ? self.supportedEvents.exists(e,
                            e == ''RequestBody'') && self.supportedEvents.exists(e,
                            e == ''RequestTrailers'') : true'
                        - message: 'If responseBodySendMode is set to `FullDuplexStreamed`,
                            then the `supportedEvents` list must contain at least
                            both: `ResponseBody` and `ResponseTrailers“ events'
                          rule: 'has(self.responseBodySendMode) && self.responseBodySendMode
                            == ''FullDuplexStreamed'' ? self.supportedEvents.exists(e,
                            e == ''ResponseBody'') && self.supportedEvents.exists(e,
                            e == ''ResponseTrailers'') : true'
                      maxItems: 3
                      minItems: 1
                      type: array
                    matchCondition:
                      description: MatchCondition is the condition under which this
                        chain is invoked for a request.
                      properties:
                        celExpressions:
                          description: |-
                            CELExpressions are expressions that are used to match requests for which
                            the extension chain is executed.
                            Limited to 10 CELExpressions.

                            Expressions are ORed together.
                          items:
                            description: |-
                              CELExpression contains the conditions under which the extension chain is invoked
                              for a request.

                              CELMatcher and BackendRef are ANDed together.
                            properties:
                              backendRefs:
                                description: |-
                                  BackendRefs are Kubernetes Services that are used to match requests
                                  for which the extension chain is executed.
                                items:
                                  description: |-
                                    ExtensionServiceReference defines a reference to the Service
                                    within the namespace of the referrer.
                                  properties:
                                    group:
                                      default: ""
                                      description: Group is the group of the referent.
                                      enum:
                                      - ""
                                      maxLength: 253
                                      pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                                      type: string
                                    kind:
                                      default: Service
                                      description: Kind is kind of the referent.
                                      enum:
                                      - 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
                                    port:
                                      description: Port is the port of the referent.
                                      format: int32
                                      type: integer
                                  required:
                                  - group
                                  - kind
                                  - name
                                  - port
                                  type: object
                                type: array
                              celMatcher:
                                description: |-
                                  CELMatcher is a Common Expression Language (CEL) expression that is used
                                  to match requests for which the extension chain is executed.

                                  For more information, see [CEL matcher language
                                  reference](https://cloud.google.com/service-extensions/docs/cel-matcher-language-reference).
                                maxLength: 512
                                pattern: ^(( )|(request.headers)|(request.method)|(request.host)|(request.path)|(request.query)|(request.scheme)|(response.code)|(response.grpc_status)|(response.headers)|(source.address)|(source.port)|(connection.requested_server_name)|(connection.tls_version)|(connection.sha256_peer_certificate_digest)|(endsWith)|(startsWith)|(matches)|(contains)|(lowerAscii)|(upperAscii)|(int)|(==)|(!=)|(&&)|(>=)|(<=)|(>)|(<)|(\|\|)|(!)|(\+)|(\.)|(/)|('[a-zA-Z0-9\/\-._~%!$&'()*+,;=:\"\\]*')|("[a-zA-Z0-9\/\-._~%!$&'()*+,;=:\"\\]*")|(“[a-zA-Z0-9\/\-._~%!$&'()*+,;=:\"\\]*”)|(R"[a-zA-Z0-9\/\-._~%!$&'()*+,;=:\\]*")|[0-9]|(\()|(\))|(\[)|(\]))+$
                                type: string
                            type: object
                          maxItems: 10
                          type: array
                      type: object
                    name:
                      description: |-
                        Name is the name for this extension chain.
                        The name is logged as part of the HTTP request logs.
                        The name must conform with RFC-1034, is restricted to lower-cased letters,
                        numbers and hyphens, and can have a maximum length of 63 characters.
                        Additionally, the first character must be a letter and the last a letter or a number.
                      maxLength: 63
                      minLength: 1
                      pattern: ^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$
                      type: string
                  required:
                  - extensions
                  - name
                  type: object
                maxItems: 5
                minItems: 1
                type: array
              targetRefs:
                description: |-
                  TargetRefs is a list of API objects this extension applies to.
                  Valid Groups are:
                  - "gateway.networking.k8s.io"

                  Valid Kinds are:
                  - "Gateway"
                items:
                  description: |-
                    LocalObjectReference identifies an API object within the namespace of the
                    referrer.
                    The API object must be valid in the cluster; the Group and Kind must
                    be registered in the cluster for this reference to be valid.

                    References to objects with invalid Group and Kind are not valid, and must
                    be rejected by the implementation, with appropriate Conditions set
                    on the containing object.
                  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
                maxItems: 10
                minItems: 1
                type: array
            required:
            - extensionChains
            - targetRefs
            type: object
          status:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



