--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.19.0 operatorframework.io/installed-alongside-3abf828c199578d5: openshift-keda/custom-metrics-autoscaler.v2.19.0-1 creationTimestamp: "2026-07-07T02:22:48Z" generation: 1 labels: app.kubernetes.io/name: http-add-on app.kubernetes.io/part-of: keda olm.managed: "true" operators.coreos.com/openshift-custom-metrics-autoscaler-operator.openshift-keda: "" managedFields: - apiVersion: apiextensions.k8s.io/v1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:annotations: .: {} f:controller-gen.kubebuilder.io/version: {} f:operatorframework.io/installed-alongside-3abf828c199578d5: {} f:labels: .: {} f:app.kubernetes.io/name: {} f:app.kubernetes.io/part-of: {} f:olm.managed: {} f:spec: f:conversion: .: {} f:strategy: {} f:group: {} f:names: f:kind: {} f:listKind: {} f:plural: {} f:singular: {} f:scope: {} f:versions: {} manager: catalog operation: Update time: "2026-07-07T02:22:48Z" - apiVersion: apiextensions.k8s.io/v1 fieldsType: FieldsV1 fieldsV1: f:status: f:acceptedNames: f:kind: {} f:listKind: {} f:plural: {} f:singular: {} f:conditions: k:{"type":"Established"}: .: {} f:lastTransitionTime: {} f:message: {} f:reason: {} f:status: {} f:type: {} k:{"type":"NamesAccepted"}: .: {} f:lastTransitionTime: {} f:message: {} f:reason: {} f:status: {} f:type: {} manager: kube-apiserver operation: Update subresource: status time: "2026-07-07T02:22:48Z" - apiVersion: apiextensions.k8s.io/v1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:labels: f:operators.coreos.com/openshift-custom-metrics-autoscaler-operator.openshift-keda: {} manager: olm operation: Update time: "2026-07-07T02:22:54Z" name: interceptorroutes.http.keda.sh resourceVersion: "11957" uid: cd6d8d9e-a3a5-4b49-86f3-26d0e338f4a0 spec: conversion: strategy: None group: http.keda.sh names: kind: InterceptorRoute listKind: InterceptorRouteList plural: interceptorroutes singular: interceptorroute scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .spec.target.service name: TargetService type: string - jsonPath: .status.conditions[?(@.type=="Ready")].status name: Ready type: string - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1beta1 schema: openAPIV3Schema: description: InterceptorRoute configures request routing and autoscaling for a target service. properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: InterceptorRouteSpec defines the desired state of InterceptorRoute. properties: coldStart: description: Cold start behavior when scaling from zero. properties: fallback: description: |- Fallback target to route to when the primary backend does not become ready within the readiness timeout. properties: service: description: Kubernetes Service to use as the fallback target. properties: name: description: Name of the Kubernetes Service. minLength: 1 type: string port: description: Port number on the Service. Mutually exclusive with portName. format: int32 maximum: 65535 minimum: 1 type: integer portName: description: Named port on the Service. Mutually exclusive with port. minLength: 1 type: string required: - name type: object x-kubernetes-validations: - message: exactly one of 'port' or 'portName' must be set rule: has(self.port) != has(self.portName) required: - service type: object required: - fallback type: object x-kubernetes-validations: - message: '''fallback'' must be set' rule: has(self.fallback) rules: description: Routing rules that define how requests are matched to this target. items: description: RoutingRule defines a set of matching criteria for routing requests. properties: headers: description: |- All listed headers must match the request (AND semantics). If a header's Value is omitted, the header must be present but any value is accepted. items: description: HeaderMatch defines a header matching rule. properties: name: description: Name of the HTTP header. minLength: 1 type: string value: description: Value to match against (exact match). If omitted, matches any value for given header name. type: string required: - name type: object type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map hosts: description: |- Match any of these hostnames. Wildcard patterns (e.g. "*.example.com") are supported. A single "*" acts as a catch-all. Exact matches take priority over wildcards; more specific wildcards (e.g. "*.bar.example.com") take priority over less specific ones. items: type: string type: array x-kubernetes-list-type: set paths: description: |- Match any of these path prefixes. When multiple paths match, the longest prefix wins. items: description: PathMatch defines a path matching rule. properties: value: description: Path prefix to match against. The longest matching prefix wins. minLength: 1 type: string required: - value type: object type: array x-kubernetes-list-type: atomic type: object type: array x-kubernetes-list-type: atomic scalingMetric: description: Metric configuration for autoscaling. properties: concurrency: description: Scale based on concurrent request count. properties: targetValue: description: Target concurrent request count per replica. format: int32 minimum: 1 type: integer required: - targetValue type: object requestRate: description: Scale based on request rate. properties: granularity: default: 1s description: Bucket size for rate calculation within the window. type: string targetValue: description: Target request rate per replica. format: int32 minimum: 1 type: integer window: default: 1m description: Sliding time window over which the request rate is calculated. type: string required: - targetValue type: object type: object x-kubernetes-validations: - message: at least one of 'concurrency' or 'requestRate' must be set rule: has(self.concurrency) || has(self.requestRate) target: description: Backend service to route traffic to. properties: port: description: Port number on the Service. Mutually exclusive with portName. format: int32 maximum: 65535 minimum: 1 type: integer portName: description: Named port on the Service. Mutually exclusive with port. minLength: 1 type: string service: description: Name of the Kubernetes Service. minLength: 1 type: string required: - service type: object x-kubernetes-validations: - message: exactly one of 'port' or 'portName' must be set rule: has(self.port) != has(self.portName) timeouts: description: Timeout configuration for request handling. properties: readiness: description: |- Time to wait for the backend to become ready (e.g. scale-from-zero). Unset: uses the global KEDA_HTTP_READINESS_TIMEOUT (default: disabled). Set to "0s" to disable the dedicated readiness deadline so the full request budget is available for cold starts. When a fallback service is configured and this is "0s", a 30s default is applied. type: string request: description: |- Total time allowed for the entire request lifecycle. Unset: uses the global KEDA_HTTP_REQUEST_TIMEOUT (default: disabled). Set to "0s" to disable the request deadline. type: string responseHeader: description: |- Max time to wait for the response headers from the backend after the request has been fully sent. Does not include cold-start wait time. Unset: uses the global KEDA_HTTP_RESPONSE_HEADER_TIMEOUT (default: 300s). Set to "0s" to disable the response header deadline. type: string type: object required: - scalingMetric - target type: object status: description: InterceptorRouteStatus defines the observed state of InterceptorRoute. properties: conditions: description: Conditions of the InterceptorRoute. items: description: Condition contains details for one aspect of the current state of this API Resource. properties: lastTransitionTime: description: |- lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: |- message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: |- observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: |- reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array x-kubernetes-list-map-keys: - type x-kubernetes-list-type: map type: object required: - metadata - spec type: object served: true storage: true subresources: status: {} status: acceptedNames: kind: InterceptorRoute listKind: InterceptorRouteList plural: interceptorroutes singular: interceptorroute conditions: - lastTransitionTime: "2026-07-07T02:22:48Z" message: no conflicts found reason: NoConflicts status: "True" type: NamesAccepted - lastTransitionTime: "2026-07-07T02:22:48Z" message: the initial names have been accepted reason: InitialNamesAccepted status: "True" type: Established storedVersions: - v1beta1