github.com/oam-dev/kubevela@v1.9.11/pkg/velaql/providers/query/testdata/gateway/crds/gateway.networking.k8s.io_httproutes.yaml (about) 1 apiVersion: apiextensions.k8s.io/v1 2 kind: CustomResourceDefinition 3 metadata: 4 annotations: 5 api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/1538 6 gateway.networking.k8s.io/bundle-version: v0.6.2 7 gateway.networking.k8s.io/channel: standard 8 creationTimestamp: null 9 name: httproutes.gateway.networking.k8s.io 10 spec: 11 group: gateway.networking.k8s.io 12 names: 13 categories: 14 - gateway-api 15 kind: HTTPRoute 16 listKind: HTTPRouteList 17 plural: httproutes 18 singular: httproute 19 scope: Namespaced 20 versions: 21 - additionalPrinterColumns: 22 - jsonPath: .spec.hostnames 23 name: Hostnames 24 type: string 25 - jsonPath: .metadata.creationTimestamp 26 name: Age 27 type: date 28 deprecated: true 29 deprecationWarning: The v1alpha2 version of HTTPRoute has been deprecated and 30 will be removed in a future release of the API. Please upgrade to v1beta1. 31 name: v1alpha2 32 schema: 33 openAPIV3Schema: 34 description: HTTPRoute provides a way to route HTTP requests. This includes 35 the capability to match requests by hostname, path, header, or query param. 36 Filters can be used to specify additional processing steps. Backends specify 37 where matching requests should be routed. 38 properties: 39 apiVersion: 40 description: 'APIVersion defines the versioned schema of this representation 41 of an object. Servers should convert recognized schemas to the latest 42 internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' 43 type: string 44 kind: 45 description: 'Kind is a string value representing the REST resource this 46 object represents. Servers may infer this from the endpoint the client 47 submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' 48 type: string 49 metadata: 50 type: object 51 spec: 52 description: Spec defines the desired state of HTTPRoute. 53 properties: 54 hostnames: 55 description: "Hostnames defines a set of hostname that should match 56 against the HTTP Host header to select a HTTPRoute to process the 57 request. This matches the RFC 1123 definition of a hostname with 58 2 notable exceptions: \n 1. IPs are not allowed. 2. A hostname may 59 be prefixed with a wildcard label (`*.`). The wildcard label must 60 appear by itself as the first label. \n If a hostname is specified 61 by both the Listener and HTTPRoute, there must be at least one intersecting 62 hostname for the HTTPRoute to be attached to the Listener. For example: 63 \n * A Listener with `test.example.com` as the hostname matches 64 HTTPRoutes that have either not specified any hostnames, or have 65 specified at least one of `test.example.com` or `*.example.com`. 66 * A Listener with `*.example.com` as the hostname matches HTTPRoutes 67 that have either not specified any hostnames or have specified at 68 least one hostname that matches the Listener hostname. For example, 69 `*.example.com`, `test.example.com`, and `foo.test.example.com` 70 would all match. On the other hand, `example.com` and `test.example.net` 71 would not match. \n Hostnames that are prefixed with a wildcard 72 label (`*.`) are interpreted as a suffix match. That means that 73 a match for `*.example.com` would match both `test.example.com`, 74 and `foo.test.example.com`, but not `example.com`. \n If both the 75 Listener and HTTPRoute have specified hostnames, any HTTPRoute hostnames 76 that do not match the Listener hostname MUST be ignored. For example, 77 if a Listener specified `*.example.com`, and the HTTPRoute specified 78 `test.example.com` and `test.example.net`, `test.example.net` must 79 not be considered for a match. \n If both the Listener and HTTPRoute 80 have specified hostnames, and none match with the criteria above, 81 then the HTTPRoute is not accepted. The implementation must raise 82 an 'Accepted' Condition with a status of `False` in the corresponding 83 RouteParentStatus. \n In the event that multiple HTTPRoutes specify 84 intersecting hostnames (e.g. overlapping wildcard matching and exact 85 matching hostnames), precedence must be given to rules from the 86 HTTPRoute with the largest number of: \n * Characters in a matching 87 non-wildcard hostname. * Characters in a matching hostname. \n If 88 ties exist across multiple Routes, the matching precedence rules 89 for HTTPRouteMatches takes over. \n Support: Core" 90 items: 91 description: "Hostname is the fully qualified domain name of a network 92 host. This matches the RFC 1123 definition of a hostname with 93 2 notable exceptions: \n 1. IPs are not allowed. 2. A hostname 94 may be prefixed with a wildcard label (`*.`). The wildcard label 95 must appear by itself as the first label. \n Hostname can be \"precise\" 96 which is a domain name without the terminating dot of a network 97 host (e.g. \"foo.example.com\") or \"wildcard\", which is a domain 98 name prefixed with a single wildcard label (e.g. `*.example.com`). 99 \n Note that as per RFC1035 and RFC1123, a *label* must consist 100 of lower case alphanumeric characters or '-', and must start and 101 end with an alphanumeric character. No other punctuation is allowed." 102 maxLength: 253 103 minLength: 1 104 pattern: ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 105 type: string 106 maxItems: 16 107 type: array 108 parentRefs: 109 description: "ParentRefs references the resources (usually Gateways) 110 that a Route wants to be attached to. Note that the referenced parent 111 resource needs to allow this for the attachment to be complete. 112 For Gateways, that means the Gateway needs to allow attachment from 113 Routes of this kind and namespace. \n The only kind of parent resource 114 with \"Core\" support is Gateway. This API may be extended in the 115 future to support additional kinds of parent resources such as one 116 of the route kinds. \n It is invalid to reference an identical parent 117 more than once. It is valid to reference multiple distinct sections 118 within the same parent resource, such as 2 Listeners within a Gateway. 119 \n It is possible to separately reference multiple distinct objects 120 that may be collapsed by an implementation. For example, some implementations 121 may choose to merge compatible Gateway Listeners together. If that 122 is the case, the list of routes attached to those resources should 123 also be merged. \n Note that for ParentRefs that cross namespace 124 boundaries, there are specific rules. Cross-namespace references 125 are only valid if they are explicitly allowed by something in the 126 namespace they are referring to. For example, Gateway has the AllowedRoutes 127 field, and ReferenceGrant provides a generic way to enable any other 128 kind of cross-namespace reference." 129 items: 130 description: "ParentReference identifies an API object (usually 131 a Gateway) that can be considered a parent of this resource (usually 132 a route). The only kind of parent resource with \"Core\" support 133 is Gateway. This API may be extended in the future to support 134 additional kinds of parent resources, such as HTTPRoute. \n The 135 API object must be valid in the cluster; the Group and Kind must 136 be registered in the cluster for this reference to be valid." 137 properties: 138 group: 139 default: gateway.networking.k8s.io 140 description: "Group is the group of the referent. When unspecified, 141 \"gateway.networking.k8s.io\" is inferred. To set the core 142 API group (such as for a \"Service\" kind referent), Group 143 must be explicitly set to \"\" (empty string). \n Support: 144 Core" 145 maxLength: 253 146 pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 147 type: string 148 kind: 149 default: Gateway 150 description: "Kind is kind of the referent. \n Support: Core 151 (Gateway) \n Support: Implementation-specific (Other Resources)" 152 maxLength: 63 153 minLength: 1 154 pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ 155 type: string 156 name: 157 description: "Name is the name of the referent. \n Support: 158 Core" 159 maxLength: 253 160 minLength: 1 161 type: string 162 namespace: 163 description: "Namespace is the namespace of the referent. When 164 unspecified, this refers to the local namespace of the Route. 165 \n Note that there are specific rules for ParentRefs which 166 cross namespace boundaries. Cross-namespace references are 167 only valid if they are explicitly allowed by something in 168 the namespace they are referring to. For example: Gateway 169 has the AllowedRoutes field, and ReferenceGrant provides a 170 generic way to enable any other kind of cross-namespace reference. 171 \n Support: Core" 172 maxLength: 63 173 minLength: 1 174 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ 175 type: string 176 sectionName: 177 description: "SectionName is the name of a section within the 178 target resource. In the following resources, SectionName is 179 interpreted as the following: \n * Gateway: Listener Name. 180 When both Port (experimental) and SectionName are specified, 181 the name and port of the selected listener must match both 182 specified values. \n Implementations MAY choose to support 183 attaching Routes to other resources. If that is the case, 184 they MUST clearly document how SectionName is interpreted. 185 \n When unspecified (empty string), this will reference the 186 entire resource. For the purpose of status, an attachment 187 is considered successful if at least one section in the parent 188 resource accepts it. For example, Gateway listeners can restrict 189 which Routes can attach to them by Route kind, namespace, 190 or hostname. If 1 of 2 Gateway listeners accept attachment 191 from the referencing Route, the Route MUST be considered successfully 192 attached. If no Gateway listeners accept attachment from this 193 Route, the Route MUST be considered detached from the Gateway. 194 \n Support: Core" 195 maxLength: 253 196 minLength: 1 197 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 198 type: string 199 required: 200 - name 201 type: object 202 maxItems: 32 203 type: array 204 rules: 205 default: 206 - matches: 207 - path: 208 type: PathPrefix 209 value: / 210 description: Rules are a list of HTTP matchers, filters and actions. 211 items: 212 description: HTTPRouteRule defines semantics for matching an HTTP 213 request based on conditions (matches), processing it (filters), 214 and forwarding the request to an API object (backendRefs). 215 properties: 216 backendRefs: 217 description: "BackendRefs defines the backend(s) where matching 218 requests should be sent. \n Failure behavior here depends 219 on how many BackendRefs are specified and how many are invalid. 220 \n If *all* entries in BackendRefs are invalid, and there 221 are also no filters specified in this route rule, *all* traffic 222 which matches this rule MUST receive a 500 status code. \n 223 See the HTTPBackendRef definition for the rules about what 224 makes a single HTTPBackendRef invalid. \n When a HTTPBackendRef 225 is invalid, 500 status codes MUST be returned for requests 226 that would have otherwise been routed to an invalid backend. 227 If multiple backends are specified, and some are invalid, 228 the proportion of requests that would otherwise have been 229 routed to an invalid backend MUST receive a 500 status code. 230 \n For example, if two backends are specified with equal weights, 231 and one is invalid, 50 percent of traffic must receive a 500. 232 Implementations may choose how that 50 percent is determined. 233 \n Support: Core for Kubernetes Service \n Support: Extended 234 for Kubernetes ServiceImport \n Support: Implementation-specific 235 for any other resource \n Support for weight: Core" 236 items: 237 description: HTTPBackendRef defines how a HTTPRoute should 238 forward an HTTP request. 239 properties: 240 filters: 241 description: "Filters defined at this level should be 242 executed if and only if the request is being forwarded 243 to the backend defined here. \n Support: Implementation-specific 244 (For broader support of filters, use the Filters field 245 in HTTPRouteRule.)" 246 items: 247 description: HTTPRouteFilter defines processing steps 248 that must be completed during the request or response 249 lifecycle. HTTPRouteFilters are meant as an extension 250 point to express processing that may be done in Gateway 251 implementations. Some examples include request or 252 response modification, implementing authentication 253 strategies, rate-limiting, and traffic shaping. API 254 guarantee/conformance is defined based on the type 255 of the filter. 256 properties: 257 extensionRef: 258 description: "ExtensionRef is an optional, implementation-specific 259 extension to the \"filter\" behavior. For example, 260 resource \"myroutefilter\" in group \"networking.example.net\"). 261 ExtensionRef MUST NOT be used for core and extended 262 filters. \n Support: Implementation-specific" 263 properties: 264 group: 265 description: Group is the group of the referent. 266 For example, "gateway.networking.k8s.io". 267 When unspecified or empty string, core API 268 group is inferred. 269 maxLength: 253 270 pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 271 type: string 272 kind: 273 description: Kind is kind of the referent. For 274 example "HTTPRoute" or "Service". 275 maxLength: 63 276 minLength: 1 277 pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ 278 type: string 279 name: 280 description: Name is the name of the referent. 281 maxLength: 253 282 minLength: 1 283 type: string 284 required: 285 - group 286 - kind 287 - name 288 type: object 289 requestHeaderModifier: 290 description: "RequestHeaderModifier defines a schema 291 for a filter that modifies request headers. \n 292 Support: Core" 293 properties: 294 add: 295 description: "Add adds the given header(s) (name, 296 value) to the request before the action. It 297 appends to any existing values associated 298 with the header name. \n Input: GET /foo HTTP/1.1 299 my-header: foo \n Config: add: - name: \"my-header\" 300 value: \"bar,baz\" \n Output: GET /foo HTTP/1.1 301 my-header: foo,bar,baz" 302 items: 303 description: HTTPHeader represents an HTTP 304 Header name and value as defined by RFC 305 7230. 306 properties: 307 name: 308 description: "Name is the name of the 309 HTTP Header to be matched. Name matching 310 MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 311 \n If multiple entries specify equivalent 312 header names, the first entry with an 313 equivalent name MUST be considered for 314 a match. Subsequent entries with an 315 equivalent header name MUST be ignored. 316 Due to the case-insensitivity of header 317 names, \"foo\" and \"Foo\" are considered 318 equivalent." 319 maxLength: 256 320 minLength: 1 321 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 322 type: string 323 value: 324 description: Value is the value of HTTP 325 Header to be matched. 326 maxLength: 4096 327 minLength: 1 328 type: string 329 required: 330 - name 331 - value 332 type: object 333 maxItems: 16 334 type: array 335 x-kubernetes-list-map-keys: 336 - name 337 x-kubernetes-list-type: map 338 remove: 339 description: "Remove the given header(s) from 340 the HTTP request before the action. The value 341 of Remove is a list of HTTP header names. 342 Note that the header names are case-insensitive 343 (see https://datatracker.ietf.org/doc/html/rfc2616#section-4.2). 344 \n Input: GET /foo HTTP/1.1 my-header1: foo 345 my-header2: bar my-header3: baz \n Config: 346 remove: [\"my-header1\", \"my-header3\"] \n 347 Output: GET /foo HTTP/1.1 my-header2: bar" 348 items: 349 type: string 350 maxItems: 16 351 type: array 352 set: 353 description: "Set overwrites the request with 354 the given header (name, value) before the 355 action. \n Input: GET /foo HTTP/1.1 my-header: 356 foo \n Config: set: - name: \"my-header\" 357 value: \"bar\" \n Output: GET /foo HTTP/1.1 358 my-header: bar" 359 items: 360 description: HTTPHeader represents an HTTP 361 Header name and value as defined by RFC 362 7230. 363 properties: 364 name: 365 description: "Name is the name of the 366 HTTP Header to be matched. Name matching 367 MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 368 \n If multiple entries specify equivalent 369 header names, the first entry with an 370 equivalent name MUST be considered for 371 a match. Subsequent entries with an 372 equivalent header name MUST be ignored. 373 Due to the case-insensitivity of header 374 names, \"foo\" and \"Foo\" are considered 375 equivalent." 376 maxLength: 256 377 minLength: 1 378 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 379 type: string 380 value: 381 description: Value is the value of HTTP 382 Header to be matched. 383 maxLength: 4096 384 minLength: 1 385 type: string 386 required: 387 - name 388 - value 389 type: object 390 maxItems: 16 391 type: array 392 x-kubernetes-list-map-keys: 393 - name 394 x-kubernetes-list-type: map 395 type: object 396 requestMirror: 397 description: "RequestMirror defines a schema for 398 a filter that mirrors requests. Requests are sent 399 to the specified destination, but responses from 400 that destination are ignored. \n Support: Extended" 401 properties: 402 backendRef: 403 description: "BackendRef references a resource 404 where mirrored requests are sent. \n If the 405 referent cannot be found, this BackendRef 406 is invalid and must be dropped from the Gateway. 407 The controller must ensure the \"ResolvedRefs\" 408 condition on the Route status is set to `status: 409 False` and not configure this backend in the 410 underlying implementation. \n If there is 411 a cross-namespace reference to an *existing* 412 object that is not allowed by a ReferenceGrant, 413 the controller must ensure the \"ResolvedRefs\" 414 \ condition on the Route is set to `status: 415 False`, with the \"RefNotPermitted\" reason 416 and not configure this backend in the underlying 417 implementation. \n In either error case, the 418 Message of the `ResolvedRefs` Condition should 419 be used to provide more detail about the problem. 420 \n Support: Extended for Kubernetes Service 421 \n Support: Implementation-specific for any 422 other resource" 423 properties: 424 group: 425 default: "" 426 description: Group is the group of the referent. 427 For example, "gateway.networking.k8s.io". 428 When unspecified or empty string, core 429 API group is inferred. 430 maxLength: 253 431 pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 432 type: string 433 kind: 434 default: Service 435 description: "Kind is the Kubernetes resource 436 kind of the referent. For example \"Service\". 437 \n Defaults to \"Service\" when not specified. 438 \n ExternalName services can refer to 439 CNAME DNS records that may live outside 440 of the cluster and as such are difficult 441 to reason about in terms of conformance. 442 They also may not be safe to forward to 443 (see CVE-2021-25740 for more information). 444 Implementations SHOULD NOT support ExternalName 445 Services. \n Support: Core (Services with 446 a type other than ExternalName) \n Support: 447 Implementation-specific (Services with 448 type ExternalName)" 449 maxLength: 63 450 minLength: 1 451 pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ 452 type: string 453 name: 454 description: Name is the name of the referent. 455 maxLength: 253 456 minLength: 1 457 type: string 458 namespace: 459 description: "Namespace is the namespace 460 of the backend. When unspecified, the 461 local namespace is inferred. \n Note that 462 when a namespace is specified, a ReferenceGrant 463 object is required in the referent namespace 464 to allow that namespace's owner to accept 465 the reference. See the ReferenceGrant 466 documentation for details. \n Support: 467 Core" 468 maxLength: 63 469 minLength: 1 470 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ 471 type: string 472 port: 473 description: Port specifies the destination 474 port number to use for this resource. 475 Port is required when the referent is 476 a Kubernetes Service. In this case, the 477 port number is the service port number, 478 not the target port. For other resources, 479 destination port might be derived from 480 the referent resource or this field. 481 format: int32 482 maximum: 65535 483 minimum: 1 484 type: integer 485 required: 486 - name 487 type: object 488 required: 489 - backendRef 490 type: object 491 requestRedirect: 492 description: "RequestRedirect defines a schema for 493 a filter that responds to the request with an 494 HTTP redirection. \n Support: Core" 495 properties: 496 hostname: 497 description: "Hostname is the hostname to be 498 used in the value of the `Location` header 499 in the response. When empty, the hostname 500 in the `Host` header of the request is used. 501 \n Support: Core" 502 maxLength: 253 503 minLength: 1 504 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 505 type: string 506 path: 507 description: "Path defines parameters used to 508 modify the path of the incoming request. The 509 modified path is then used to construct the 510 `Location` header. When empty, the request 511 path is used as-is. \n Support: Extended" 512 properties: 513 replaceFullPath: 514 description: ReplaceFullPath specifies the 515 value with which to replace the full path 516 of a request during a rewrite or redirect. 517 maxLength: 1024 518 type: string 519 replacePrefixMatch: 520 description: "ReplacePrefixMatch specifies 521 the value with which to replace the prefix 522 match of a request during a rewrite or 523 redirect. For example, a request to \"/foo/bar\" 524 with a prefix match of \"/foo\" would 525 be modified to \"/bar\". \n Note that 526 this matches the behavior of the PathPrefix 527 match type. This matches full path elements. 528 A path element refers to the list of labels 529 in the path split by the `/` separator. 530 When specified, a trailing `/` is ignored. 531 For example, the paths `/abc`, `/abc/`, 532 and `/abc/def` would all match the prefix 533 `/abc`, but the path `/abcd` would not." 534 maxLength: 1024 535 type: string 536 type: 537 description: "Type defines the type of path 538 modifier. Additional types may be added 539 in a future release of the API. \n Note 540 that values may be added to this enum, 541 implementations must ensure that unknown 542 values will not cause a crash. \n Unknown 543 values here must result in the implementation 544 setting the Accepted Condition for the 545 Route to `status: False`, with a Reason 546 of `UnsupportedValue`." 547 enum: 548 - ReplaceFullPath 549 - ReplacePrefixMatch 550 type: string 551 required: 552 - type 553 type: object 554 port: 555 description: "Port is the port to be used in 556 the value of the `Location` header in the 557 response. \n When empty, the Gateway Listener 558 port is used. \n Implementations SHOULD NOT 559 add the port number in the 'Location' header 560 in the following cases: \n * A Location header 561 that will use HTTP (whether that is determined 562 via the Listener protocol or the Scheme field) 563 _and_ use port 80. * A Location header that 564 will use HTTPS (whether that is determined 565 via the Listener protocol or the Scheme field) 566 _and_ use port 443. \n Support: Extended" 567 format: int32 568 maximum: 65535 569 minimum: 1 570 type: integer 571 scheme: 572 description: "Scheme is the scheme to be used 573 in the value of the `Location` header in the 574 response. When empty, the scheme of the request 575 is used. \n Note that values may be added 576 to this enum, implementations must ensure 577 that unknown values will not cause a crash. 578 \n Unknown values here must result in the 579 implementation setting the Accepted Condition 580 for the Route to `status: False`, with a Reason 581 of `UnsupportedValue`. \n Support: Extended" 582 enum: 583 - http 584 - https 585 type: string 586 statusCode: 587 default: 302 588 description: "StatusCode is the HTTP status 589 code to be used in response. \n Note that 590 values may be added to this enum, implementations 591 must ensure that unknown values will not cause 592 a crash. \n Unknown values here must result 593 in the implementation setting the Accepted 594 Condition for the Route to `status: False`, 595 with a Reason of `UnsupportedValue`. \n Support: 596 Core" 597 enum: 598 - 301 599 - 302 600 type: integer 601 type: object 602 responseHeaderModifier: 603 description: "ResponseHeaderModifier defines a schema 604 for a filter that modifies response headers. \n 605 Support: Extended" 606 properties: 607 add: 608 description: "Add adds the given header(s) (name, 609 value) to the request before the action. It 610 appends to any existing values associated 611 with the header name. \n Input: GET /foo HTTP/1.1 612 my-header: foo \n Config: add: - name: \"my-header\" 613 value: \"bar,baz\" \n Output: GET /foo HTTP/1.1 614 my-header: foo,bar,baz" 615 items: 616 description: HTTPHeader represents an HTTP 617 Header name and value as defined by RFC 618 7230. 619 properties: 620 name: 621 description: "Name is the name of the 622 HTTP Header to be matched. Name matching 623 MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 624 \n If multiple entries specify equivalent 625 header names, the first entry with an 626 equivalent name MUST be considered for 627 a match. Subsequent entries with an 628 equivalent header name MUST be ignored. 629 Due to the case-insensitivity of header 630 names, \"foo\" and \"Foo\" are considered 631 equivalent." 632 maxLength: 256 633 minLength: 1 634 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 635 type: string 636 value: 637 description: Value is the value of HTTP 638 Header to be matched. 639 maxLength: 4096 640 minLength: 1 641 type: string 642 required: 643 - name 644 - value 645 type: object 646 maxItems: 16 647 type: array 648 x-kubernetes-list-map-keys: 649 - name 650 x-kubernetes-list-type: map 651 remove: 652 description: "Remove the given header(s) from 653 the HTTP request before the action. The value 654 of Remove is a list of HTTP header names. 655 Note that the header names are case-insensitive 656 (see https://datatracker.ietf.org/doc/html/rfc2616#section-4.2). 657 \n Input: GET /foo HTTP/1.1 my-header1: foo 658 my-header2: bar my-header3: baz \n Config: 659 remove: [\"my-header1\", \"my-header3\"] \n 660 Output: GET /foo HTTP/1.1 my-header2: bar" 661 items: 662 type: string 663 maxItems: 16 664 type: array 665 set: 666 description: "Set overwrites the request with 667 the given header (name, value) before the 668 action. \n Input: GET /foo HTTP/1.1 my-header: 669 foo \n Config: set: - name: \"my-header\" 670 value: \"bar\" \n Output: GET /foo HTTP/1.1 671 my-header: bar" 672 items: 673 description: HTTPHeader represents an HTTP 674 Header name and value as defined by RFC 675 7230. 676 properties: 677 name: 678 description: "Name is the name of the 679 HTTP Header to be matched. Name matching 680 MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 681 \n If multiple entries specify equivalent 682 header names, the first entry with an 683 equivalent name MUST be considered for 684 a match. Subsequent entries with an 685 equivalent header name MUST be ignored. 686 Due to the case-insensitivity of header 687 names, \"foo\" and \"Foo\" are considered 688 equivalent." 689 maxLength: 256 690 minLength: 1 691 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 692 type: string 693 value: 694 description: Value is the value of HTTP 695 Header to be matched. 696 maxLength: 4096 697 minLength: 1 698 type: string 699 required: 700 - name 701 - value 702 type: object 703 maxItems: 16 704 type: array 705 x-kubernetes-list-map-keys: 706 - name 707 x-kubernetes-list-type: map 708 type: object 709 type: 710 description: "Type identifies the type of filter 711 to apply. As with other API fields, types are 712 classified into three conformance levels: \n - 713 Core: Filter types and their corresponding configuration 714 defined by \"Support: Core\" in this package, 715 e.g. \"RequestHeaderModifier\". All implementations 716 must support core filters. \n - Extended: Filter 717 types and their corresponding configuration defined 718 by \"Support: Extended\" in this package, e.g. 719 \"RequestMirror\". Implementers are encouraged 720 to support extended filters. \n - Implementation-specific: 721 Filters that are defined and supported by specific 722 vendors. In the future, filters showing convergence 723 in behavior across multiple implementations will 724 be considered for inclusion in extended or core 725 conformance levels. Filter-specific configuration 726 for such filters is specified using the ExtensionRef 727 field. `Type` should be set to \"ExtensionRef\" 728 for custom filters. \n Implementers are encouraged 729 to define custom implementation types to extend 730 the core API with implementation-specific behavior. 731 \n If a reference to a custom filter type cannot 732 be resolved, the filter MUST NOT be skipped. Instead, 733 requests that would have been processed by that 734 filter MUST receive a HTTP error response. \n 735 Note that values may be added to this enum, implementations 736 must ensure that unknown values will not cause 737 a crash. \n Unknown values here must result in 738 the implementation setting the Accepted Condition 739 for the Route to `status: False`, with a Reason 740 of `UnsupportedValue`." 741 enum: 742 - RequestHeaderModifier 743 - ResponseHeaderModifier 744 - RequestMirror 745 - RequestRedirect 746 - URLRewrite 747 - ExtensionRef 748 type: string 749 urlRewrite: 750 description: "URLRewrite defines a schema for a 751 filter that modifies a request during forwarding. 752 \n Support: Extended" 753 properties: 754 hostname: 755 description: "Hostname is the value to be used 756 to replace the Host header value during forwarding. 757 \n Support: Extended" 758 maxLength: 253 759 minLength: 1 760 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 761 type: string 762 path: 763 description: "Path defines a path rewrite. \n 764 Support: Extended" 765 properties: 766 replaceFullPath: 767 description: ReplaceFullPath specifies the 768 value with which to replace the full path 769 of a request during a rewrite or redirect. 770 maxLength: 1024 771 type: string 772 replacePrefixMatch: 773 description: "ReplacePrefixMatch specifies 774 the value with which to replace the prefix 775 match of a request during a rewrite or 776 redirect. For example, a request to \"/foo/bar\" 777 with a prefix match of \"/foo\" would 778 be modified to \"/bar\". \n Note that 779 this matches the behavior of the PathPrefix 780 match type. This matches full path elements. 781 A path element refers to the list of labels 782 in the path split by the `/` separator. 783 When specified, a trailing `/` is ignored. 784 For example, the paths `/abc`, `/abc/`, 785 and `/abc/def` would all match the prefix 786 `/abc`, but the path `/abcd` would not." 787 maxLength: 1024 788 type: string 789 type: 790 description: "Type defines the type of path 791 modifier. Additional types may be added 792 in a future release of the API. \n Note 793 that values may be added to this enum, 794 implementations must ensure that unknown 795 values will not cause a crash. \n Unknown 796 values here must result in the implementation 797 setting the Accepted Condition for the 798 Route to `status: False`, with a Reason 799 of `UnsupportedValue`." 800 enum: 801 - ReplaceFullPath 802 - ReplacePrefixMatch 803 type: string 804 required: 805 - type 806 type: object 807 type: object 808 required: 809 - type 810 type: object 811 maxItems: 16 812 type: array 813 group: 814 default: "" 815 description: Group is the group of the referent. For example, 816 "gateway.networking.k8s.io". When unspecified or empty 817 string, core API group is inferred. 818 maxLength: 253 819 pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 820 type: string 821 kind: 822 default: Service 823 description: "Kind is the Kubernetes resource kind of 824 the referent. For example \"Service\". \n Defaults to 825 \"Service\" when not specified. \n ExternalName services 826 can refer to CNAME DNS records that may live outside 827 of the cluster and as such are difficult to reason about 828 in terms of conformance. They also may not be safe to 829 forward to (see CVE-2021-25740 for more information). 830 Implementations SHOULD NOT support ExternalName Services. 831 \n Support: Core (Services with a type other than ExternalName) 832 \n Support: Implementation-specific (Services with type 833 ExternalName)" 834 maxLength: 63 835 minLength: 1 836 pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ 837 type: string 838 name: 839 description: Name is the name of the referent. 840 maxLength: 253 841 minLength: 1 842 type: string 843 namespace: 844 description: "Namespace is the namespace of the backend. 845 When unspecified, the local namespace is inferred. \n 846 Note that when a namespace is specified, a ReferenceGrant 847 object is required in the referent namespace to allow 848 that namespace's owner to accept the reference. See 849 the ReferenceGrant documentation for details. \n Support: 850 Core" 851 maxLength: 63 852 minLength: 1 853 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ 854 type: string 855 port: 856 description: Port specifies the destination port number 857 to use for this resource. Port is required when the 858 referent is a Kubernetes Service. In this case, the 859 port number is the service port number, not the target 860 port. For other resources, destination port might be 861 derived from the referent resource or this field. 862 format: int32 863 maximum: 65535 864 minimum: 1 865 type: integer 866 weight: 867 default: 1 868 description: "Weight specifies the proportion of requests 869 forwarded to the referenced backend. This is computed 870 as weight/(sum of all weights in this BackendRefs list). 871 For non-zero values, there may be some epsilon from 872 the exact proportion defined here depending on the precision 873 an implementation supports. Weight is not a percentage 874 and the sum of weights does not need to equal 100. \n 875 If only one backend is specified and it has a weight 876 greater than 0, 100% of the traffic is forwarded to 877 that backend. If weight is set to 0, no traffic should 878 be forwarded for this entry. If unspecified, weight 879 defaults to 1. \n Support for this field varies based 880 on the context where used." 881 format: int32 882 maximum: 1000000 883 minimum: 0 884 type: integer 885 required: 886 - name 887 type: object 888 maxItems: 16 889 type: array 890 filters: 891 description: "Filters define the filters that are applied to 892 requests that match this rule. \n The effects of ordering 893 of multiple behaviors are currently unspecified. This can 894 change in the future based on feedback during the alpha stage. 895 \n Conformance-levels at this level are defined based on the 896 type of filter: \n - ALL core filters MUST be supported by 897 all implementations. - Implementers are encouraged to support 898 extended filters. - Implementation-specific custom filters 899 have no API guarantees across implementations. \n Specifying 900 a core filter multiple times has unspecified or implementation-specific 901 conformance. \n All filters are expected to be compatible 902 with each other except for the URLRewrite and RequestRedirect 903 filters, which may not be combined. If an implementation can 904 not support other combinations of filters, they must clearly 905 document that limitation. In all cases where incompatible 906 or unsupported filters are specified, implementations MUST 907 add a warning condition to status. \n Support: Core" 908 items: 909 description: HTTPRouteFilter defines processing steps that 910 must be completed during the request or response lifecycle. 911 HTTPRouteFilters are meant as an extension point to express 912 processing that may be done in Gateway implementations. 913 Some examples include request or response modification, 914 implementing authentication strategies, rate-limiting, and 915 traffic shaping. API guarantee/conformance is defined based 916 on the type of the filter. 917 properties: 918 extensionRef: 919 description: "ExtensionRef is an optional, implementation-specific 920 extension to the \"filter\" behavior. For example, 921 resource \"myroutefilter\" in group \"networking.example.net\"). 922 ExtensionRef MUST NOT be used for core and extended 923 filters. \n Support: Implementation-specific" 924 properties: 925 group: 926 description: Group is the group of the referent. For 927 example, "gateway.networking.k8s.io". When unspecified 928 or empty string, core API group is inferred. 929 maxLength: 253 930 pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 931 type: string 932 kind: 933 description: Kind is kind of the referent. For example 934 "HTTPRoute" or "Service". 935 maxLength: 63 936 minLength: 1 937 pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ 938 type: string 939 name: 940 description: Name is the name of the referent. 941 maxLength: 253 942 minLength: 1 943 type: string 944 required: 945 - group 946 - kind 947 - name 948 type: object 949 requestHeaderModifier: 950 description: "RequestHeaderModifier defines a schema for 951 a filter that modifies request headers. \n Support: 952 Core" 953 properties: 954 add: 955 description: "Add adds the given header(s) (name, 956 value) to the request before the action. It appends 957 to any existing values associated with the header 958 name. \n Input: GET /foo HTTP/1.1 my-header: foo 959 \n Config: add: - name: \"my-header\" value: \"bar,baz\" 960 \n Output: GET /foo HTTP/1.1 my-header: foo,bar,baz" 961 items: 962 description: HTTPHeader represents an HTTP Header 963 name and value as defined by RFC 7230. 964 properties: 965 name: 966 description: "Name is the name of the HTTP Header 967 to be matched. Name matching MUST be case 968 insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 969 \n If multiple entries specify equivalent 970 header names, the first entry with an equivalent 971 name MUST be considered for a match. Subsequent 972 entries with an equivalent header name MUST 973 be ignored. Due to the case-insensitivity 974 of header names, \"foo\" and \"Foo\" are considered 975 equivalent." 976 maxLength: 256 977 minLength: 1 978 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 979 type: string 980 value: 981 description: Value is the value of HTTP Header 982 to be matched. 983 maxLength: 4096 984 minLength: 1 985 type: string 986 required: 987 - name 988 - value 989 type: object 990 maxItems: 16 991 type: array 992 x-kubernetes-list-map-keys: 993 - name 994 x-kubernetes-list-type: map 995 remove: 996 description: "Remove the given header(s) from the 997 HTTP request before the action. The value of Remove 998 is a list of HTTP header names. Note that the header 999 names are case-insensitive (see https://datatracker.ietf.org/doc/html/rfc2616#section-4.2). 1000 \n Input: GET /foo HTTP/1.1 my-header1: foo my-header2: 1001 bar my-header3: baz \n Config: remove: [\"my-header1\", 1002 \"my-header3\"] \n Output: GET /foo HTTP/1.1 my-header2: 1003 bar" 1004 items: 1005 type: string 1006 maxItems: 16 1007 type: array 1008 set: 1009 description: "Set overwrites the request with the 1010 given header (name, value) before the action. \n 1011 Input: GET /foo HTTP/1.1 my-header: foo \n Config: 1012 set: - name: \"my-header\" value: \"bar\" \n Output: 1013 GET /foo HTTP/1.1 my-header: bar" 1014 items: 1015 description: HTTPHeader represents an HTTP Header 1016 name and value as defined by RFC 7230. 1017 properties: 1018 name: 1019 description: "Name is the name of the HTTP Header 1020 to be matched. Name matching MUST be case 1021 insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 1022 \n If multiple entries specify equivalent 1023 header names, the first entry with an equivalent 1024 name MUST be considered for a match. Subsequent 1025 entries with an equivalent header name MUST 1026 be ignored. Due to the case-insensitivity 1027 of header names, \"foo\" and \"Foo\" are considered 1028 equivalent." 1029 maxLength: 256 1030 minLength: 1 1031 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 1032 type: string 1033 value: 1034 description: Value is the value of HTTP Header 1035 to be matched. 1036 maxLength: 4096 1037 minLength: 1 1038 type: string 1039 required: 1040 - name 1041 - value 1042 type: object 1043 maxItems: 16 1044 type: array 1045 x-kubernetes-list-map-keys: 1046 - name 1047 x-kubernetes-list-type: map 1048 type: object 1049 requestMirror: 1050 description: "RequestMirror defines a schema for a filter 1051 that mirrors requests. Requests are sent to the specified 1052 destination, but responses from that destination are 1053 ignored. \n Support: Extended" 1054 properties: 1055 backendRef: 1056 description: "BackendRef references a resource where 1057 mirrored requests are sent. \n If the referent cannot 1058 be found, this BackendRef is invalid and must be 1059 dropped from the Gateway. The controller must ensure 1060 the \"ResolvedRefs\" condition on the Route status 1061 is set to `status: False` and not configure this 1062 backend in the underlying implementation. \n If 1063 there is a cross-namespace reference to an *existing* 1064 object that is not allowed by a ReferenceGrant, 1065 the controller must ensure the \"ResolvedRefs\" 1066 \ condition on the Route is set to `status: False`, 1067 with the \"RefNotPermitted\" reason and not configure 1068 this backend in the underlying implementation. \n 1069 In either error case, the Message of the `ResolvedRefs` 1070 Condition should be used to provide more detail 1071 about the problem. \n Support: Extended for Kubernetes 1072 Service \n Support: Implementation-specific for 1073 any other resource" 1074 properties: 1075 group: 1076 default: "" 1077 description: Group is the group of the referent. 1078 For example, "gateway.networking.k8s.io". When 1079 unspecified or empty string, core API group 1080 is inferred. 1081 maxLength: 253 1082 pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 1083 type: string 1084 kind: 1085 default: Service 1086 description: "Kind is the Kubernetes resource 1087 kind of the referent. For example \"Service\". 1088 \n Defaults to \"Service\" when not specified. 1089 \n ExternalName services can refer to CNAME 1090 DNS records that may live outside of the cluster 1091 and as such are difficult to reason about in 1092 terms of conformance. They also may not be safe 1093 to forward to (see CVE-2021-25740 for more information). 1094 Implementations SHOULD NOT support ExternalName 1095 Services. \n Support: Core (Services with a 1096 type other than ExternalName) \n Support: Implementation-specific 1097 (Services with type ExternalName)" 1098 maxLength: 63 1099 minLength: 1 1100 pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ 1101 type: string 1102 name: 1103 description: Name is the name of the referent. 1104 maxLength: 253 1105 minLength: 1 1106 type: string 1107 namespace: 1108 description: "Namespace is the namespace of the 1109 backend. When unspecified, the local namespace 1110 is inferred. \n Note that when a namespace is 1111 specified, a ReferenceGrant object is required 1112 in the referent namespace to allow that namespace's 1113 owner to accept the reference. See the ReferenceGrant 1114 documentation for details. \n Support: Core" 1115 maxLength: 63 1116 minLength: 1 1117 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ 1118 type: string 1119 port: 1120 description: Port specifies the destination port 1121 number to use for this resource. Port is required 1122 when the referent is a Kubernetes Service. In 1123 this case, the port number is the service port 1124 number, not the target port. For other resources, 1125 destination port might be derived from the referent 1126 resource or this field. 1127 format: int32 1128 maximum: 65535 1129 minimum: 1 1130 type: integer 1131 required: 1132 - name 1133 type: object 1134 required: 1135 - backendRef 1136 type: object 1137 requestRedirect: 1138 description: "RequestRedirect defines a schema for a filter 1139 that responds to the request with an HTTP redirection. 1140 \n Support: Core" 1141 properties: 1142 hostname: 1143 description: "Hostname is the hostname to be used 1144 in the value of the `Location` header in the response. 1145 When empty, the hostname in the `Host` header of 1146 the request is used. \n Support: Core" 1147 maxLength: 253 1148 minLength: 1 1149 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 1150 type: string 1151 path: 1152 description: "Path defines parameters used to modify 1153 the path of the incoming request. The modified path 1154 is then used to construct the `Location` header. 1155 When empty, the request path is used as-is. \n Support: 1156 Extended" 1157 properties: 1158 replaceFullPath: 1159 description: ReplaceFullPath specifies the value 1160 with which to replace the full path of a request 1161 during a rewrite or redirect. 1162 maxLength: 1024 1163 type: string 1164 replacePrefixMatch: 1165 description: "ReplacePrefixMatch specifies the 1166 value with which to replace the prefix match 1167 of a request during a rewrite or redirect. For 1168 example, a request to \"/foo/bar\" with a prefix 1169 match of \"/foo\" would be modified to \"/bar\". 1170 \n Note that this matches the behavior of the 1171 PathPrefix match type. This matches full path 1172 elements. A path element refers to the list 1173 of labels in the path split by the `/` separator. 1174 When specified, a trailing `/` is ignored. For 1175 example, the paths `/abc`, `/abc/`, and `/abc/def` 1176 would all match the prefix `/abc`, but the path 1177 `/abcd` would not." 1178 maxLength: 1024 1179 type: string 1180 type: 1181 description: "Type defines the type of path modifier. 1182 Additional types may be added in a future release 1183 of the API. \n Note that values may be added 1184 to this enum, implementations must ensure that 1185 unknown values will not cause a crash. \n Unknown 1186 values here must result in the implementation 1187 setting the Accepted Condition for the Route 1188 to `status: False`, with a Reason of `UnsupportedValue`." 1189 enum: 1190 - ReplaceFullPath 1191 - ReplacePrefixMatch 1192 type: string 1193 required: 1194 - type 1195 type: object 1196 port: 1197 description: "Port is the port to be used in the value 1198 of the `Location` header in the response. \n When 1199 empty, the Gateway Listener port is used. \n Implementations 1200 SHOULD NOT add the port number in the 'Location' 1201 header in the following cases: \n * A Location header 1202 that will use HTTP (whether that is determined via 1203 the Listener protocol or the Scheme field) _and_ 1204 use port 80. * A Location header that will use HTTPS 1205 (whether that is determined via the Listener protocol 1206 or the Scheme field) _and_ use port 443. \n Support: 1207 Extended" 1208 format: int32 1209 maximum: 65535 1210 minimum: 1 1211 type: integer 1212 scheme: 1213 description: "Scheme is the scheme to be used in the 1214 value of the `Location` header in the response. 1215 When empty, the scheme of the request is used. \n 1216 Note that values may be added to this enum, implementations 1217 must ensure that unknown values will not cause a 1218 crash. \n Unknown values here must result in the 1219 implementation setting the Accepted Condition for 1220 the Route to `status: False`, with a Reason of `UnsupportedValue`. 1221 \n Support: Extended" 1222 enum: 1223 - http 1224 - https 1225 type: string 1226 statusCode: 1227 default: 302 1228 description: "StatusCode is the HTTP status code to 1229 be used in response. \n Note that values may be 1230 added to this enum, implementations must ensure 1231 that unknown values will not cause a crash. \n Unknown 1232 values here must result in the implementation setting 1233 the Accepted Condition for the Route to `status: 1234 False`, with a Reason of `UnsupportedValue`. \n 1235 Support: Core" 1236 enum: 1237 - 301 1238 - 302 1239 type: integer 1240 type: object 1241 responseHeaderModifier: 1242 description: "ResponseHeaderModifier defines a schema 1243 for a filter that modifies response headers. \n Support: 1244 Extended" 1245 properties: 1246 add: 1247 description: "Add adds the given header(s) (name, 1248 value) to the request before the action. It appends 1249 to any existing values associated with the header 1250 name. \n Input: GET /foo HTTP/1.1 my-header: foo 1251 \n Config: add: - name: \"my-header\" value: \"bar,baz\" 1252 \n Output: GET /foo HTTP/1.1 my-header: foo,bar,baz" 1253 items: 1254 description: HTTPHeader represents an HTTP Header 1255 name and value as defined by RFC 7230. 1256 properties: 1257 name: 1258 description: "Name is the name of the HTTP Header 1259 to be matched. Name matching MUST be case 1260 insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 1261 \n If multiple entries specify equivalent 1262 header names, the first entry with an equivalent 1263 name MUST be considered for a match. Subsequent 1264 entries with an equivalent header name MUST 1265 be ignored. Due to the case-insensitivity 1266 of header names, \"foo\" and \"Foo\" are considered 1267 equivalent." 1268 maxLength: 256 1269 minLength: 1 1270 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 1271 type: string 1272 value: 1273 description: Value is the value of HTTP Header 1274 to be matched. 1275 maxLength: 4096 1276 minLength: 1 1277 type: string 1278 required: 1279 - name 1280 - value 1281 type: object 1282 maxItems: 16 1283 type: array 1284 x-kubernetes-list-map-keys: 1285 - name 1286 x-kubernetes-list-type: map 1287 remove: 1288 description: "Remove the given header(s) from the 1289 HTTP request before the action. The value of Remove 1290 is a list of HTTP header names. Note that the header 1291 names are case-insensitive (see https://datatracker.ietf.org/doc/html/rfc2616#section-4.2). 1292 \n Input: GET /foo HTTP/1.1 my-header1: foo my-header2: 1293 bar my-header3: baz \n Config: remove: [\"my-header1\", 1294 \"my-header3\"] \n Output: GET /foo HTTP/1.1 my-header2: 1295 bar" 1296 items: 1297 type: string 1298 maxItems: 16 1299 type: array 1300 set: 1301 description: "Set overwrites the request with the 1302 given header (name, value) before the action. \n 1303 Input: GET /foo HTTP/1.1 my-header: foo \n Config: 1304 set: - name: \"my-header\" value: \"bar\" \n Output: 1305 GET /foo HTTP/1.1 my-header: bar" 1306 items: 1307 description: HTTPHeader represents an HTTP Header 1308 name and value as defined by RFC 7230. 1309 properties: 1310 name: 1311 description: "Name is the name of the HTTP Header 1312 to be matched. Name matching MUST be case 1313 insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 1314 \n If multiple entries specify equivalent 1315 header names, the first entry with an equivalent 1316 name MUST be considered for a match. Subsequent 1317 entries with an equivalent header name MUST 1318 be ignored. Due to the case-insensitivity 1319 of header names, \"foo\" and \"Foo\" are considered 1320 equivalent." 1321 maxLength: 256 1322 minLength: 1 1323 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 1324 type: string 1325 value: 1326 description: Value is the value of HTTP Header 1327 to be matched. 1328 maxLength: 4096 1329 minLength: 1 1330 type: string 1331 required: 1332 - name 1333 - value 1334 type: object 1335 maxItems: 16 1336 type: array 1337 x-kubernetes-list-map-keys: 1338 - name 1339 x-kubernetes-list-type: map 1340 type: object 1341 type: 1342 description: "Type identifies the type of filter to apply. 1343 As with other API fields, types are classified into 1344 three conformance levels: \n - Core: Filter types and 1345 their corresponding configuration defined by \"Support: 1346 Core\" in this package, e.g. \"RequestHeaderModifier\". 1347 All implementations must support core filters. \n - 1348 Extended: Filter types and their corresponding configuration 1349 defined by \"Support: Extended\" in this package, e.g. 1350 \"RequestMirror\". Implementers are encouraged to support 1351 extended filters. \n - Implementation-specific: Filters 1352 that are defined and supported by specific vendors. 1353 In the future, filters showing convergence in behavior 1354 across multiple implementations will be considered for 1355 inclusion in extended or core conformance levels. Filter-specific 1356 configuration for such filters is specified using the 1357 ExtensionRef field. `Type` should be set to \"ExtensionRef\" 1358 for custom filters. \n Implementers are encouraged to 1359 define custom implementation types to extend the core 1360 API with implementation-specific behavior. \n If a reference 1361 to a custom filter type cannot be resolved, the filter 1362 MUST NOT be skipped. Instead, requests that would have 1363 been processed by that filter MUST receive a HTTP error 1364 response. \n Note that values may be added to this enum, 1365 implementations must ensure that unknown values will 1366 not cause a crash. \n Unknown values here must result 1367 in the implementation setting the Accepted Condition 1368 for the Route to `status: False`, with a Reason of `UnsupportedValue`." 1369 enum: 1370 - RequestHeaderModifier 1371 - ResponseHeaderModifier 1372 - RequestMirror 1373 - RequestRedirect 1374 - URLRewrite 1375 - ExtensionRef 1376 type: string 1377 urlRewrite: 1378 description: "URLRewrite defines a schema for a filter 1379 that modifies a request during forwarding. \n Support: 1380 Extended" 1381 properties: 1382 hostname: 1383 description: "Hostname is the value to be used to 1384 replace the Host header value during forwarding. 1385 \n Support: Extended" 1386 maxLength: 253 1387 minLength: 1 1388 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 1389 type: string 1390 path: 1391 description: "Path defines a path rewrite. \n Support: 1392 Extended" 1393 properties: 1394 replaceFullPath: 1395 description: ReplaceFullPath specifies the value 1396 with which to replace the full path of a request 1397 during a rewrite or redirect. 1398 maxLength: 1024 1399 type: string 1400 replacePrefixMatch: 1401 description: "ReplacePrefixMatch specifies the 1402 value with which to replace the prefix match 1403 of a request during a rewrite or redirect. For 1404 example, a request to \"/foo/bar\" with a prefix 1405 match of \"/foo\" would be modified to \"/bar\". 1406 \n Note that this matches the behavior of the 1407 PathPrefix match type. This matches full path 1408 elements. A path element refers to the list 1409 of labels in the path split by the `/` separator. 1410 When specified, a trailing `/` is ignored. For 1411 example, the paths `/abc`, `/abc/`, and `/abc/def` 1412 would all match the prefix `/abc`, but the path 1413 `/abcd` would not." 1414 maxLength: 1024 1415 type: string 1416 type: 1417 description: "Type defines the type of path modifier. 1418 Additional types may be added in a future release 1419 of the API. \n Note that values may be added 1420 to this enum, implementations must ensure that 1421 unknown values will not cause a crash. \n Unknown 1422 values here must result in the implementation 1423 setting the Accepted Condition for the Route 1424 to `status: False`, with a Reason of `UnsupportedValue`." 1425 enum: 1426 - ReplaceFullPath 1427 - ReplacePrefixMatch 1428 type: string 1429 required: 1430 - type 1431 type: object 1432 type: object 1433 required: 1434 - type 1435 type: object 1436 maxItems: 16 1437 type: array 1438 matches: 1439 default: 1440 - path: 1441 type: PathPrefix 1442 value: / 1443 description: "Matches define conditions used for matching the 1444 rule against incoming HTTP requests. Each match is independent, 1445 i.e. this rule will be matched if **any** one of the matches 1446 is satisfied. \n For example, take the following matches configuration: 1447 \n ``` matches: - path: value: \"/foo\" headers: - name: \"version\" 1448 value: \"v2\" - path: value: \"/v2/foo\" ``` \n For a request 1449 to match against this rule, a request must satisfy EITHER 1450 of the two conditions: \n - path prefixed with `/foo` AND 1451 contains the header `version: v2` - path prefix of `/v2/foo` 1452 \n See the documentation for HTTPRouteMatch on how to specify 1453 multiple match conditions that should be ANDed together. \n 1454 If no matches are specified, the default is a prefix path 1455 match on \"/\", which has the effect of matching every HTTP 1456 request. \n Proxy or Load Balancer routing configuration generated 1457 from HTTPRoutes MUST prioritize matches based on the following 1458 criteria, continuing on ties. Across all rules specified on 1459 applicable Routes, precedence must be given to the match with 1460 the largest number of: \n * Characters in a matching \"Exact\" 1461 path match * Characters in a matching \"Prefix\" path match 1462 * Header matches. * Query param matches. \n Note: The precedence 1463 of RegularExpression path matches are implementation-specific. 1464 \n If ties still exist across multiple Routes, matching precedence 1465 MUST be determined in order of the following criteria, continuing 1466 on ties: \n * The oldest Route based on creation timestamp. 1467 * The Route appearing first in alphabetical order by \"{namespace}/{name}\". 1468 \n If ties still exist within an HTTPRoute, matching precedence 1469 MUST be granted to the FIRST matching rule (in list order) 1470 with a match meeting the above criteria. \n When no rules 1471 matching a request have been successfully attached to the 1472 parent a request is coming from, a HTTP 404 status code MUST 1473 be returned." 1474 items: 1475 description: "HTTPRouteMatch defines the predicate used to 1476 match requests to a given action. Multiple match types are 1477 ANDed together, i.e. the match will evaluate to true only 1478 if all conditions are satisfied. \n For example, the match 1479 below will match a HTTP request only if its path starts 1480 with `/foo` AND it contains the `version: v1` header: \n 1481 ``` match: \n path: value: \"/foo\" headers: - name: \"version\" 1482 value \"v1\" \n ```" 1483 properties: 1484 headers: 1485 description: Headers specifies HTTP request header matchers. 1486 Multiple match values are ANDed together, meaning, a 1487 request must match all the specified headers to select 1488 the route. 1489 items: 1490 description: HTTPHeaderMatch describes how to select 1491 a HTTP route by matching HTTP request headers. 1492 properties: 1493 name: 1494 description: "Name is the name of the HTTP Header 1495 to be matched. Name matching MUST be case insensitive. 1496 (See https://tools.ietf.org/html/rfc7230#section-3.2). 1497 \n If multiple entries specify equivalent header 1498 names, only the first entry with an equivalent 1499 name MUST be considered for a match. Subsequent 1500 entries with an equivalent header name MUST be 1501 ignored. Due to the case-insensitivity of header 1502 names, \"foo\" and \"Foo\" are considered equivalent. 1503 \n When a header is repeated in an HTTP request, 1504 it is implementation-specific behavior as to how 1505 this is represented. Generally, proxies should 1506 follow the guidance from the RFC: https://www.rfc-editor.org/rfc/rfc7230.html#section-3.2.2 1507 regarding processing a repeated header, with special 1508 handling for \"Set-Cookie\"." 1509 maxLength: 256 1510 minLength: 1 1511 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 1512 type: string 1513 type: 1514 default: Exact 1515 description: "Type specifies how to match against 1516 the value of the header. \n Support: Core (Exact) 1517 \n Support: Implementation-specific (RegularExpression) 1518 \n Since RegularExpression HeaderMatchType has 1519 implementation-specific conformance, implementations 1520 can support POSIX, PCRE or any other dialects 1521 of regular expressions. Please read the implementation's 1522 documentation to determine the supported dialect." 1523 enum: 1524 - Exact 1525 - RegularExpression 1526 type: string 1527 value: 1528 description: Value is the value of HTTP Header to 1529 be matched. 1530 maxLength: 4096 1531 minLength: 1 1532 type: string 1533 required: 1534 - name 1535 - value 1536 type: object 1537 maxItems: 16 1538 type: array 1539 x-kubernetes-list-map-keys: 1540 - name 1541 x-kubernetes-list-type: map 1542 method: 1543 description: "Method specifies HTTP method matcher. When 1544 specified, this route will be matched only if the request 1545 has the specified method. \n Support: Extended" 1546 enum: 1547 - GET 1548 - HEAD 1549 - POST 1550 - PUT 1551 - DELETE 1552 - CONNECT 1553 - OPTIONS 1554 - TRACE 1555 - PATCH 1556 type: string 1557 path: 1558 default: 1559 type: PathPrefix 1560 value: / 1561 description: Path specifies a HTTP request path matcher. 1562 If this field is not specified, a default prefix match 1563 on the "/" path is provided. 1564 properties: 1565 type: 1566 default: PathPrefix 1567 description: "Type specifies how to match against 1568 the path Value. \n Support: Core (Exact, PathPrefix) 1569 \n Support: Implementation-specific (RegularExpression)" 1570 enum: 1571 - Exact 1572 - PathPrefix 1573 - RegularExpression 1574 type: string 1575 value: 1576 default: / 1577 description: Value of the HTTP path to match against. 1578 maxLength: 1024 1579 type: string 1580 type: object 1581 queryParams: 1582 description: "QueryParams specifies HTTP query parameter 1583 matchers. Multiple match values are ANDed together, 1584 meaning, a request must match all the specified query 1585 parameters to select the route. \n Support: Extended" 1586 items: 1587 description: HTTPQueryParamMatch describes how to select 1588 a HTTP route by matching HTTP query parameters. 1589 properties: 1590 name: 1591 description: "Name is the name of the HTTP query 1592 param to be matched. This must be an exact string 1593 match. (See https://tools.ietf.org/html/rfc7230#section-2.7.3). 1594 \n If multiple entries specify equivalent query 1595 param names, only the first entry with an equivalent 1596 name MUST be considered for a match. Subsequent 1597 entries with an equivalent query param name MUST 1598 be ignored. \n If a query param is repeated in 1599 an HTTP request, the behavior is purposely left 1600 undefined, since different data planes have different 1601 capabilities. However, it is *recommended* that 1602 implementations should match against the first 1603 value of the param if the data plane supports 1604 it, as this behavior is expected in other load 1605 balancing contexts outside of the Gateway API. 1606 \n Users SHOULD NOT route traffic based on repeated 1607 query params to guard themselves against potential 1608 differences in the implementations." 1609 maxLength: 256 1610 minLength: 1 1611 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 1612 type: string 1613 type: 1614 default: Exact 1615 description: "Type specifies how to match against 1616 the value of the query parameter. \n Support: 1617 Extended (Exact) \n Support: Implementation-specific 1618 (RegularExpression) \n Since RegularExpression 1619 QueryParamMatchType has Implementation-specific 1620 conformance, implementations can support POSIX, 1621 PCRE or any other dialects of regular expressions. 1622 Please read the implementation's documentation 1623 to determine the supported dialect." 1624 enum: 1625 - Exact 1626 - RegularExpression 1627 type: string 1628 value: 1629 description: Value is the value of HTTP query param 1630 to be matched. 1631 maxLength: 1024 1632 minLength: 1 1633 type: string 1634 required: 1635 - name 1636 - value 1637 type: object 1638 maxItems: 16 1639 type: array 1640 x-kubernetes-list-map-keys: 1641 - name 1642 x-kubernetes-list-type: map 1643 type: object 1644 maxItems: 8 1645 type: array 1646 type: object 1647 maxItems: 16 1648 type: array 1649 type: object 1650 status: 1651 description: Status defines the current state of HTTPRoute. 1652 properties: 1653 parents: 1654 description: "Parents is a list of parent resources (usually Gateways) 1655 that are associated with the route, and the status of the route 1656 with respect to each parent. When this route attaches to a parent, 1657 the controller that manages the parent must add an entry to this 1658 list when the controller first sees the route and should update 1659 the entry as appropriate when the route or gateway is modified. 1660 \n Note that parent references that cannot be resolved by an implementation 1661 of this API will not be added to this list. Implementations of this 1662 API can only populate Route status for the Gateways/parent resources 1663 they are responsible for. \n A maximum of 32 Gateways will be represented 1664 in this list. An empty list means the route has not been attached 1665 to any Gateway." 1666 items: 1667 description: RouteParentStatus describes the status of a route with 1668 respect to an associated Parent. 1669 properties: 1670 conditions: 1671 description: "Conditions describes the status of the route with 1672 respect to the Gateway. Note that the route's availability 1673 is also subject to the Gateway's own status conditions and 1674 listener status. \n If the Route's ParentRef specifies an 1675 existing Gateway that supports Routes of this kind AND that 1676 Gateway's controller has sufficient access, then that Gateway's 1677 controller MUST set the \"Accepted\" condition on the Route, 1678 to indicate whether the route has been accepted or rejected 1679 by the Gateway, and why. \n A Route MUST be considered \"Accepted\" 1680 if at least one of the Route's rules is implemented by the 1681 Gateway. \n There are a number of cases where the \"Accepted\" 1682 condition may not be set due to lack of controller visibility, 1683 that includes when: \n * The Route refers to a non-existent 1684 parent. * The Route is of a type that the controller does 1685 not support. * The Route is in a namespace the controller 1686 does not have access to." 1687 items: 1688 description: "Condition contains details for one aspect of 1689 the current state of this API Resource. --- This struct 1690 is intended for direct use as an array at the field path 1691 .status.conditions. For example, \n type FooStatus struct{ 1692 // Represents the observations of a foo's current state. 1693 // Known .status.conditions.type are: \"Available\", \"Progressing\", 1694 and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge 1695 // +listType=map // +listMapKey=type Conditions []metav1.Condition 1696 `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" 1697 protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields 1698 }" 1699 properties: 1700 lastTransitionTime: 1701 description: lastTransitionTime is the last time the condition 1702 transitioned from one status to another. This should 1703 be when the underlying condition changed. If that is 1704 not known, then using the time when the API field changed 1705 is acceptable. 1706 format: date-time 1707 type: string 1708 message: 1709 description: message is a human readable message indicating 1710 details about the transition. This may be an empty string. 1711 maxLength: 32768 1712 type: string 1713 observedGeneration: 1714 description: observedGeneration represents the .metadata.generation 1715 that the condition was set based upon. For instance, 1716 if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration 1717 is 9, the condition is out of date with respect to the 1718 current state of the instance. 1719 format: int64 1720 minimum: 0 1721 type: integer 1722 reason: 1723 description: reason contains a programmatic identifier 1724 indicating the reason for the condition's last transition. 1725 Producers of specific condition types may define expected 1726 values and meanings for this field, and whether the 1727 values are considered a guaranteed API. The value should 1728 be a CamelCase string. This field may not be empty. 1729 maxLength: 1024 1730 minLength: 1 1731 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ 1732 type: string 1733 status: 1734 description: status of the condition, one of True, False, 1735 Unknown. 1736 enum: 1737 - "True" 1738 - "False" 1739 - Unknown 1740 type: string 1741 type: 1742 description: type of condition in CamelCase or in foo.example.com/CamelCase. 1743 --- Many .condition.type values are consistent across 1744 resources like Available, but because arbitrary conditions 1745 can be useful (see .node.status.conditions), the ability 1746 to deconflict is important. The regex it matches is 1747 (dns1123SubdomainFmt/)?(qualifiedNameFmt) 1748 maxLength: 316 1749 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])$ 1750 type: string 1751 required: 1752 - lastTransitionTime 1753 - message 1754 - reason 1755 - status 1756 - type 1757 type: object 1758 maxItems: 8 1759 minItems: 1 1760 type: array 1761 x-kubernetes-list-map-keys: 1762 - type 1763 x-kubernetes-list-type: map 1764 controllerName: 1765 description: "ControllerName is a domain/path string that indicates 1766 the name of the controller that wrote this status. This corresponds 1767 with the controllerName field on GatewayClass. \n Example: 1768 \"example.net/gateway-controller\". \n The format of this 1769 field is DOMAIN \"/\" PATH, where DOMAIN and PATH are valid 1770 Kubernetes names (https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names). 1771 \n Controllers MUST populate this field when writing status. 1772 Controllers should ensure that entries to status populated 1773 with their ControllerName are cleaned up when they are no 1774 longer necessary." 1775 maxLength: 253 1776 minLength: 1 1777 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$ 1778 type: string 1779 parentRef: 1780 description: ParentRef corresponds with a ParentRef in the spec 1781 that this RouteParentStatus struct describes the status of. 1782 properties: 1783 group: 1784 default: gateway.networking.k8s.io 1785 description: "Group is the group of the referent. When unspecified, 1786 \"gateway.networking.k8s.io\" is inferred. To set the 1787 core API group (such as for a \"Service\" kind referent), 1788 Group must be explicitly set to \"\" (empty string). \n 1789 Support: Core" 1790 maxLength: 253 1791 pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 1792 type: string 1793 kind: 1794 default: Gateway 1795 description: "Kind is kind of the referent. \n Support: 1796 Core (Gateway) \n Support: Implementation-specific (Other 1797 Resources)" 1798 maxLength: 63 1799 minLength: 1 1800 pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ 1801 type: string 1802 name: 1803 description: "Name is the name of the referent. \n Support: 1804 Core" 1805 maxLength: 253 1806 minLength: 1 1807 type: string 1808 namespace: 1809 description: "Namespace is the namespace of the referent. 1810 When unspecified, this refers to the local namespace of 1811 the Route. \n Note that there are specific rules for ParentRefs 1812 which cross namespace boundaries. Cross-namespace references 1813 are only valid if they are explicitly allowed by something 1814 in the namespace they are referring to. For example: Gateway 1815 has the AllowedRoutes field, and ReferenceGrant provides 1816 a generic way to enable any other kind of cross-namespace 1817 reference. \n Support: Core" 1818 maxLength: 63 1819 minLength: 1 1820 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ 1821 type: string 1822 sectionName: 1823 description: "SectionName is the name of a section within 1824 the target resource. In the following resources, SectionName 1825 is interpreted as the following: \n * Gateway: Listener 1826 Name. When both Port (experimental) and SectionName are 1827 specified, the name and port of the selected listener 1828 must match both specified values. \n Implementations MAY 1829 choose to support attaching Routes to other resources. 1830 If that is the case, they MUST clearly document how SectionName 1831 is interpreted. \n When unspecified (empty string), this 1832 will reference the entire resource. For the purpose of 1833 status, an attachment is considered successful if at least 1834 one section in the parent resource accepts it. For example, 1835 Gateway listeners can restrict which Routes can attach 1836 to them by Route kind, namespace, or hostname. If 1 of 1837 2 Gateway listeners accept attachment from the referencing 1838 Route, the Route MUST be considered successfully attached. 1839 If no Gateway listeners accept attachment from this Route, 1840 the Route MUST be considered detached from the Gateway. 1841 \n Support: Core" 1842 maxLength: 253 1843 minLength: 1 1844 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 1845 type: string 1846 required: 1847 - name 1848 type: object 1849 required: 1850 - controllerName 1851 - parentRef 1852 type: object 1853 maxItems: 32 1854 type: array 1855 required: 1856 - parents 1857 type: object 1858 required: 1859 - spec 1860 type: object 1861 served: true 1862 storage: false 1863 subresources: 1864 status: {} 1865 - additionalPrinterColumns: 1866 - jsonPath: .spec.hostnames 1867 name: Hostnames 1868 type: string 1869 - jsonPath: .metadata.creationTimestamp 1870 name: Age 1871 type: date 1872 name: v1beta1 1873 schema: 1874 openAPIV3Schema: 1875 description: HTTPRoute provides a way to route HTTP requests. This includes 1876 the capability to match requests by hostname, path, header, or query param. 1877 Filters can be used to specify additional processing steps. Backends specify 1878 where matching requests should be routed. 1879 properties: 1880 apiVersion: 1881 description: 'APIVersion defines the versioned schema of this representation 1882 of an object. Servers should convert recognized schemas to the latest 1883 internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' 1884 type: string 1885 kind: 1886 description: 'Kind is a string value representing the REST resource this 1887 object represents. Servers may infer this from the endpoint the client 1888 submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' 1889 type: string 1890 metadata: 1891 type: object 1892 spec: 1893 description: Spec defines the desired state of HTTPRoute. 1894 properties: 1895 hostnames: 1896 description: "Hostnames defines a set of hostname that should match 1897 against the HTTP Host header to select a HTTPRoute to process the 1898 request. This matches the RFC 1123 definition of a hostname with 1899 2 notable exceptions: \n 1. IPs are not allowed. 2. A hostname may 1900 be prefixed with a wildcard label (`*.`). The wildcard label must 1901 appear by itself as the first label. \n If a hostname is specified 1902 by both the Listener and HTTPRoute, there must be at least one intersecting 1903 hostname for the HTTPRoute to be attached to the Listener. For example: 1904 \n * A Listener with `test.example.com` as the hostname matches 1905 HTTPRoutes that have either not specified any hostnames, or have 1906 specified at least one of `test.example.com` or `*.example.com`. 1907 * A Listener with `*.example.com` as the hostname matches HTTPRoutes 1908 that have either not specified any hostnames or have specified at 1909 least one hostname that matches the Listener hostname. For example, 1910 `*.example.com`, `test.example.com`, and `foo.test.example.com` 1911 would all match. On the other hand, `example.com` and `test.example.net` 1912 would not match. \n Hostnames that are prefixed with a wildcard 1913 label (`*.`) are interpreted as a suffix match. That means that 1914 a match for `*.example.com` would match both `test.example.com`, 1915 and `foo.test.example.com`, but not `example.com`. \n If both the 1916 Listener and HTTPRoute have specified hostnames, any HTTPRoute hostnames 1917 that do not match the Listener hostname MUST be ignored. For example, 1918 if a Listener specified `*.example.com`, and the HTTPRoute specified 1919 `test.example.com` and `test.example.net`, `test.example.net` must 1920 not be considered for a match. \n If both the Listener and HTTPRoute 1921 have specified hostnames, and none match with the criteria above, 1922 then the HTTPRoute is not accepted. The implementation must raise 1923 an 'Accepted' Condition with a status of `False` in the corresponding 1924 RouteParentStatus. \n In the event that multiple HTTPRoutes specify 1925 intersecting hostnames (e.g. overlapping wildcard matching and exact 1926 matching hostnames), precedence must be given to rules from the 1927 HTTPRoute with the largest number of: \n * Characters in a matching 1928 non-wildcard hostname. * Characters in a matching hostname. \n If 1929 ties exist across multiple Routes, the matching precedence rules 1930 for HTTPRouteMatches takes over. \n Support: Core" 1931 items: 1932 description: "Hostname is the fully qualified domain name of a network 1933 host. This matches the RFC 1123 definition of a hostname with 1934 2 notable exceptions: \n 1. IPs are not allowed. 2. A hostname 1935 may be prefixed with a wildcard label (`*.`). The wildcard label 1936 must appear by itself as the first label. \n Hostname can be \"precise\" 1937 which is a domain name without the terminating dot of a network 1938 host (e.g. \"foo.example.com\") or \"wildcard\", which is a domain 1939 name prefixed with a single wildcard label (e.g. `*.example.com`). 1940 \n Note that as per RFC1035 and RFC1123, a *label* must consist 1941 of lower case alphanumeric characters or '-', and must start and 1942 end with an alphanumeric character. No other punctuation is allowed." 1943 maxLength: 253 1944 minLength: 1 1945 pattern: ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 1946 type: string 1947 maxItems: 16 1948 type: array 1949 parentRefs: 1950 description: "ParentRefs references the resources (usually Gateways) 1951 that a Route wants to be attached to. Note that the referenced parent 1952 resource needs to allow this for the attachment to be complete. 1953 For Gateways, that means the Gateway needs to allow attachment from 1954 Routes of this kind and namespace. \n The only kind of parent resource 1955 with \"Core\" support is Gateway. This API may be extended in the 1956 future to support additional kinds of parent resources such as one 1957 of the route kinds. \n It is invalid to reference an identical parent 1958 more than once. It is valid to reference multiple distinct sections 1959 within the same parent resource, such as 2 Listeners within a Gateway. 1960 \n It is possible to separately reference multiple distinct objects 1961 that may be collapsed by an implementation. For example, some implementations 1962 may choose to merge compatible Gateway Listeners together. If that 1963 is the case, the list of routes attached to those resources should 1964 also be merged. \n Note that for ParentRefs that cross namespace 1965 boundaries, there are specific rules. Cross-namespace references 1966 are only valid if they are explicitly allowed by something in the 1967 namespace they are referring to. For example, Gateway has the AllowedRoutes 1968 field, and ReferenceGrant provides a generic way to enable any other 1969 kind of cross-namespace reference." 1970 items: 1971 description: "ParentReference identifies an API object (usually 1972 a Gateway) that can be considered a parent of this resource (usually 1973 a route). The only kind of parent resource with \"Core\" support 1974 is Gateway. This API may be extended in the future to support 1975 additional kinds of parent resources, such as HTTPRoute. \n The 1976 API object must be valid in the cluster; the Group and Kind must 1977 be registered in the cluster for this reference to be valid." 1978 properties: 1979 group: 1980 default: gateway.networking.k8s.io 1981 description: "Group is the group of the referent. When unspecified, 1982 \"gateway.networking.k8s.io\" is inferred. To set the core 1983 API group (such as for a \"Service\" kind referent), Group 1984 must be explicitly set to \"\" (empty string). \n Support: 1985 Core" 1986 maxLength: 253 1987 pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 1988 type: string 1989 kind: 1990 default: Gateway 1991 description: "Kind is kind of the referent. \n Support: Core 1992 (Gateway) \n Support: Implementation-specific (Other Resources)" 1993 maxLength: 63 1994 minLength: 1 1995 pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ 1996 type: string 1997 name: 1998 description: "Name is the name of the referent. \n Support: 1999 Core" 2000 maxLength: 253 2001 minLength: 1 2002 type: string 2003 namespace: 2004 description: "Namespace is the namespace of the referent. When 2005 unspecified, this refers to the local namespace of the Route. 2006 \n Note that there are specific rules for ParentRefs which 2007 cross namespace boundaries. Cross-namespace references are 2008 only valid if they are explicitly allowed by something in 2009 the namespace they are referring to. For example: Gateway 2010 has the AllowedRoutes field, and ReferenceGrant provides a 2011 generic way to enable any other kind of cross-namespace reference. 2012 \n Support: Core" 2013 maxLength: 63 2014 minLength: 1 2015 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ 2016 type: string 2017 sectionName: 2018 description: "SectionName is the name of a section within the 2019 target resource. In the following resources, SectionName is 2020 interpreted as the following: \n * Gateway: Listener Name. 2021 When both Port (experimental) and SectionName are specified, 2022 the name and port of the selected listener must match both 2023 specified values. \n Implementations MAY choose to support 2024 attaching Routes to other resources. If that is the case, 2025 they MUST clearly document how SectionName is interpreted. 2026 \n When unspecified (empty string), this will reference the 2027 entire resource. For the purpose of status, an attachment 2028 is considered successful if at least one section in the parent 2029 resource accepts it. For example, Gateway listeners can restrict 2030 which Routes can attach to them by Route kind, namespace, 2031 or hostname. If 1 of 2 Gateway listeners accept attachment 2032 from the referencing Route, the Route MUST be considered successfully 2033 attached. If no Gateway listeners accept attachment from this 2034 Route, the Route MUST be considered detached from the Gateway. 2035 \n Support: Core" 2036 maxLength: 253 2037 minLength: 1 2038 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 2039 type: string 2040 required: 2041 - name 2042 type: object 2043 maxItems: 32 2044 type: array 2045 rules: 2046 default: 2047 - matches: 2048 - path: 2049 type: PathPrefix 2050 value: / 2051 description: Rules are a list of HTTP matchers, filters and actions. 2052 items: 2053 description: HTTPRouteRule defines semantics for matching an HTTP 2054 request based on conditions (matches), processing it (filters), 2055 and forwarding the request to an API object (backendRefs). 2056 properties: 2057 backendRefs: 2058 description: "BackendRefs defines the backend(s) where matching 2059 requests should be sent. \n Failure behavior here depends 2060 on how many BackendRefs are specified and how many are invalid. 2061 \n If *all* entries in BackendRefs are invalid, and there 2062 are also no filters specified in this route rule, *all* traffic 2063 which matches this rule MUST receive a 500 status code. \n 2064 See the HTTPBackendRef definition for the rules about what 2065 makes a single HTTPBackendRef invalid. \n When a HTTPBackendRef 2066 is invalid, 500 status codes MUST be returned for requests 2067 that would have otherwise been routed to an invalid backend. 2068 If multiple backends are specified, and some are invalid, 2069 the proportion of requests that would otherwise have been 2070 routed to an invalid backend MUST receive a 500 status code. 2071 \n For example, if two backends are specified with equal weights, 2072 and one is invalid, 50 percent of traffic must receive a 500. 2073 Implementations may choose how that 50 percent is determined. 2074 \n Support: Core for Kubernetes Service \n Support: Extended 2075 for Kubernetes ServiceImport \n Support: Implementation-specific 2076 for any other resource \n Support for weight: Core" 2077 items: 2078 description: HTTPBackendRef defines how a HTTPRoute should 2079 forward an HTTP request. 2080 properties: 2081 filters: 2082 description: "Filters defined at this level should be 2083 executed if and only if the request is being forwarded 2084 to the backend defined here. \n Support: Implementation-specific 2085 (For broader support of filters, use the Filters field 2086 in HTTPRouteRule.)" 2087 items: 2088 description: HTTPRouteFilter defines processing steps 2089 that must be completed during the request or response 2090 lifecycle. HTTPRouteFilters are meant as an extension 2091 point to express processing that may be done in Gateway 2092 implementations. Some examples include request or 2093 response modification, implementing authentication 2094 strategies, rate-limiting, and traffic shaping. API 2095 guarantee/conformance is defined based on the type 2096 of the filter. 2097 properties: 2098 extensionRef: 2099 description: "ExtensionRef is an optional, implementation-specific 2100 extension to the \"filter\" behavior. For example, 2101 resource \"myroutefilter\" in group \"networking.example.net\"). 2102 ExtensionRef MUST NOT be used for core and extended 2103 filters. \n Support: Implementation-specific" 2104 properties: 2105 group: 2106 description: Group is the group of the referent. 2107 For example, "gateway.networking.k8s.io". 2108 When unspecified or empty string, core API 2109 group is inferred. 2110 maxLength: 253 2111 pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 2112 type: string 2113 kind: 2114 description: Kind is kind of the referent. For 2115 example "HTTPRoute" or "Service". 2116 maxLength: 63 2117 minLength: 1 2118 pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ 2119 type: string 2120 name: 2121 description: Name is the name of the referent. 2122 maxLength: 253 2123 minLength: 1 2124 type: string 2125 required: 2126 - group 2127 - kind 2128 - name 2129 type: object 2130 requestHeaderModifier: 2131 description: "RequestHeaderModifier defines a schema 2132 for a filter that modifies request headers. \n 2133 Support: Core" 2134 properties: 2135 add: 2136 description: "Add adds the given header(s) (name, 2137 value) to the request before the action. It 2138 appends to any existing values associated 2139 with the header name. \n Input: GET /foo HTTP/1.1 2140 my-header: foo \n Config: add: - name: \"my-header\" 2141 value: \"bar,baz\" \n Output: GET /foo HTTP/1.1 2142 my-header: foo,bar,baz" 2143 items: 2144 description: HTTPHeader represents an HTTP 2145 Header name and value as defined by RFC 2146 7230. 2147 properties: 2148 name: 2149 description: "Name is the name of the 2150 HTTP Header to be matched. Name matching 2151 MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 2152 \n If multiple entries specify equivalent 2153 header names, the first entry with an 2154 equivalent name MUST be considered for 2155 a match. Subsequent entries with an 2156 equivalent header name MUST be ignored. 2157 Due to the case-insensitivity of header 2158 names, \"foo\" and \"Foo\" are considered 2159 equivalent." 2160 maxLength: 256 2161 minLength: 1 2162 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 2163 type: string 2164 value: 2165 description: Value is the value of HTTP 2166 Header to be matched. 2167 maxLength: 4096 2168 minLength: 1 2169 type: string 2170 required: 2171 - name 2172 - value 2173 type: object 2174 maxItems: 16 2175 type: array 2176 x-kubernetes-list-map-keys: 2177 - name 2178 x-kubernetes-list-type: map 2179 remove: 2180 description: "Remove the given header(s) from 2181 the HTTP request before the action. The value 2182 of Remove is a list of HTTP header names. 2183 Note that the header names are case-insensitive 2184 (see https://datatracker.ietf.org/doc/html/rfc2616#section-4.2). 2185 \n Input: GET /foo HTTP/1.1 my-header1: foo 2186 my-header2: bar my-header3: baz \n Config: 2187 remove: [\"my-header1\", \"my-header3\"] \n 2188 Output: GET /foo HTTP/1.1 my-header2: bar" 2189 items: 2190 type: string 2191 maxItems: 16 2192 type: array 2193 set: 2194 description: "Set overwrites the request with 2195 the given header (name, value) before the 2196 action. \n Input: GET /foo HTTP/1.1 my-header: 2197 foo \n Config: set: - name: \"my-header\" 2198 value: \"bar\" \n Output: GET /foo HTTP/1.1 2199 my-header: bar" 2200 items: 2201 description: HTTPHeader represents an HTTP 2202 Header name and value as defined by RFC 2203 7230. 2204 properties: 2205 name: 2206 description: "Name is the name of the 2207 HTTP Header to be matched. Name matching 2208 MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 2209 \n If multiple entries specify equivalent 2210 header names, the first entry with an 2211 equivalent name MUST be considered for 2212 a match. Subsequent entries with an 2213 equivalent header name MUST be ignored. 2214 Due to the case-insensitivity of header 2215 names, \"foo\" and \"Foo\" are considered 2216 equivalent." 2217 maxLength: 256 2218 minLength: 1 2219 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 2220 type: string 2221 value: 2222 description: Value is the value of HTTP 2223 Header to be matched. 2224 maxLength: 4096 2225 minLength: 1 2226 type: string 2227 required: 2228 - name 2229 - value 2230 type: object 2231 maxItems: 16 2232 type: array 2233 x-kubernetes-list-map-keys: 2234 - name 2235 x-kubernetes-list-type: map 2236 type: object 2237 requestMirror: 2238 description: "RequestMirror defines a schema for 2239 a filter that mirrors requests. Requests are sent 2240 to the specified destination, but responses from 2241 that destination are ignored. \n Support: Extended" 2242 properties: 2243 backendRef: 2244 description: "BackendRef references a resource 2245 where mirrored requests are sent. \n If the 2246 referent cannot be found, this BackendRef 2247 is invalid and must be dropped from the Gateway. 2248 The controller must ensure the \"ResolvedRefs\" 2249 condition on the Route status is set to `status: 2250 False` and not configure this backend in the 2251 underlying implementation. \n If there is 2252 a cross-namespace reference to an *existing* 2253 object that is not allowed by a ReferenceGrant, 2254 the controller must ensure the \"ResolvedRefs\" 2255 \ condition on the Route is set to `status: 2256 False`, with the \"RefNotPermitted\" reason 2257 and not configure this backend in the underlying 2258 implementation. \n In either error case, the 2259 Message of the `ResolvedRefs` Condition should 2260 be used to provide more detail about the problem. 2261 \n Support: Extended for Kubernetes Service 2262 \n Support: Implementation-specific for any 2263 other resource" 2264 properties: 2265 group: 2266 default: "" 2267 description: Group is the group of the referent. 2268 For example, "gateway.networking.k8s.io". 2269 When unspecified or empty string, core 2270 API group is inferred. 2271 maxLength: 253 2272 pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 2273 type: string 2274 kind: 2275 default: Service 2276 description: "Kind is the Kubernetes resource 2277 kind of the referent. For example \"Service\". 2278 \n Defaults to \"Service\" when not specified. 2279 \n ExternalName services can refer to 2280 CNAME DNS records that may live outside 2281 of the cluster and as such are difficult 2282 to reason about in terms of conformance. 2283 They also may not be safe to forward to 2284 (see CVE-2021-25740 for more information). 2285 Implementations SHOULD NOT support ExternalName 2286 Services. \n Support: Core (Services with 2287 a type other than ExternalName) \n Support: 2288 Implementation-specific (Services with 2289 type ExternalName)" 2290 maxLength: 63 2291 minLength: 1 2292 pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ 2293 type: string 2294 name: 2295 description: Name is the name of the referent. 2296 maxLength: 253 2297 minLength: 1 2298 type: string 2299 namespace: 2300 description: "Namespace is the namespace 2301 of the backend. When unspecified, the 2302 local namespace is inferred. \n Note that 2303 when a namespace is specified, a ReferenceGrant 2304 object is required in the referent namespace 2305 to allow that namespace's owner to accept 2306 the reference. See the ReferenceGrant 2307 documentation for details. \n Support: 2308 Core" 2309 maxLength: 63 2310 minLength: 1 2311 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ 2312 type: string 2313 port: 2314 description: Port specifies the destination 2315 port number to use for this resource. 2316 Port is required when the referent is 2317 a Kubernetes Service. In this case, the 2318 port number is the service port number, 2319 not the target port. For other resources, 2320 destination port might be derived from 2321 the referent resource or this field. 2322 format: int32 2323 maximum: 65535 2324 minimum: 1 2325 type: integer 2326 required: 2327 - name 2328 type: object 2329 required: 2330 - backendRef 2331 type: object 2332 requestRedirect: 2333 description: "RequestRedirect defines a schema for 2334 a filter that responds to the request with an 2335 HTTP redirection. \n Support: Core" 2336 properties: 2337 hostname: 2338 description: "Hostname is the hostname to be 2339 used in the value of the `Location` header 2340 in the response. When empty, the hostname 2341 in the `Host` header of the request is used. 2342 \n Support: Core" 2343 maxLength: 253 2344 minLength: 1 2345 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 2346 type: string 2347 path: 2348 description: "Path defines parameters used to 2349 modify the path of the incoming request. The 2350 modified path is then used to construct the 2351 `Location` header. When empty, the request 2352 path is used as-is. \n Support: Extended" 2353 properties: 2354 replaceFullPath: 2355 description: ReplaceFullPath specifies the 2356 value with which to replace the full path 2357 of a request during a rewrite or redirect. 2358 maxLength: 1024 2359 type: string 2360 replacePrefixMatch: 2361 description: "ReplacePrefixMatch specifies 2362 the value with which to replace the prefix 2363 match of a request during a rewrite or 2364 redirect. For example, a request to \"/foo/bar\" 2365 with a prefix match of \"/foo\" would 2366 be modified to \"/bar\". \n Note that 2367 this matches the behavior of the PathPrefix 2368 match type. This matches full path elements. 2369 A path element refers to the list of labels 2370 in the path split by the `/` separator. 2371 When specified, a trailing `/` is ignored. 2372 For example, the paths `/abc`, `/abc/`, 2373 and `/abc/def` would all match the prefix 2374 `/abc`, but the path `/abcd` would not." 2375 maxLength: 1024 2376 type: string 2377 type: 2378 description: "Type defines the type of path 2379 modifier. Additional types may be added 2380 in a future release of the API. \n Note 2381 that values may be added to this enum, 2382 implementations must ensure that unknown 2383 values will not cause a crash. \n Unknown 2384 values here must result in the implementation 2385 setting the Accepted Condition for the 2386 Route to `status: False`, with a Reason 2387 of `UnsupportedValue`." 2388 enum: 2389 - ReplaceFullPath 2390 - ReplacePrefixMatch 2391 type: string 2392 required: 2393 - type 2394 type: object 2395 port: 2396 description: "Port is the port to be used in 2397 the value of the `Location` header in the 2398 response. \n When empty, the Gateway Listener 2399 port is used. \n Implementations SHOULD NOT 2400 add the port number in the 'Location' header 2401 in the following cases: \n * A Location header 2402 that will use HTTP (whether that is determined 2403 via the Listener protocol or the Scheme field) 2404 _and_ use port 80. * A Location header that 2405 will use HTTPS (whether that is determined 2406 via the Listener protocol or the Scheme field) 2407 _and_ use port 443. \n Support: Extended" 2408 format: int32 2409 maximum: 65535 2410 minimum: 1 2411 type: integer 2412 scheme: 2413 description: "Scheme is the scheme to be used 2414 in the value of the `Location` header in the 2415 response. When empty, the scheme of the request 2416 is used. \n Note that values may be added 2417 to this enum, implementations must ensure 2418 that unknown values will not cause a crash. 2419 \n Unknown values here must result in the 2420 implementation setting the Accepted Condition 2421 for the Route to `status: False`, with a Reason 2422 of `UnsupportedValue`. \n Support: Extended" 2423 enum: 2424 - http 2425 - https 2426 type: string 2427 statusCode: 2428 default: 302 2429 description: "StatusCode is the HTTP status 2430 code to be used in response. \n Note that 2431 values may be added to this enum, implementations 2432 must ensure that unknown values will not cause 2433 a crash. \n Unknown values here must result 2434 in the implementation setting the Accepted 2435 Condition for the Route to `status: False`, 2436 with a Reason of `UnsupportedValue`. \n Support: 2437 Core" 2438 enum: 2439 - 301 2440 - 302 2441 type: integer 2442 type: object 2443 responseHeaderModifier: 2444 description: "ResponseHeaderModifier defines a schema 2445 for a filter that modifies response headers. \n 2446 Support: Extended" 2447 properties: 2448 add: 2449 description: "Add adds the given header(s) (name, 2450 value) to the request before the action. It 2451 appends to any existing values associated 2452 with the header name. \n Input: GET /foo HTTP/1.1 2453 my-header: foo \n Config: add: - name: \"my-header\" 2454 value: \"bar,baz\" \n Output: GET /foo HTTP/1.1 2455 my-header: foo,bar,baz" 2456 items: 2457 description: HTTPHeader represents an HTTP 2458 Header name and value as defined by RFC 2459 7230. 2460 properties: 2461 name: 2462 description: "Name is the name of the 2463 HTTP Header to be matched. Name matching 2464 MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 2465 \n If multiple entries specify equivalent 2466 header names, the first entry with an 2467 equivalent name MUST be considered for 2468 a match. Subsequent entries with an 2469 equivalent header name MUST be ignored. 2470 Due to the case-insensitivity of header 2471 names, \"foo\" and \"Foo\" are considered 2472 equivalent." 2473 maxLength: 256 2474 minLength: 1 2475 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 2476 type: string 2477 value: 2478 description: Value is the value of HTTP 2479 Header to be matched. 2480 maxLength: 4096 2481 minLength: 1 2482 type: string 2483 required: 2484 - name 2485 - value 2486 type: object 2487 maxItems: 16 2488 type: array 2489 x-kubernetes-list-map-keys: 2490 - name 2491 x-kubernetes-list-type: map 2492 remove: 2493 description: "Remove the given header(s) from 2494 the HTTP request before the action. The value 2495 of Remove is a list of HTTP header names. 2496 Note that the header names are case-insensitive 2497 (see https://datatracker.ietf.org/doc/html/rfc2616#section-4.2). 2498 \n Input: GET /foo HTTP/1.1 my-header1: foo 2499 my-header2: bar my-header3: baz \n Config: 2500 remove: [\"my-header1\", \"my-header3\"] \n 2501 Output: GET /foo HTTP/1.1 my-header2: bar" 2502 items: 2503 type: string 2504 maxItems: 16 2505 type: array 2506 set: 2507 description: "Set overwrites the request with 2508 the given header (name, value) before the 2509 action. \n Input: GET /foo HTTP/1.1 my-header: 2510 foo \n Config: set: - name: \"my-header\" 2511 value: \"bar\" \n Output: GET /foo HTTP/1.1 2512 my-header: bar" 2513 items: 2514 description: HTTPHeader represents an HTTP 2515 Header name and value as defined by RFC 2516 7230. 2517 properties: 2518 name: 2519 description: "Name is the name of the 2520 HTTP Header to be matched. Name matching 2521 MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 2522 \n If multiple entries specify equivalent 2523 header names, the first entry with an 2524 equivalent name MUST be considered for 2525 a match. Subsequent entries with an 2526 equivalent header name MUST be ignored. 2527 Due to the case-insensitivity of header 2528 names, \"foo\" and \"Foo\" are considered 2529 equivalent." 2530 maxLength: 256 2531 minLength: 1 2532 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 2533 type: string 2534 value: 2535 description: Value is the value of HTTP 2536 Header to be matched. 2537 maxLength: 4096 2538 minLength: 1 2539 type: string 2540 required: 2541 - name 2542 - value 2543 type: object 2544 maxItems: 16 2545 type: array 2546 x-kubernetes-list-map-keys: 2547 - name 2548 x-kubernetes-list-type: map 2549 type: object 2550 type: 2551 description: "Type identifies the type of filter 2552 to apply. As with other API fields, types are 2553 classified into three conformance levels: \n - 2554 Core: Filter types and their corresponding configuration 2555 defined by \"Support: Core\" in this package, 2556 e.g. \"RequestHeaderModifier\". All implementations 2557 must support core filters. \n - Extended: Filter 2558 types and their corresponding configuration defined 2559 by \"Support: Extended\" in this package, e.g. 2560 \"RequestMirror\". Implementers are encouraged 2561 to support extended filters. \n - Implementation-specific: 2562 Filters that are defined and supported by specific 2563 vendors. In the future, filters showing convergence 2564 in behavior across multiple implementations will 2565 be considered for inclusion in extended or core 2566 conformance levels. Filter-specific configuration 2567 for such filters is specified using the ExtensionRef 2568 field. `Type` should be set to \"ExtensionRef\" 2569 for custom filters. \n Implementers are encouraged 2570 to define custom implementation types to extend 2571 the core API with implementation-specific behavior. 2572 \n If a reference to a custom filter type cannot 2573 be resolved, the filter MUST NOT be skipped. Instead, 2574 requests that would have been processed by that 2575 filter MUST receive a HTTP error response. \n 2576 Note that values may be added to this enum, implementations 2577 must ensure that unknown values will not cause 2578 a crash. \n Unknown values here must result in 2579 the implementation setting the Accepted Condition 2580 for the Route to `status: False`, with a Reason 2581 of `UnsupportedValue`." 2582 enum: 2583 - RequestHeaderModifier 2584 - ResponseHeaderModifier 2585 - RequestMirror 2586 - RequestRedirect 2587 - URLRewrite 2588 - ExtensionRef 2589 type: string 2590 urlRewrite: 2591 description: "URLRewrite defines a schema for a 2592 filter that modifies a request during forwarding. 2593 \n Support: Extended" 2594 properties: 2595 hostname: 2596 description: "Hostname is the value to be used 2597 to replace the Host header value during forwarding. 2598 \n Support: Extended" 2599 maxLength: 253 2600 minLength: 1 2601 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 2602 type: string 2603 path: 2604 description: "Path defines a path rewrite. \n 2605 Support: Extended" 2606 properties: 2607 replaceFullPath: 2608 description: ReplaceFullPath specifies the 2609 value with which to replace the full path 2610 of a request during a rewrite or redirect. 2611 maxLength: 1024 2612 type: string 2613 replacePrefixMatch: 2614 description: "ReplacePrefixMatch specifies 2615 the value with which to replace the prefix 2616 match of a request during a rewrite or 2617 redirect. For example, a request to \"/foo/bar\" 2618 with a prefix match of \"/foo\" would 2619 be modified to \"/bar\". \n Note that 2620 this matches the behavior of the PathPrefix 2621 match type. This matches full path elements. 2622 A path element refers to the list of labels 2623 in the path split by the `/` separator. 2624 When specified, a trailing `/` is ignored. 2625 For example, the paths `/abc`, `/abc/`, 2626 and `/abc/def` would all match the prefix 2627 `/abc`, but the path `/abcd` would not." 2628 maxLength: 1024 2629 type: string 2630 type: 2631 description: "Type defines the type of path 2632 modifier. Additional types may be added 2633 in a future release of the API. \n Note 2634 that values may be added to this enum, 2635 implementations must ensure that unknown 2636 values will not cause a crash. \n Unknown 2637 values here must result in the implementation 2638 setting the Accepted Condition for the 2639 Route to `status: False`, with a Reason 2640 of `UnsupportedValue`." 2641 enum: 2642 - ReplaceFullPath 2643 - ReplacePrefixMatch 2644 type: string 2645 required: 2646 - type 2647 type: object 2648 type: object 2649 required: 2650 - type 2651 type: object 2652 maxItems: 16 2653 type: array 2654 group: 2655 default: "" 2656 description: Group is the group of the referent. For example, 2657 "gateway.networking.k8s.io". When unspecified or empty 2658 string, core API group is inferred. 2659 maxLength: 253 2660 pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 2661 type: string 2662 kind: 2663 default: Service 2664 description: "Kind is the Kubernetes resource kind of 2665 the referent. For example \"Service\". \n Defaults to 2666 \"Service\" when not specified. \n ExternalName services 2667 can refer to CNAME DNS records that may live outside 2668 of the cluster and as such are difficult to reason about 2669 in terms of conformance. They also may not be safe to 2670 forward to (see CVE-2021-25740 for more information). 2671 Implementations SHOULD NOT support ExternalName Services. 2672 \n Support: Core (Services with a type other than ExternalName) 2673 \n Support: Implementation-specific (Services with type 2674 ExternalName)" 2675 maxLength: 63 2676 minLength: 1 2677 pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ 2678 type: string 2679 name: 2680 description: Name is the name of the referent. 2681 maxLength: 253 2682 minLength: 1 2683 type: string 2684 namespace: 2685 description: "Namespace is the namespace of the backend. 2686 When unspecified, the local namespace is inferred. \n 2687 Note that when a namespace is specified, a ReferenceGrant 2688 object is required in the referent namespace to allow 2689 that namespace's owner to accept the reference. See 2690 the ReferenceGrant documentation for details. \n Support: 2691 Core" 2692 maxLength: 63 2693 minLength: 1 2694 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ 2695 type: string 2696 port: 2697 description: Port specifies the destination port number 2698 to use for this resource. Port is required when the 2699 referent is a Kubernetes Service. In this case, the 2700 port number is the service port number, not the target 2701 port. For other resources, destination port might be 2702 derived from the referent resource or this field. 2703 format: int32 2704 maximum: 65535 2705 minimum: 1 2706 type: integer 2707 weight: 2708 default: 1 2709 description: "Weight specifies the proportion of requests 2710 forwarded to the referenced backend. This is computed 2711 as weight/(sum of all weights in this BackendRefs list). 2712 For non-zero values, there may be some epsilon from 2713 the exact proportion defined here depending on the precision 2714 an implementation supports. Weight is not a percentage 2715 and the sum of weights does not need to equal 100. \n 2716 If only one backend is specified and it has a weight 2717 greater than 0, 100% of the traffic is forwarded to 2718 that backend. If weight is set to 0, no traffic should 2719 be forwarded for this entry. If unspecified, weight 2720 defaults to 1. \n Support for this field varies based 2721 on the context where used." 2722 format: int32 2723 maximum: 1000000 2724 minimum: 0 2725 type: integer 2726 required: 2727 - name 2728 type: object 2729 maxItems: 16 2730 type: array 2731 filters: 2732 description: "Filters define the filters that are applied to 2733 requests that match this rule. \n The effects of ordering 2734 of multiple behaviors are currently unspecified. This can 2735 change in the future based on feedback during the alpha stage. 2736 \n Conformance-levels at this level are defined based on the 2737 type of filter: \n - ALL core filters MUST be supported by 2738 all implementations. - Implementers are encouraged to support 2739 extended filters. - Implementation-specific custom filters 2740 have no API guarantees across implementations. \n Specifying 2741 a core filter multiple times has unspecified or implementation-specific 2742 conformance. \n All filters are expected to be compatible 2743 with each other except for the URLRewrite and RequestRedirect 2744 filters, which may not be combined. If an implementation can 2745 not support other combinations of filters, they must clearly 2746 document that limitation. In all cases where incompatible 2747 or unsupported filters are specified, implementations MUST 2748 add a warning condition to status. \n Support: Core" 2749 items: 2750 description: HTTPRouteFilter defines processing steps that 2751 must be completed during the request or response lifecycle. 2752 HTTPRouteFilters are meant as an extension point to express 2753 processing that may be done in Gateway implementations. 2754 Some examples include request or response modification, 2755 implementing authentication strategies, rate-limiting, and 2756 traffic shaping. API guarantee/conformance is defined based 2757 on the type of the filter. 2758 properties: 2759 extensionRef: 2760 description: "ExtensionRef is an optional, implementation-specific 2761 extension to the \"filter\" behavior. For example, 2762 resource \"myroutefilter\" in group \"networking.example.net\"). 2763 ExtensionRef MUST NOT be used for core and extended 2764 filters. \n Support: Implementation-specific" 2765 properties: 2766 group: 2767 description: Group is the group of the referent. For 2768 example, "gateway.networking.k8s.io". When unspecified 2769 or empty string, core API group is inferred. 2770 maxLength: 253 2771 pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 2772 type: string 2773 kind: 2774 description: Kind is kind of the referent. For example 2775 "HTTPRoute" or "Service". 2776 maxLength: 63 2777 minLength: 1 2778 pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ 2779 type: string 2780 name: 2781 description: Name is the name of the referent. 2782 maxLength: 253 2783 minLength: 1 2784 type: string 2785 required: 2786 - group 2787 - kind 2788 - name 2789 type: object 2790 requestHeaderModifier: 2791 description: "RequestHeaderModifier defines a schema for 2792 a filter that modifies request headers. \n Support: 2793 Core" 2794 properties: 2795 add: 2796 description: "Add adds the given header(s) (name, 2797 value) to the request before the action. It appends 2798 to any existing values associated with the header 2799 name. \n Input: GET /foo HTTP/1.1 my-header: foo 2800 \n Config: add: - name: \"my-header\" value: \"bar,baz\" 2801 \n Output: GET /foo HTTP/1.1 my-header: foo,bar,baz" 2802 items: 2803 description: HTTPHeader represents an HTTP Header 2804 name and value as defined by RFC 7230. 2805 properties: 2806 name: 2807 description: "Name is the name of the HTTP Header 2808 to be matched. Name matching MUST be case 2809 insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 2810 \n If multiple entries specify equivalent 2811 header names, the first entry with an equivalent 2812 name MUST be considered for a match. Subsequent 2813 entries with an equivalent header name MUST 2814 be ignored. Due to the case-insensitivity 2815 of header names, \"foo\" and \"Foo\" are considered 2816 equivalent." 2817 maxLength: 256 2818 minLength: 1 2819 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 2820 type: string 2821 value: 2822 description: Value is the value of HTTP Header 2823 to be matched. 2824 maxLength: 4096 2825 minLength: 1 2826 type: string 2827 required: 2828 - name 2829 - value 2830 type: object 2831 maxItems: 16 2832 type: array 2833 x-kubernetes-list-map-keys: 2834 - name 2835 x-kubernetes-list-type: map 2836 remove: 2837 description: "Remove the given header(s) from the 2838 HTTP request before the action. The value of Remove 2839 is a list of HTTP header names. Note that the header 2840 names are case-insensitive (see https://datatracker.ietf.org/doc/html/rfc2616#section-4.2). 2841 \n Input: GET /foo HTTP/1.1 my-header1: foo my-header2: 2842 bar my-header3: baz \n Config: remove: [\"my-header1\", 2843 \"my-header3\"] \n Output: GET /foo HTTP/1.1 my-header2: 2844 bar" 2845 items: 2846 type: string 2847 maxItems: 16 2848 type: array 2849 set: 2850 description: "Set overwrites the request with the 2851 given header (name, value) before the action. \n 2852 Input: GET /foo HTTP/1.1 my-header: foo \n Config: 2853 set: - name: \"my-header\" value: \"bar\" \n Output: 2854 GET /foo HTTP/1.1 my-header: bar" 2855 items: 2856 description: HTTPHeader represents an HTTP Header 2857 name and value as defined by RFC 7230. 2858 properties: 2859 name: 2860 description: "Name is the name of the HTTP Header 2861 to be matched. Name matching MUST be case 2862 insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 2863 \n If multiple entries specify equivalent 2864 header names, the first entry with an equivalent 2865 name MUST be considered for a match. Subsequent 2866 entries with an equivalent header name MUST 2867 be ignored. Due to the case-insensitivity 2868 of header names, \"foo\" and \"Foo\" are considered 2869 equivalent." 2870 maxLength: 256 2871 minLength: 1 2872 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 2873 type: string 2874 value: 2875 description: Value is the value of HTTP Header 2876 to be matched. 2877 maxLength: 4096 2878 minLength: 1 2879 type: string 2880 required: 2881 - name 2882 - value 2883 type: object 2884 maxItems: 16 2885 type: array 2886 x-kubernetes-list-map-keys: 2887 - name 2888 x-kubernetes-list-type: map 2889 type: object 2890 requestMirror: 2891 description: "RequestMirror defines a schema for a filter 2892 that mirrors requests. Requests are sent to the specified 2893 destination, but responses from that destination are 2894 ignored. \n Support: Extended" 2895 properties: 2896 backendRef: 2897 description: "BackendRef references a resource where 2898 mirrored requests are sent. \n If the referent cannot 2899 be found, this BackendRef is invalid and must be 2900 dropped from the Gateway. The controller must ensure 2901 the \"ResolvedRefs\" condition on the Route status 2902 is set to `status: False` and not configure this 2903 backend in the underlying implementation. \n If 2904 there is a cross-namespace reference to an *existing* 2905 object that is not allowed by a ReferenceGrant, 2906 the controller must ensure the \"ResolvedRefs\" 2907 \ condition on the Route is set to `status: False`, 2908 with the \"RefNotPermitted\" reason and not configure 2909 this backend in the underlying implementation. \n 2910 In either error case, the Message of the `ResolvedRefs` 2911 Condition should be used to provide more detail 2912 about the problem. \n Support: Extended for Kubernetes 2913 Service \n Support: Implementation-specific for 2914 any other resource" 2915 properties: 2916 group: 2917 default: "" 2918 description: Group is the group of the referent. 2919 For example, "gateway.networking.k8s.io". When 2920 unspecified or empty string, core API group 2921 is inferred. 2922 maxLength: 253 2923 pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 2924 type: string 2925 kind: 2926 default: Service 2927 description: "Kind is the Kubernetes resource 2928 kind of the referent. For example \"Service\". 2929 \n Defaults to \"Service\" when not specified. 2930 \n ExternalName services can refer to CNAME 2931 DNS records that may live outside of the cluster 2932 and as such are difficult to reason about in 2933 terms of conformance. They also may not be safe 2934 to forward to (see CVE-2021-25740 for more information). 2935 Implementations SHOULD NOT support ExternalName 2936 Services. \n Support: Core (Services with a 2937 type other than ExternalName) \n Support: Implementation-specific 2938 (Services with type ExternalName)" 2939 maxLength: 63 2940 minLength: 1 2941 pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ 2942 type: string 2943 name: 2944 description: Name is the name of the referent. 2945 maxLength: 253 2946 minLength: 1 2947 type: string 2948 namespace: 2949 description: "Namespace is the namespace of the 2950 backend. When unspecified, the local namespace 2951 is inferred. \n Note that when a namespace is 2952 specified, a ReferenceGrant object is required 2953 in the referent namespace to allow that namespace's 2954 owner to accept the reference. See the ReferenceGrant 2955 documentation for details. \n Support: Core" 2956 maxLength: 63 2957 minLength: 1 2958 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ 2959 type: string 2960 port: 2961 description: Port specifies the destination port 2962 number to use for this resource. Port is required 2963 when the referent is a Kubernetes Service. In 2964 this case, the port number is the service port 2965 number, not the target port. For other resources, 2966 destination port might be derived from the referent 2967 resource or this field. 2968 format: int32 2969 maximum: 65535 2970 minimum: 1 2971 type: integer 2972 required: 2973 - name 2974 type: object 2975 required: 2976 - backendRef 2977 type: object 2978 requestRedirect: 2979 description: "RequestRedirect defines a schema for a filter 2980 that responds to the request with an HTTP redirection. 2981 \n Support: Core" 2982 properties: 2983 hostname: 2984 description: "Hostname is the hostname to be used 2985 in the value of the `Location` header in the response. 2986 When empty, the hostname in the `Host` header of 2987 the request is used. \n Support: Core" 2988 maxLength: 253 2989 minLength: 1 2990 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 2991 type: string 2992 path: 2993 description: "Path defines parameters used to modify 2994 the path of the incoming request. The modified path 2995 is then used to construct the `Location` header. 2996 When empty, the request path is used as-is. \n Support: 2997 Extended" 2998 properties: 2999 replaceFullPath: 3000 description: ReplaceFullPath specifies the value 3001 with which to replace the full path of a request 3002 during a rewrite or redirect. 3003 maxLength: 1024 3004 type: string 3005 replacePrefixMatch: 3006 description: "ReplacePrefixMatch specifies the 3007 value with which to replace the prefix match 3008 of a request during a rewrite or redirect. For 3009 example, a request to \"/foo/bar\" with a prefix 3010 match of \"/foo\" would be modified to \"/bar\". 3011 \n Note that this matches the behavior of the 3012 PathPrefix match type. This matches full path 3013 elements. A path element refers to the list 3014 of labels in the path split by the `/` separator. 3015 When specified, a trailing `/` is ignored. For 3016 example, the paths `/abc`, `/abc/`, and `/abc/def` 3017 would all match the prefix `/abc`, but the path 3018 `/abcd` would not." 3019 maxLength: 1024 3020 type: string 3021 type: 3022 description: "Type defines the type of path modifier. 3023 Additional types may be added in a future release 3024 of the API. \n Note that values may be added 3025 to this enum, implementations must ensure that 3026 unknown values will not cause a crash. \n Unknown 3027 values here must result in the implementation 3028 setting the Accepted Condition for the Route 3029 to `status: False`, with a Reason of `UnsupportedValue`." 3030 enum: 3031 - ReplaceFullPath 3032 - ReplacePrefixMatch 3033 type: string 3034 required: 3035 - type 3036 type: object 3037 port: 3038 description: "Port is the port to be used in the value 3039 of the `Location` header in the response. \n When 3040 empty, the Gateway Listener port is used. \n Implementations 3041 SHOULD NOT add the port number in the 'Location' 3042 header in the following cases: \n * A Location header 3043 that will use HTTP (whether that is determined via 3044 the Listener protocol or the Scheme field) _and_ 3045 use port 80. * A Location header that will use HTTPS 3046 (whether that is determined via the Listener protocol 3047 or the Scheme field) _and_ use port 443. \n Support: 3048 Extended" 3049 format: int32 3050 maximum: 65535 3051 minimum: 1 3052 type: integer 3053 scheme: 3054 description: "Scheme is the scheme to be used in the 3055 value of the `Location` header in the response. 3056 When empty, the scheme of the request is used. \n 3057 Note that values may be added to this enum, implementations 3058 must ensure that unknown values will not cause a 3059 crash. \n Unknown values here must result in the 3060 implementation setting the Accepted Condition for 3061 the Route to `status: False`, with a Reason of `UnsupportedValue`. 3062 \n Support: Extended" 3063 enum: 3064 - http 3065 - https 3066 type: string 3067 statusCode: 3068 default: 302 3069 description: "StatusCode is the HTTP status code to 3070 be used in response. \n Note that values may be 3071 added to this enum, implementations must ensure 3072 that unknown values will not cause a crash. \n Unknown 3073 values here must result in the implementation setting 3074 the Accepted Condition for the Route to `status: 3075 False`, with a Reason of `UnsupportedValue`. \n 3076 Support: Core" 3077 enum: 3078 - 301 3079 - 302 3080 type: integer 3081 type: object 3082 responseHeaderModifier: 3083 description: "ResponseHeaderModifier defines a schema 3084 for a filter that modifies response headers. \n Support: 3085 Extended" 3086 properties: 3087 add: 3088 description: "Add adds the given header(s) (name, 3089 value) to the request before the action. It appends 3090 to any existing values associated with the header 3091 name. \n Input: GET /foo HTTP/1.1 my-header: foo 3092 \n Config: add: - name: \"my-header\" value: \"bar,baz\" 3093 \n Output: GET /foo HTTP/1.1 my-header: foo,bar,baz" 3094 items: 3095 description: HTTPHeader represents an HTTP Header 3096 name and value as defined by RFC 7230. 3097 properties: 3098 name: 3099 description: "Name is the name of the HTTP Header 3100 to be matched. Name matching MUST be case 3101 insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 3102 \n If multiple entries specify equivalent 3103 header names, the first entry with an equivalent 3104 name MUST be considered for a match. Subsequent 3105 entries with an equivalent header name MUST 3106 be ignored. Due to the case-insensitivity 3107 of header names, \"foo\" and \"Foo\" are considered 3108 equivalent." 3109 maxLength: 256 3110 minLength: 1 3111 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 3112 type: string 3113 value: 3114 description: Value is the value of HTTP Header 3115 to be matched. 3116 maxLength: 4096 3117 minLength: 1 3118 type: string 3119 required: 3120 - name 3121 - value 3122 type: object 3123 maxItems: 16 3124 type: array 3125 x-kubernetes-list-map-keys: 3126 - name 3127 x-kubernetes-list-type: map 3128 remove: 3129 description: "Remove the given header(s) from the 3130 HTTP request before the action. The value of Remove 3131 is a list of HTTP header names. Note that the header 3132 names are case-insensitive (see https://datatracker.ietf.org/doc/html/rfc2616#section-4.2). 3133 \n Input: GET /foo HTTP/1.1 my-header1: foo my-header2: 3134 bar my-header3: baz \n Config: remove: [\"my-header1\", 3135 \"my-header3\"] \n Output: GET /foo HTTP/1.1 my-header2: 3136 bar" 3137 items: 3138 type: string 3139 maxItems: 16 3140 type: array 3141 set: 3142 description: "Set overwrites the request with the 3143 given header (name, value) before the action. \n 3144 Input: GET /foo HTTP/1.1 my-header: foo \n Config: 3145 set: - name: \"my-header\" value: \"bar\" \n Output: 3146 GET /foo HTTP/1.1 my-header: bar" 3147 items: 3148 description: HTTPHeader represents an HTTP Header 3149 name and value as defined by RFC 7230. 3150 properties: 3151 name: 3152 description: "Name is the name of the HTTP Header 3153 to be matched. Name matching MUST be case 3154 insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). 3155 \n If multiple entries specify equivalent 3156 header names, the first entry with an equivalent 3157 name MUST be considered for a match. Subsequent 3158 entries with an equivalent header name MUST 3159 be ignored. Due to the case-insensitivity 3160 of header names, \"foo\" and \"Foo\" are considered 3161 equivalent." 3162 maxLength: 256 3163 minLength: 1 3164 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 3165 type: string 3166 value: 3167 description: Value is the value of HTTP Header 3168 to be matched. 3169 maxLength: 4096 3170 minLength: 1 3171 type: string 3172 required: 3173 - name 3174 - value 3175 type: object 3176 maxItems: 16 3177 type: array 3178 x-kubernetes-list-map-keys: 3179 - name 3180 x-kubernetes-list-type: map 3181 type: object 3182 type: 3183 description: "Type identifies the type of filter to apply. 3184 As with other API fields, types are classified into 3185 three conformance levels: \n - Core: Filter types and 3186 their corresponding configuration defined by \"Support: 3187 Core\" in this package, e.g. \"RequestHeaderModifier\". 3188 All implementations must support core filters. \n - 3189 Extended: Filter types and their corresponding configuration 3190 defined by \"Support: Extended\" in this package, e.g. 3191 \"RequestMirror\". Implementers are encouraged to support 3192 extended filters. \n - Implementation-specific: Filters 3193 that are defined and supported by specific vendors. 3194 In the future, filters showing convergence in behavior 3195 across multiple implementations will be considered for 3196 inclusion in extended or core conformance levels. Filter-specific 3197 configuration for such filters is specified using the 3198 ExtensionRef field. `Type` should be set to \"ExtensionRef\" 3199 for custom filters. \n Implementers are encouraged to 3200 define custom implementation types to extend the core 3201 API with implementation-specific behavior. \n If a reference 3202 to a custom filter type cannot be resolved, the filter 3203 MUST NOT be skipped. Instead, requests that would have 3204 been processed by that filter MUST receive a HTTP error 3205 response. \n Note that values may be added to this enum, 3206 implementations must ensure that unknown values will 3207 not cause a crash. \n Unknown values here must result 3208 in the implementation setting the Accepted Condition 3209 for the Route to `status: False`, with a Reason of `UnsupportedValue`." 3210 enum: 3211 - RequestHeaderModifier 3212 - ResponseHeaderModifier 3213 - RequestMirror 3214 - RequestRedirect 3215 - URLRewrite 3216 - ExtensionRef 3217 type: string 3218 urlRewrite: 3219 description: "URLRewrite defines a schema for a filter 3220 that modifies a request during forwarding. \n Support: 3221 Extended" 3222 properties: 3223 hostname: 3224 description: "Hostname is the value to be used to 3225 replace the Host header value during forwarding. 3226 \n Support: Extended" 3227 maxLength: 253 3228 minLength: 1 3229 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 3230 type: string 3231 path: 3232 description: "Path defines a path rewrite. \n Support: 3233 Extended" 3234 properties: 3235 replaceFullPath: 3236 description: ReplaceFullPath specifies the value 3237 with which to replace the full path of a request 3238 during a rewrite or redirect. 3239 maxLength: 1024 3240 type: string 3241 replacePrefixMatch: 3242 description: "ReplacePrefixMatch specifies the 3243 value with which to replace the prefix match 3244 of a request during a rewrite or redirect. For 3245 example, a request to \"/foo/bar\" with a prefix 3246 match of \"/foo\" would be modified to \"/bar\". 3247 \n Note that this matches the behavior of the 3248 PathPrefix match type. This matches full path 3249 elements. A path element refers to the list 3250 of labels in the path split by the `/` separator. 3251 When specified, a trailing `/` is ignored. For 3252 example, the paths `/abc`, `/abc/`, and `/abc/def` 3253 would all match the prefix `/abc`, but the path 3254 `/abcd` would not." 3255 maxLength: 1024 3256 type: string 3257 type: 3258 description: "Type defines the type of path modifier. 3259 Additional types may be added in a future release 3260 of the API. \n Note that values may be added 3261 to this enum, implementations must ensure that 3262 unknown values will not cause a crash. \n Unknown 3263 values here must result in the implementation 3264 setting the Accepted Condition for the Route 3265 to `status: False`, with a Reason of `UnsupportedValue`." 3266 enum: 3267 - ReplaceFullPath 3268 - ReplacePrefixMatch 3269 type: string 3270 required: 3271 - type 3272 type: object 3273 type: object 3274 required: 3275 - type 3276 type: object 3277 maxItems: 16 3278 type: array 3279 matches: 3280 default: 3281 - path: 3282 type: PathPrefix 3283 value: / 3284 description: "Matches define conditions used for matching the 3285 rule against incoming HTTP requests. Each match is independent, 3286 i.e. this rule will be matched if **any** one of the matches 3287 is satisfied. \n For example, take the following matches configuration: 3288 \n ``` matches: - path: value: \"/foo\" headers: - name: \"version\" 3289 value: \"v2\" - path: value: \"/v2/foo\" ``` \n For a request 3290 to match against this rule, a request must satisfy EITHER 3291 of the two conditions: \n - path prefixed with `/foo` AND 3292 contains the header `version: v2` - path prefix of `/v2/foo` 3293 \n See the documentation for HTTPRouteMatch on how to specify 3294 multiple match conditions that should be ANDed together. \n 3295 If no matches are specified, the default is a prefix path 3296 match on \"/\", which has the effect of matching every HTTP 3297 request. \n Proxy or Load Balancer routing configuration generated 3298 from HTTPRoutes MUST prioritize matches based on the following 3299 criteria, continuing on ties. Across all rules specified on 3300 applicable Routes, precedence must be given to the match with 3301 the largest number of: \n * Characters in a matching \"Exact\" 3302 path match * Characters in a matching \"Prefix\" path match 3303 * Header matches. * Query param matches. \n Note: The precedence 3304 of RegularExpression path matches are implementation-specific. 3305 \n If ties still exist across multiple Routes, matching precedence 3306 MUST be determined in order of the following criteria, continuing 3307 on ties: \n * The oldest Route based on creation timestamp. 3308 * The Route appearing first in alphabetical order by \"{namespace}/{name}\". 3309 \n If ties still exist within an HTTPRoute, matching precedence 3310 MUST be granted to the FIRST matching rule (in list order) 3311 with a match meeting the above criteria. \n When no rules 3312 matching a request have been successfully attached to the 3313 parent a request is coming from, a HTTP 404 status code MUST 3314 be returned." 3315 items: 3316 description: "HTTPRouteMatch defines the predicate used to 3317 match requests to a given action. Multiple match types are 3318 ANDed together, i.e. the match will evaluate to true only 3319 if all conditions are satisfied. \n For example, the match 3320 below will match a HTTP request only if its path starts 3321 with `/foo` AND it contains the `version: v1` header: \n 3322 ``` match: \n path: value: \"/foo\" headers: - name: \"version\" 3323 value \"v1\" \n ```" 3324 properties: 3325 headers: 3326 description: Headers specifies HTTP request header matchers. 3327 Multiple match values are ANDed together, meaning, a 3328 request must match all the specified headers to select 3329 the route. 3330 items: 3331 description: HTTPHeaderMatch describes how to select 3332 a HTTP route by matching HTTP request headers. 3333 properties: 3334 name: 3335 description: "Name is the name of the HTTP Header 3336 to be matched. Name matching MUST be case insensitive. 3337 (See https://tools.ietf.org/html/rfc7230#section-3.2). 3338 \n If multiple entries specify equivalent header 3339 names, only the first entry with an equivalent 3340 name MUST be considered for a match. Subsequent 3341 entries with an equivalent header name MUST be 3342 ignored. Due to the case-insensitivity of header 3343 names, \"foo\" and \"Foo\" are considered equivalent. 3344 \n When a header is repeated in an HTTP request, 3345 it is implementation-specific behavior as to how 3346 this is represented. Generally, proxies should 3347 follow the guidance from the RFC: https://www.rfc-editor.org/rfc/rfc7230.html#section-3.2.2 3348 regarding processing a repeated header, with special 3349 handling for \"Set-Cookie\"." 3350 maxLength: 256 3351 minLength: 1 3352 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 3353 type: string 3354 type: 3355 default: Exact 3356 description: "Type specifies how to match against 3357 the value of the header. \n Support: Core (Exact) 3358 \n Support: Implementation-specific (RegularExpression) 3359 \n Since RegularExpression HeaderMatchType has 3360 implementation-specific conformance, implementations 3361 can support POSIX, PCRE or any other dialects 3362 of regular expressions. Please read the implementation's 3363 documentation to determine the supported dialect." 3364 enum: 3365 - Exact 3366 - RegularExpression 3367 type: string 3368 value: 3369 description: Value is the value of HTTP Header to 3370 be matched. 3371 maxLength: 4096 3372 minLength: 1 3373 type: string 3374 required: 3375 - name 3376 - value 3377 type: object 3378 maxItems: 16 3379 type: array 3380 x-kubernetes-list-map-keys: 3381 - name 3382 x-kubernetes-list-type: map 3383 method: 3384 description: "Method specifies HTTP method matcher. When 3385 specified, this route will be matched only if the request 3386 has the specified method. \n Support: Extended" 3387 enum: 3388 - GET 3389 - HEAD 3390 - POST 3391 - PUT 3392 - DELETE 3393 - CONNECT 3394 - OPTIONS 3395 - TRACE 3396 - PATCH 3397 type: string 3398 path: 3399 default: 3400 type: PathPrefix 3401 value: / 3402 description: Path specifies a HTTP request path matcher. 3403 If this field is not specified, a default prefix match 3404 on the "/" path is provided. 3405 properties: 3406 type: 3407 default: PathPrefix 3408 description: "Type specifies how to match against 3409 the path Value. \n Support: Core (Exact, PathPrefix) 3410 \n Support: Implementation-specific (RegularExpression)" 3411 enum: 3412 - Exact 3413 - PathPrefix 3414 - RegularExpression 3415 type: string 3416 value: 3417 default: / 3418 description: Value of the HTTP path to match against. 3419 maxLength: 1024 3420 type: string 3421 type: object 3422 queryParams: 3423 description: "QueryParams specifies HTTP query parameter 3424 matchers. Multiple match values are ANDed together, 3425 meaning, a request must match all the specified query 3426 parameters to select the route. \n Support: Extended" 3427 items: 3428 description: HTTPQueryParamMatch describes how to select 3429 a HTTP route by matching HTTP query parameters. 3430 properties: 3431 name: 3432 description: "Name is the name of the HTTP query 3433 param to be matched. This must be an exact string 3434 match. (See https://tools.ietf.org/html/rfc7230#section-2.7.3). 3435 \n If multiple entries specify equivalent query 3436 param names, only the first entry with an equivalent 3437 name MUST be considered for a match. Subsequent 3438 entries with an equivalent query param name MUST 3439 be ignored. \n If a query param is repeated in 3440 an HTTP request, the behavior is purposely left 3441 undefined, since different data planes have different 3442 capabilities. However, it is *recommended* that 3443 implementations should match against the first 3444 value of the param if the data plane supports 3445 it, as this behavior is expected in other load 3446 balancing contexts outside of the Gateway API. 3447 \n Users SHOULD NOT route traffic based on repeated 3448 query params to guard themselves against potential 3449 differences in the implementations." 3450 maxLength: 256 3451 minLength: 1 3452 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ 3453 type: string 3454 type: 3455 default: Exact 3456 description: "Type specifies how to match against 3457 the value of the query parameter. \n Support: 3458 Extended (Exact) \n Support: Implementation-specific 3459 (RegularExpression) \n Since RegularExpression 3460 QueryParamMatchType has Implementation-specific 3461 conformance, implementations can support POSIX, 3462 PCRE or any other dialects of regular expressions. 3463 Please read the implementation's documentation 3464 to determine the supported dialect." 3465 enum: 3466 - Exact 3467 - RegularExpression 3468 type: string 3469 value: 3470 description: Value is the value of HTTP query param 3471 to be matched. 3472 maxLength: 1024 3473 minLength: 1 3474 type: string 3475 required: 3476 - name 3477 - value 3478 type: object 3479 maxItems: 16 3480 type: array 3481 x-kubernetes-list-map-keys: 3482 - name 3483 x-kubernetes-list-type: map 3484 type: object 3485 maxItems: 8 3486 type: array 3487 type: object 3488 maxItems: 16 3489 type: array 3490 type: object 3491 status: 3492 description: Status defines the current state of HTTPRoute. 3493 properties: 3494 parents: 3495 description: "Parents is a list of parent resources (usually Gateways) 3496 that are associated with the route, and the status of the route 3497 with respect to each parent. When this route attaches to a parent, 3498 the controller that manages the parent must add an entry to this 3499 list when the controller first sees the route and should update 3500 the entry as appropriate when the route or gateway is modified. 3501 \n Note that parent references that cannot be resolved by an implementation 3502 of this API will not be added to this list. Implementations of this 3503 API can only populate Route status for the Gateways/parent resources 3504 they are responsible for. \n A maximum of 32 Gateways will be represented 3505 in this list. An empty list means the route has not been attached 3506 to any Gateway." 3507 items: 3508 description: RouteParentStatus describes the status of a route with 3509 respect to an associated Parent. 3510 properties: 3511 conditions: 3512 description: "Conditions describes the status of the route with 3513 respect to the Gateway. Note that the route's availability 3514 is also subject to the Gateway's own status conditions and 3515 listener status. \n If the Route's ParentRef specifies an 3516 existing Gateway that supports Routes of this kind AND that 3517 Gateway's controller has sufficient access, then that Gateway's 3518 controller MUST set the \"Accepted\" condition on the Route, 3519 to indicate whether the route has been accepted or rejected 3520 by the Gateway, and why. \n A Route MUST be considered \"Accepted\" 3521 if at least one of the Route's rules is implemented by the 3522 Gateway. \n There are a number of cases where the \"Accepted\" 3523 condition may not be set due to lack of controller visibility, 3524 that includes when: \n * The Route refers to a non-existent 3525 parent. * The Route is of a type that the controller does 3526 not support. * The Route is in a namespace the controller 3527 does not have access to." 3528 items: 3529 description: "Condition contains details for one aspect of 3530 the current state of this API Resource. --- This struct 3531 is intended for direct use as an array at the field path 3532 .status.conditions. For example, \n type FooStatus struct{ 3533 // Represents the observations of a foo's current state. 3534 // Known .status.conditions.type are: \"Available\", \"Progressing\", 3535 and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge 3536 // +listType=map // +listMapKey=type Conditions []metav1.Condition 3537 `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" 3538 protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields 3539 }" 3540 properties: 3541 lastTransitionTime: 3542 description: lastTransitionTime is the last time the condition 3543 transitioned from one status to another. This should 3544 be when the underlying condition changed. If that is 3545 not known, then using the time when the API field changed 3546 is acceptable. 3547 format: date-time 3548 type: string 3549 message: 3550 description: message is a human readable message indicating 3551 details about the transition. This may be an empty string. 3552 maxLength: 32768 3553 type: string 3554 observedGeneration: 3555 description: observedGeneration represents the .metadata.generation 3556 that the condition was set based upon. For instance, 3557 if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration 3558 is 9, the condition is out of date with respect to the 3559 current state of the instance. 3560 format: int64 3561 minimum: 0 3562 type: integer 3563 reason: 3564 description: reason contains a programmatic identifier 3565 indicating the reason for the condition's last transition. 3566 Producers of specific condition types may define expected 3567 values and meanings for this field, and whether the 3568 values are considered a guaranteed API. The value should 3569 be a CamelCase string. This field may not be empty. 3570 maxLength: 1024 3571 minLength: 1 3572 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ 3573 type: string 3574 status: 3575 description: status of the condition, one of True, False, 3576 Unknown. 3577 enum: 3578 - "True" 3579 - "False" 3580 - Unknown 3581 type: string 3582 type: 3583 description: type of condition in CamelCase or in foo.example.com/CamelCase. 3584 --- Many .condition.type values are consistent across 3585 resources like Available, but because arbitrary conditions 3586 can be useful (see .node.status.conditions), the ability 3587 to deconflict is important. The regex it matches is 3588 (dns1123SubdomainFmt/)?(qualifiedNameFmt) 3589 maxLength: 316 3590 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])$ 3591 type: string 3592 required: 3593 - lastTransitionTime 3594 - message 3595 - reason 3596 - status 3597 - type 3598 type: object 3599 maxItems: 8 3600 minItems: 1 3601 type: array 3602 x-kubernetes-list-map-keys: 3603 - type 3604 x-kubernetes-list-type: map 3605 controllerName: 3606 description: "ControllerName is a domain/path string that indicates 3607 the name of the controller that wrote this status. This corresponds 3608 with the controllerName field on GatewayClass. \n Example: 3609 \"example.net/gateway-controller\". \n The format of this 3610 field is DOMAIN \"/\" PATH, where DOMAIN and PATH are valid 3611 Kubernetes names (https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names). 3612 \n Controllers MUST populate this field when writing status. 3613 Controllers should ensure that entries to status populated 3614 with their ControllerName are cleaned up when they are no 3615 longer necessary." 3616 maxLength: 253 3617 minLength: 1 3618 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$ 3619 type: string 3620 parentRef: 3621 description: ParentRef corresponds with a ParentRef in the spec 3622 that this RouteParentStatus struct describes the status of. 3623 properties: 3624 group: 3625 default: gateway.networking.k8s.io 3626 description: "Group is the group of the referent. When unspecified, 3627 \"gateway.networking.k8s.io\" is inferred. To set the 3628 core API group (such as for a \"Service\" kind referent), 3629 Group must be explicitly set to \"\" (empty string). \n 3630 Support: Core" 3631 maxLength: 253 3632 pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 3633 type: string 3634 kind: 3635 default: Gateway 3636 description: "Kind is kind of the referent. \n Support: 3637 Core (Gateway) \n Support: Implementation-specific (Other 3638 Resources)" 3639 maxLength: 63 3640 minLength: 1 3641 pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ 3642 type: string 3643 name: 3644 description: "Name is the name of the referent. \n Support: 3645 Core" 3646 maxLength: 253 3647 minLength: 1 3648 type: string 3649 namespace: 3650 description: "Namespace is the namespace of the referent. 3651 When unspecified, this refers to the local namespace of 3652 the Route. \n Note that there are specific rules for ParentRefs 3653 which cross namespace boundaries. Cross-namespace references 3654 are only valid if they are explicitly allowed by something 3655 in the namespace they are referring to. For example: Gateway 3656 has the AllowedRoutes field, and ReferenceGrant provides 3657 a generic way to enable any other kind of cross-namespace 3658 reference. \n Support: Core" 3659 maxLength: 63 3660 minLength: 1 3661 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ 3662 type: string 3663 sectionName: 3664 description: "SectionName is the name of a section within 3665 the target resource. In the following resources, SectionName 3666 is interpreted as the following: \n * Gateway: Listener 3667 Name. When both Port (experimental) and SectionName are 3668 specified, the name and port of the selected listener 3669 must match both specified values. \n Implementations MAY 3670 choose to support attaching Routes to other resources. 3671 If that is the case, they MUST clearly document how SectionName 3672 is interpreted. \n When unspecified (empty string), this 3673 will reference the entire resource. For the purpose of 3674 status, an attachment is considered successful if at least 3675 one section in the parent resource accepts it. For example, 3676 Gateway listeners can restrict which Routes can attach 3677 to them by Route kind, namespace, or hostname. If 1 of 3678 2 Gateway listeners accept attachment from the referencing 3679 Route, the Route MUST be considered successfully attached. 3680 If no Gateway listeners accept attachment from this Route, 3681 the Route MUST be considered detached from the Gateway. 3682 \n Support: Core" 3683 maxLength: 253 3684 minLength: 1 3685 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ 3686 type: string 3687 required: 3688 - name 3689 type: object 3690 required: 3691 - controllerName 3692 - parentRef 3693 type: object 3694 maxItems: 32 3695 type: array 3696 required: 3697 - parents 3698 type: object 3699 required: 3700 - spec 3701 type: object 3702 served: true 3703 storage: true 3704 subresources: 3705 status: {} 3706 status: 3707 acceptedNames: 3708 kind: "" 3709 plural: "" 3710 conditions: null 3711 storedVersions: null