Kubernetes Configuration Reference

Dynamic configuration with Kubernetes Gateway provider.

Definitions

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

Resources

---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: GatewayClass
metadata:
  name: my-gateway-class
spec:
  controllerName: traefik.io/gateway-controller

---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: Gateway
metadata:
  name: my-gateway
  namespace: default
spec:
  gatewayClassName: my-gateway-class
  listeners: # Use GatewayClass defaults for listener definition.
    - name: http
      protocol: HTTP
      port: 80

    - name: https
      protocol: HTTPS
      port: 443
      tls:
        certificateRefs:
          - kind: Secret
            name: mysecret

    - name: tcp
      protocol: TCP
      port: 9000
      allowedRoutes:
        kinds:
          - kind: TCPRoute

    - name: tls
      protocol: TLS
      port: 9443
      hostname: example.com
      tls:
        certificateRefs:
          - kind: Secret
            name: mysecret

---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: HTTPRoute
metadata:
  name: http-app
  namespace: default

spec:
  parentRefs:
    - name: my-gateway

  hostnames:
    - foo.com

  rules:
    - matches:
        - path:
            type: Exact
            value: /bar

      backendRefs:
        - name: whoami
          port: 80
          weight: 1

    - matches:
        - path:
            type: PathPrefix
            value: /foo

      backendRefs:
        - group: traefik.io
          kind: TraefikService
          name: myservice@file
          weight: 1
          port: 80

---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TCPRoute
metadata:
  name: tcp-app
  namespace: default

spec:
  parentRefs:
    - name: my-gateway

  rules:
    - backendRefs:
        - name: whoamitcp
          port: 9000
          weight: 1

---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TLSRoute
metadata:
  name: tls-app
  namespace: default

spec:
  parentRefs:
    - name: my-gateway
      sectionName: tls

  rules:
    - backendRefs:
        - name: whoamitcp
          port: 9000
          weight: 1

RBAC

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: gateway-role
rules:
  - apiGroups:
      - ""
    resources:
      - namespaces
    verbs:
      - list
      - watch
  - apiGroups:
      - ""
    resources:
      - services
      - endpoints
      - secrets
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - gateway.networking.k8s.io
    resources:
      - gatewayclasses
      - gateways
      - httproutes
      - tcproutes
      - tlsroutes
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - gateway.networking.k8s.io
    resources:
      - gatewayclasses/status
      - gateways/status
      - httproutes/status
      - tcproutes/status
      - tlsroutes/status
    verbs:
      - update

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: gateway-controller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: gateway-role
subjects:
  - kind: ServiceAccount
    name: traefik-controller
    namespace: default

Using Traefik for Business Applications?

If you are using Traefik in your organization, consider our enterprise-grade solutions:

These tools help businesses discover, deploy, secure, and manage microservices and APIs easily, at scale, across any environment.