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. controller-gen.kubebuilder.io/version: v0.4.0
  7. creationTimestamp: null
  8. name: gatewayclasses.networking.x-k8s.io
  9. spec:
  10. group: networking.x-k8s.io
  11. names:
  12. kind: GatewayClass
  13. listKind: GatewayClassList
  14. plural: gatewayclasses
  15. shortNames:
  16. - gc
  17. singular: gatewayclass
  18. scope: Cluster
  19. versions:
  20. - additionalPrinterColumns:
  21. - jsonPath: .spec.controller
  22. name: Controller
  23. type: string
  24. name: v1alpha1
  25. schema:
  26. openAPIV3Schema:
  27. description: "GatewayClass describes a class of Gateways available to the user for creating Gateway resources. \n GatewayClass is a Cluster level resource. \n Support: Core."
  28. properties:
  29. apiVersion:
  30. description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
  31. type: string
  32. kind:
  33. description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
  34. type: string
  35. metadata:
  36. type: object
  37. spec:
  38. description: Spec for this GatewayClass.
  39. properties:
  40. controller:
  41. description: "Controller is a domain/path string that indicates the controller that is managing Gateways of this class. \n Example: \"acme.io/gateway-controller\". \n This field is not mutable and cannot be empty. \n The format of this field is DOMAIN \"/\" PATH, where DOMAIN and PATH are valid Kubernetes names (https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names). \n Support: Core"
  42. maxLength: 253
  43. type: string
  44. parametersRef:
  45. description: "ParametersRef is a controller-specific resource containing the configuration parameters corresponding to this class. This is optional if the controller does not require any additional configuration. \n Parameters resources are implementation specific custom resources. These resources must be cluster-scoped. \n If the referent cannot be found, the GatewayClass's \"InvalidParameters\" status condition will be true. \n Support: Custom"
  46. properties:
  47. group:
  48. description: Group is the group of the referent.
  49. maxLength: 253
  50. minLength: 1
  51. type: string
  52. kind:
  53. description: Kind is kind of the referent.
  54. maxLength: 253
  55. minLength: 1
  56. type: string
  57. name:
  58. description: Name is the name of the referent.
  59. maxLength: 253
  60. minLength: 1
  61. type: string
  62. required:
  63. - group
  64. - kind
  65. - name
  66. type: object
  67. required:
  68. - controller
  69. type: object
  70. status:
  71. default:
  72. conditions:
  73. - lastTransitionTime: "1970-01-01T00:00:00Z"
  74. message: Waiting for controller
  75. reason: Waiting
  76. status: Unknown
  77. type: InvalidParameters
  78. description: Status of the GatewayClass.
  79. properties:
  80. conditions:
  81. default:
  82. - lastTransitionTime: "1970-01-01T00:00:00Z"
  83. message: Waiting for controller
  84. reason: Waiting
  85. status: "False"
  86. type: Admitted
  87. description: Conditions is the current status from the controller for this GatewayClass.
  88. items:
  89. description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }"
  90. properties:
  91. lastTransitionTime:
  92. description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
  93. format: date-time
  94. type: string
  95. message:
  96. description: message is a human readable message indicating details about the transition. This may be an empty string.
  97. maxLength: 32768
  98. type: string
  99. observedGeneration:
  100. description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
  101. format: int64
  102. minimum: 0
  103. type: integer
  104. reason:
  105. description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
  106. maxLength: 1024
  107. minLength: 1
  108. pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
  109. type: string
  110. status:
  111. description: status of the condition, one of True, False, Unknown.
  112. enum:
  113. - "True"
  114. - "False"
  115. - Unknown
  116. type: string
  117. type:
  118. description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
  119. maxLength: 316
  120. 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])$
  121. type: string
  122. required:
  123. - lastTransitionTime
  124. - message
  125. - reason
  126. - status
  127. - type
  128. type: object
  129. maxItems: 8
  130. type: array
  131. x-kubernetes-list-map-keys:
  132. - type
  133. x-kubernetes-list-type: map
  134. type: object
  135. type: object
  136. served: true
  137. storage: true
  138. subresources:
  139. status: {}
  140. status:
  141. acceptedNames:
  142. kind: ""
  143. plural: ""
  144. conditions: []
  145. storedVersions: []
  146. ---
  147. apiVersion: apiextensions.k8s.io/v1
  148. kind: CustomResourceDefinition
  149. metadata:
  150. annotations:
  151. controller-gen.kubebuilder.io/version: v0.4.0
  152. creationTimestamp: null
  153. name: gateways.networking.x-k8s.io
  154. spec:
  155. group: networking.x-k8s.io
  156. names:
  157. kind: Gateway
  158. listKind: GatewayList
  159. plural: gateways
  160. shortNames:
  161. - gtw
  162. singular: gateway
  163. scope: Namespaced
  164. versions:
  165. - additionalPrinterColumns:
  166. - jsonPath: .spec.gatewayClassName
  167. name: Class
  168. type: string
  169. name: v1alpha1
  170. schema:
  171. openAPIV3Schema:
  172. description: "Gateway represents an instantiation of a service-traffic handling infrastructure by binding Listeners to a set of IP addresses. \n Implementations should add the `gateway-exists-finalizer.networking.x-k8s.io` finalizer on the associated GatewayClass whenever Gateway(s) is running. This ensures that a GatewayClass associated with a Gateway(s) is not deleted while in use."
  173. properties:
  174. apiVersion:
  175. description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
  176. type: string
  177. kind:
  178. description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
  179. type: string
  180. metadata:
  181. type: object
  182. spec:
  183. description: "GatewaySpec defines the desired state of Gateway. \n Not all possible combinations of options specified in the Spec are valid. Some invalid configurations can be caught synchronously via a webhook, but there are many cases that will require asynchronous signaling via the GatewayStatus block."
  184. properties:
  185. addresses:
  186. description: "Addresses requested for this gateway. This is optional and behavior can depend on the GatewayClass. If a value is set in the spec and the requested address is invalid, the GatewayClass MUST indicate this in the associated entry in GatewayStatus.Addresses. \n If no Addresses are specified, the GatewayClass may schedule the Gateway in an implementation-defined manner, assigning an appropriate set of Addresses. \n The GatewayClass MUST bind all Listeners to every GatewayAddress that it assigns to the Gateway. \n Support: Core"
  187. items:
  188. description: GatewayAddress describes an address that can be bound to a Gateway.
  189. properties:
  190. type:
  191. default: IPAddress
  192. description: "Type of the Address. This is either \"IPAddress\" or \"NamedAddress\". \n Support: Extended"
  193. enum:
  194. - IPAddress
  195. - NamedAddress
  196. type: string
  197. value:
  198. description: 'Value. Examples: "1.2.3.4", "128::1", "my-ip-address". Validity of the values will depend on `Type` and support by the controller.'
  199. maxLength: 253
  200. minLength: 1
  201. type: string
  202. required:
  203. - value
  204. type: object
  205. maxItems: 16
  206. type: array
  207. gatewayClassName:
  208. description: GatewayClassName used for this Gateway. This is the name of a GatewayClass resource.
  209. maxLength: 253
  210. minLength: 1
  211. type: string
  212. listeners:
  213. description: "Listeners associated with this Gateway. Listeners define logical endpoints that are bound on this Gateway's addresses. At least one Listener MUST be specified. \n An implementation MAY group Listeners by Port and then collapse each group of Listeners into a single Listener if the implementation determines that the Listeners in the group are \"compatible\". An implementation MAY also group together and collapse compatible Listeners belonging to different Gateways. \n For example, an implementation might consider Listeners to be compatible with each other if all of the following conditions are met: \n 1. Either each Listener within the group specifies the \"HTTP\" Protocol or each Listener within the group specifies either the \"HTTPS\" or \"TLS\" Protocol. \n 2. Each Listener within the group specifies a Hostname that is unique within the group. \n 3. As a special case, one Listener within a group may omit Hostname, in which case this Listener matches when no other Listener matches. \n If the implementation does collapse compatible Listeners, the hostname provided in the incoming client request MUST be matched to a Listener to find the correct set of Routes. The incoming hostname MUST be matched using the Hostname field for each Listener in order of most to least specific. That is, exact matches must be processed before wildcard matches. \n If this field specifies multiple Listeners that have the same Port value but are not compatible, the implementation must raise a \"Conflicted\" condition in the Listener status. \n Support: Core"
  214. items:
  215. description: Listener embodies the concept of a logical endpoint where a Gateway can accept network connections. Each listener in a Gateway must have a unique combination of Hostname, Port, and Protocol. This will be enforced by a validating webhook.
  216. properties:
  217. hostname:
  218. description: "Hostname specifies the virtual hostname to match for protocol types that define this concept. When unspecified or \"*\", all hostnames are matched. This field can be omitted for protocols that don't require hostname based matching. \n Hostname is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in the RFC: \n 1. IP literals are not allowed. 2. The `:` delimiter is not respected because ports are not allowed. \n Hostname can be \"precise\" which is a domain name without the terminating dot of a network host (e.g. \"foo.example.com\") or \"wildcard\", which is a domain name prefixed with a single wildcard label (e.g. \"*.example.com\"). The wildcard character '*' must appear by itself as the first DNS label and matches only a single label. \n Support: Core"
  219. maxLength: 253
  220. minLength: 1
  221. type: string
  222. port:
  223. description: "Port is the network port. Multiple listeners may use the same port, subject to the Listener compatibility rules. \n Support: Core"
  224. format: int32
  225. maximum: 65535
  226. minimum: 1
  227. type: integer
  228. protocol:
  229. description: "Protocol specifies the network protocol this listener expects to receive. The GatewayClass MUST apply the Hostname match appropriately for each protocol: \n * For the \"TLS\" protocol, the Hostname match MUST be applied to the [SNI](https://tools.ietf.org/html/rfc6066#section-3) server name offered by the client. * For the \"HTTP\" protocol, the Hostname match MUST be applied to the host portion of the [effective request URI](https://tools.ietf.org/html/rfc7230#section-5.5) or the [:authority pseudo-header](https://tools.ietf.org/html/rfc7540#section-8.1.2.3) * For the \"HTTPS\" protocol, the Hostname match MUST be applied at both the TLS and HTTP protocol layers. \n Support: Core"
  230. type: string
  231. routes:
  232. description: "Routes specifies a schema for associating routes with the Listener using selectors. A Route is a resource capable of servicing a request and allows a cluster operator to expose a cluster resource (i.e. Service) by externally-reachable URL, load-balance traffic and terminate SSL/TLS. Typically, a route is a \"HTTPRoute\" or \"TCPRoute\" in group \"networking.x-k8s.io\", however, an implementation may support other types of resources. \n The Routes selector MUST select a set of objects that are compatible with the application protocol specified in the Protocol field. \n Although a client request may technically match multiple route rules, only one rule may ultimately receive the request. Matching precedence MUST be determined in order of the following criteria: \n * The most specific match. For example, the most specific HTTPRoute match is determined by the longest matching combination of hostname and path. * The oldest Route based on creation timestamp. For example, a Route with a creation timestamp of \"2020-09-08 01:02:03\" is given precedence over a Route with a creation timestamp of \"2020-09-08 01:02:04\". * If everything else is equivalent, the Route appearing first in alphabetical order (namespace/name) should be given precedence. For example, foo/bar is given precedence over foo/baz. \n All valid portions of a Route selected by this field should be supported. Invalid portions of a Route can be ignored (sometimes that will mean the full Route). If a portion of a Route transitions from valid to invalid, support for that portion of the Route should be dropped to ensure consistency. For example, even if a filter specified by a Route is invalid, the rest of the Route should still be supported. \n Support: Core"
  233. properties:
  234. group:
  235. default: networking.x-k8s.io
  236. description: "Group is the group of the route resource to select. Omitting the value or specifying the empty string indicates the networking.x-k8s.io API group. For example, use the following to select an HTTPRoute: \n routes: kind: HTTPRoute \n Otherwise, if an alternative API group is desired, specify the desired group: \n routes: group: acme.io kind: FooRoute \n Support: Core"
  237. maxLength: 253
  238. minLength: 1
  239. type: string
  240. kind:
  241. description: "Kind is the kind of the route resource to select. \n Kind MUST correspond to kinds of routes that are compatible with the application protocol specified in the Listener's Protocol field. \n If an implementation does not support or recognize this resource type, it SHOULD raise a \"ConditionInvalidRoutes\" condition for the affected Listener. \n Support: Core"
  242. type: string
  243. namespaces:
  244. default:
  245. from: Same
  246. description: "Namespaces indicates in which namespaces Routes should be selected for this Gateway. This is restricted to the namespace of this Gateway by default. \n Support: Core"
  247. properties:
  248. from:
  249. description: "From indicates where Routes will be selected for this Gateway. Possible values are: * All: Routes in all namespaces may be used by this Gateway. * Selector: Routes in namespaces selected by the selector may be used by this Gateway. * Same: Only Routes in the same namespace may be used by this Gateway. \n Support: Core"
  250. enum:
  251. - All
  252. - Selector
  253. - Same
  254. type: string
  255. selector:
  256. description: "Selector must be specified when From is set to \"Selector\". In that case, only Routes in Namespaces matching this Selector will be selected by this Gateway. This field is ignored for other values of \"From\". \n Support: Core"
  257. properties:
  258. matchExpressions:
  259. description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
  260. items:
  261. description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
  262. properties:
  263. key:
  264. description: key is the label key that the selector applies to.
  265. type: string
  266. operator:
  267. description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
  268. type: string
  269. values:
  270. description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
  271. items:
  272. type: string
  273. type: array
  274. required:
  275. - key
  276. - operator
  277. type: object
  278. type: array
  279. matchLabels:
  280. additionalProperties:
  281. type: string
  282. description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.
  283. type: object
  284. type: object
  285. type: object
  286. selector:
  287. description: "Selector specifies a set of route labels used for selecting routes to associate with the Gateway. If RouteSelector is defined, only routes matching the RouteSelector are associated with the Gateway. An empty RouteSelector matches all routes. \n Support: Core"
  288. properties:
  289. matchExpressions:
  290. description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
  291. items:
  292. description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
  293. properties:
  294. key:
  295. description: key is the label key that the selector applies to.
  296. type: string
  297. operator:
  298. description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
  299. type: string
  300. values:
  301. description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
  302. items:
  303. type: string
  304. type: array
  305. required:
  306. - key
  307. - operator
  308. type: object
  309. type: array
  310. matchLabels:
  311. additionalProperties:
  312. type: string
  313. description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.
  314. type: object
  315. type: object
  316. required:
  317. - kind
  318. type: object
  319. tls:
  320. description: "TLS is the TLS configuration for the Listener. This field is required if the Protocol field is \"HTTPS\" or \"TLS\" and ignored otherwise. \n The association of SNIs to Certificate defined in GatewayTLSConfig is defined based on the Hostname field for this listener. \n The GatewayClass MUST use the longest matching SNI out of all available certificates for any TLS handshake. \n Support: Core"
  321. properties:
  322. certificateRef:
  323. description: 'CertificateRef is the reference to Kubernetes object that contain a TLS certificate and private key. This certificate MUST be used for TLS handshakes for the domain this GatewayTLSConfig is associated with. If an entry in this list omits or specifies the empty string for both the group and the resource, the resource defaults to "secrets". An implementation may support other resources (for example, resource "mycertificates" in group "networking.acme.io"). Support: Core (Kubernetes Secrets) Support: Implementation-specific (Other resource types)'
  324. properties:
  325. group:
  326. description: Group is the group of the referent.
  327. maxLength: 253
  328. minLength: 1
  329. type: string
  330. kind:
  331. description: Kind is kind of the referent.
  332. maxLength: 253
  333. minLength: 1
  334. type: string
  335. name:
  336. description: Name is the name of the referent.
  337. maxLength: 253
  338. minLength: 1
  339. type: string
  340. required:
  341. - group
  342. - kind
  343. - name
  344. type: object
  345. mode:
  346. description: 'Mode defines the TLS behavior for the TLS session initiated by the client. There are two possible modes: - Terminate: The TLS session between the downstream client and the Gateway is terminated at the Gateway. - Passthrough: The TLS session is NOT terminated by the Gateway. This implies that the Gateway can''t decipher the TLS stream except for the ClientHello message of the TLS protocol. CertificateRef field is ignored in this mode.'
  347. enum:
  348. - Terminate
  349. - Passthrough
  350. type: string
  351. options:
  352. additionalProperties:
  353. type: string
  354. description: "Options are a list of key/value pairs to give extended options to the provider. \n There variation among providers as to how ciphersuites are expressed. If there is a common subset for expressing ciphers then it will make sense to loft that as a core API construct. \n Support: Implementation-specific."
  355. type: object
  356. routeOverride:
  357. default:
  358. certificate: Deny
  359. description: "RouteOverride dictates if TLS settings can be configured via Routes or not. \n CertificateRef must be defined even if `routeOverride.certificate` is set to 'Allow' as it will be used as the default certificate for the listener."
  360. properties:
  361. certificate:
  362. default: Deny
  363. description: "Certificate dictates if TLS certificates can be configured via Routes. If set to 'Allow', a TLS certificate for a hostname defined in a Route takes precedence over the certificate defined in Gateway. \n Support: Core"
  364. enum:
  365. - Allow
  366. - Deny
  367. type: string
  368. required:
  369. - certificate
  370. type: object
  371. type: object
  372. required:
  373. - port
  374. - protocol
  375. - routes
  376. type: object
  377. maxItems: 64
  378. minItems: 1
  379. type: array
  380. required:
  381. - gatewayClassName
  382. - listeners
  383. type: object
  384. status:
  385. default:
  386. conditions:
  387. - lastTransitionTime: "1970-01-01T00:00:00Z"
  388. message: Waiting for controller
  389. reason: NotReconciled
  390. status: "False"
  391. type: Scheduled
  392. description: GatewayStatus defines the observed state of Gateway.
  393. properties:
  394. addresses:
  395. description: "Addresses lists the IP addresses that have actually been bound to the Gateway. These addresses may differ from the addresses in the Spec, e.g. if the Gateway automatically assigns an address from a reserved pool. \n These addresses should all be of type \"IPAddress\"."
  396. items:
  397. description: GatewayAddress describes an address that can be bound to a Gateway.
  398. properties:
  399. type:
  400. default: IPAddress
  401. description: "Type of the Address. This is either \"IPAddress\" or \"NamedAddress\". \n Support: Extended"
  402. enum:
  403. - IPAddress
  404. - NamedAddress
  405. type: string
  406. value:
  407. description: 'Value. Examples: "1.2.3.4", "128::1", "my-ip-address". Validity of the values will depend on `Type` and support by the controller.'
  408. maxLength: 253
  409. minLength: 1
  410. type: string
  411. required:
  412. - value
  413. type: object
  414. maxItems: 16
  415. type: array
  416. conditions:
  417. default:
  418. - lastTransitionTime: "1970-01-01T00:00:00Z"
  419. message: Waiting for controller
  420. reason: NotReconciled
  421. status: "False"
  422. type: Scheduled
  423. description: "Conditions describe the current conditions of the Gateway. \n Implementations should prefer to express Gateway conditions using the `GatewayConditionType` and `GatewayConditionReason` constants so that operators and tools can converge on a common vocabulary to describe Gateway state. \n Known condition types are: \n * \"Scheduled\" * \"Ready\""
  424. items:
  425. description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }"
  426. properties:
  427. lastTransitionTime:
  428. description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
  429. format: date-time
  430. type: string
  431. message:
  432. description: message is a human readable message indicating details about the transition. This may be an empty string.
  433. maxLength: 32768
  434. type: string
  435. observedGeneration:
  436. description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
  437. format: int64
  438. minimum: 0
  439. type: integer
  440. reason:
  441. description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
  442. maxLength: 1024
  443. minLength: 1
  444. pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
  445. type: string
  446. status:
  447. description: status of the condition, one of True, False, Unknown.
  448. enum:
  449. - "True"
  450. - "False"
  451. - Unknown
  452. type: string
  453. type:
  454. description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
  455. maxLength: 316
  456. 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])$
  457. type: string
  458. required:
  459. - lastTransitionTime
  460. - message
  461. - reason
  462. - status
  463. - type
  464. type: object
  465. maxItems: 8
  466. type: array
  467. x-kubernetes-list-map-keys:
  468. - type
  469. x-kubernetes-list-type: map
  470. listeners:
  471. description: Listeners provide status for each unique listener port defined in the Spec.
  472. items:
  473. description: ListenerStatus is the status associated with a Listener.
  474. properties:
  475. conditions:
  476. description: Conditions describe the current condition of this listener.
  477. items:
  478. description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }"
  479. properties:
  480. lastTransitionTime:
  481. description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
  482. format: date-time
  483. type: string
  484. message:
  485. description: message is a human readable message indicating details about the transition. This may be an empty string.
  486. maxLength: 32768
  487. type: string
  488. observedGeneration:
  489. description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
  490. format: int64
  491. minimum: 0
  492. type: integer
  493. reason:
  494. description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
  495. maxLength: 1024
  496. minLength: 1
  497. pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
  498. type: string
  499. status:
  500. description: status of the condition, one of True, False, Unknown.
  501. enum:
  502. - "True"
  503. - "False"
  504. - Unknown
  505. type: string
  506. type:
  507. description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
  508. maxLength: 316
  509. 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])$
  510. type: string
  511. required:
  512. - lastTransitionTime
  513. - message
  514. - reason
  515. - status
  516. - type
  517. type: object
  518. maxItems: 8
  519. type: array
  520. x-kubernetes-list-map-keys:
  521. - type
  522. x-kubernetes-list-type: map
  523. hostname:
  524. description: Hostname is the Listener hostname value for which this message is reporting the status.
  525. maxLength: 253
  526. minLength: 1
  527. type: string
  528. port:
  529. description: Port is the unique Listener port value for which this message is reporting the status.
  530. format: int32
  531. maximum: 65535
  532. minimum: 1
  533. type: integer
  534. protocol:
  535. description: Protocol is the Listener protocol value for which this message is reporting the status.
  536. type: string
  537. required:
  538. - conditions
  539. - port
  540. - protocol
  541. type: object
  542. maxItems: 64
  543. type: array
  544. x-kubernetes-list-map-keys:
  545. - port
  546. x-kubernetes-list-type: map
  547. type: object
  548. type: object
  549. served: true
  550. storage: true
  551. subresources:
  552. status: {}
  553. status:
  554. acceptedNames:
  555. kind: ""
  556. plural: ""
  557. conditions: []
  558. storedVersions: []
  559. ---
  560. apiVersion: apiextensions.k8s.io/v1
  561. kind: CustomResourceDefinition
  562. metadata:
  563. annotations:
  564. controller-gen.kubebuilder.io/version: v0.4.0
  565. creationTimestamp: null
  566. name: httproutes.networking.x-k8s.io
  567. spec:
  568. group: networking.x-k8s.io
  569. names:
  570. kind: HTTPRoute
  571. listKind: HTTPRouteList
  572. plural: httproutes
  573. singular: httproute
  574. scope: Namespaced
  575. versions:
  576. - additionalPrinterColumns:
  577. - jsonPath: .spec.hostnames
  578. name: Hostnames
  579. type: string
  580. name: v1alpha1
  581. schema:
  582. openAPIV3Schema:
  583. description: HTTPRoute is the Schema for the HTTPRoute resource.
  584. properties:
  585. apiVersion:
  586. description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
  587. type: string
  588. kind:
  589. description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
  590. type: string
  591. metadata:
  592. type: object
  593. spec:
  594. description: HTTPRouteSpec defines the desired state of HTTPRoute
  595. properties:
  596. gateways:
  597. default:
  598. allow: SameNamespace
  599. description: Gateways defines which Gateways can use this Route.
  600. properties:
  601. allow:
  602. default: SameNamespace
  603. description: 'Allow indicates which Gateways will be allowed to use this route. Possible values are: * All: Gateways in any namespace can use this route. * FromList: Only Gateways specified in GatewayRefs may use this route. * SameNamespace: Only Gateways in the same namespace may use this route.'
  604. enum:
  605. - All
  606. - FromList
  607. - SameNamespace
  608. type: string
  609. gatewayRefs:
  610. description: GatewayRefs must be specified when Allow is set to "FromList". In that case, only Gateways referenced in this list will be allowed to use this route. This field is ignored for other values of "Allow".
  611. items:
  612. description: GatewayReference identifies a Gateway in a specified namespace.
  613. properties:
  614. name:
  615. description: Name is the name of the referent.
  616. maxLength: 253
  617. minLength: 1
  618. type: string
  619. namespace:
  620. description: Namespace is the namespace of the referent.
  621. maxLength: 253
  622. minLength: 1
  623. type: string
  624. required:
  625. - name
  626. - namespace
  627. type: object
  628. type: array
  629. type: object
  630. hostnames:
  631. description: "Hostnames defines a set of hostname that should match against the HTTP Host header to select a HTTPRoute to process the request. Hostname is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in the RFC: \n 1. IPs are not allowed. 2. The `:` delimiter is not respected because ports are not allowed. \n Incoming requests are matched against the hostnames before the HTTPRoute rules. If no hostname is specified, traffic is routed based on the HTTPRouteRules. \n Hostname can be \"precise\" which is a domain name without the terminating dot of a network host (e.g. \"foo.example.com\") or \"wildcard\", which is a domain name prefixed with a single wildcard label (e.g. \"*.example.com\"). The wildcard character '*' must appear by itself as the first DNS label and matches only a single label. You cannot have a wildcard label by itself (e.g. Host == \"*\"). Requests will be matched against the Host field in the following order: 1. If Host is precise, the request matches this rule if the http host header is equal to Host. 2. If Host is a wildcard, then the request matches this rule if the http host header is to equal to the suffix (removing the first label) of the wildcard rule. \n Support: Core"
  632. items:
  633. description: Hostname is used to specify a hostname that should be matched.
  634. maxLength: 253
  635. minLength: 1
  636. type: string
  637. maxItems: 16
  638. type: array
  639. rules:
  640. description: Rules are a list of HTTP matchers, filters and actions.
  641. items:
  642. description: HTTPRouteRule defines semantics for matching an HTTP request based on conditions, optionally executing additional processing steps, and forwarding the request to an API object.
  643. properties:
  644. filters:
  645. description: "Filters define the filters that are applied to requests that match this rule. \n The effects of ordering of multiple behaviors are currently unspecified. This can change in the future based on feedback during the alpha stage. \n Conformance-levels at this level are defined based on the type of filter: - ALL core filters MUST be supported by all implementations. - Implementers are encouraged to support extended filters. - Implementation-specific custom filters have no API guarantees across implementations. \n Specifying a core filter multiple times has unspecified or custom conformance. \n Support: core"
  646. items:
  647. description: 'HTTPRouteFilter defines additional processing steps that must be completed during the request or response lifecycle. HTTPRouteFilters are meant as an extension point to express additional processing that may be done in Gateway implementations. Some examples include request or response modification, implementing authentication strategies, rate-limiting, and traffic shaping. API guarantee/conformance is defined based on the type of the filter. TODO(hbagdi): re-render CRDs once controller-tools supports union tags: - https://github.com/kubernetes-sigs/controller-tools/pull/298 - https://github.com/kubernetes-sigs/controller-tools/issues/461'
  648. properties:
  649. extensionRef:
  650. description: "ExtensionRef is an optional, implementation-specific extension to the \"filter\" behavior. For example, resource \"myroutefilter\" in group \"networking.acme.io\"). ExtensionRef MUST NOT be used for core and extended filters. \n Support: Implementation-specific"
  651. properties:
  652. group:
  653. description: Group is the group of the referent.
  654. maxLength: 253
  655. minLength: 1
  656. type: string
  657. kind:
  658. description: Kind is kind of the referent.
  659. maxLength: 253
  660. minLength: 1
  661. type: string
  662. name:
  663. description: Name is the name of the referent.
  664. maxLength: 253
  665. minLength: 1
  666. type: string
  667. required:
  668. - group
  669. - kind
  670. - name
  671. type: object
  672. requestHeaderModifier:
  673. description: "RequestHeaderModifier defines a schema for a filter that modifies request headers. \n Support: Core"
  674. properties:
  675. add:
  676. additionalProperties:
  677. type: string
  678. description: "Add adds the given header (name, value) to the request before the action. \n Input: GET /foo HTTP/1.1 \n Config: add: {\"my-header\": \"foo\"} \n Output: GET /foo HTTP/1.1 my-header: foo \n Support: Extended"
  679. type: object
  680. remove:
  681. description: "Remove the given header(s) from the HTTP request before the action. The value of RemoveHeader is a list of HTTP header names. Note that the header names are case-insensitive [RFC-2616 4.2]. \n Input: GET /foo HTTP/1.1 My-Header1: ABC My-Header2: DEF My-Header2: GHI \n Config: remove: [\"my-header1\", \"my-header3\"] \n Output: GET /foo HTTP/1.1 My-Header2: DEF \n Support: Extended"
  682. items:
  683. type: string
  684. maxItems: 16
  685. type: array
  686. type: object
  687. requestMirror:
  688. description: "RequestMirror defines a schema for a filter that mirrors requests. \n Support: Extended"
  689. properties:
  690. backendRef:
  691. description: "BackendRef is a local object reference to mirror matched requests to. If both BackendRef and ServiceName are specified, ServiceName will be given precedence. \n If the referent cannot be found, the rule is not included in the route. The controller should raise the \"ResolvedRefs\" condition on the Gateway with the \"DegradedRoutes\" reason. The gateway status for this route should be updated with a condition that describes the error more specifically. \n Support: Custom"
  692. properties:
  693. group:
  694. description: Group is the group of the referent.
  695. maxLength: 253
  696. minLength: 1
  697. type: string
  698. kind:
  699. description: Kind is kind of the referent.
  700. maxLength: 253
  701. minLength: 1
  702. type: string
  703. name:
  704. description: Name is the name of the referent.
  705. maxLength: 253
  706. minLength: 1
  707. type: string
  708. required:
  709. - group
  710. - kind
  711. - name
  712. type: object
  713. port:
  714. description: Port specifies the destination port number to use for the backend referenced by the ServiceName or BackendRef field.
  715. format: int32
  716. maximum: 65535
  717. minimum: 1
  718. type: integer
  719. serviceName:
  720. description: "ServiceName refers to the name of the Service to mirror matched requests to. When specified, this takes the place of BackendRef. If both BackendRef and ServiceName are specified, ServiceName will be given precedence. \n If the referent cannot be found, the rule is not included in the route. The controller should raise the \"ResolvedRefs\" condition on the Gateway with the \"DegradedRoutes\" reason. The gateway status for this route should be updated with a condition that describes the error more specifically. \n Support: Core"
  721. maxLength: 253
  722. type: string
  723. required:
  724. - port
  725. type: object
  726. type:
  727. description: "Type identifies the type of filter to apply. As with other API fields, types are classified into three conformance levels: \n - Core: Filter types and their corresponding configuration defined by \"Support: Core\" in this package, e.g. \"RequestHeaderModifier\". All implementations must support core filters. \n - Extended: Filter types and their corresponding configuration defined by \"Support: Extended\" in this package, e.g. \"RequestMirror\". Implementers are encouraged to support extended filters. \n - Custom: Filters that are defined and supported by specific vendors. In the future, filters showing convergence in behavior across multiple implementations will be considered for inclusion in extended or core conformance levels. Filter-specific configuration for such filters is specified using the ExtensionRef field. `Type` should be set to \"ExtensionRef\" for custom filters. \n Implementers are encouraged to define custom implementation types to extend the core API with implementation-specific behavior."
  728. enum:
  729. - RequestHeaderModifier
  730. - RequestMirror
  731. - ExtensionRef
  732. type: string
  733. required:
  734. - type
  735. type: object
  736. maxItems: 16
  737. type: array
  738. forwardTo:
  739. description: ForwardTo defines the backend(s) where matching requests should be sent. If unspecified, the rule performs no forwarding. If unspecified and no filters are specified that would result in a response being sent, a 503 error code is returned.
  740. items:
  741. description: HTTPRouteForwardTo defines how a HTTPRoute should forward a request.
  742. properties:
  743. backendRef:
  744. description: "BackendRef is a reference to a backend to forward matched requests to. If both BackendRef and ServiceName are specified, ServiceName will be given precedence. \n If the referent cannot be found, the route must be dropped from the Gateway. The controller should raise the \"ResolvedRefs\" condition on the Gateway with the \"DroppedRoutes\" reason. The gateway status for this route should be updated with a condition that describes the error more specifically. \n Support: Custom"
  745. properties:
  746. group:
  747. description: Group is the group of the referent.
  748. maxLength: 253
  749. minLength: 1
  750. type: string
  751. kind:
  752. description: Kind is kind of the referent.
  753. maxLength: 253
  754. minLength: 1
  755. type: string
  756. name:
  757. description: Name is the name of the referent.
  758. maxLength: 253
  759. minLength: 1
  760. type: string
  761. required:
  762. - group
  763. - kind
  764. - name
  765. type: object
  766. filters:
  767. description: "Filters defined at this-level should be executed if and only if the request is being forwarded to the backend defined here. \n Support: Custom (For broader support of filters, use the Filters field in HTTPRouteRule.)"
  768. items:
  769. description: 'HTTPRouteFilter defines additional processing steps that must be completed during the request or response lifecycle. HTTPRouteFilters are meant as an extension point to express additional processing that may be done in Gateway implementations. Some examples include request or response modification, implementing authentication strategies, rate-limiting, and traffic shaping. API guarantee/conformance is defined based on the type of the filter. TODO(hbagdi): re-render CRDs once controller-tools supports union tags: - https://github.com/kubernetes-sigs/controller-tools/pull/298 - https://github.com/kubernetes-sigs/controller-tools/issues/461'
  770. properties:
  771. extensionRef:
  772. description: "ExtensionRef is an optional, implementation-specific extension to the \"filter\" behavior. For example, resource \"myroutefilter\" in group \"networking.acme.io\"). ExtensionRef MUST NOT be used for core and extended filters. \n Support: Implementation-specific"
  773. properties:
  774. group:
  775. description: Group is the group of the referent.
  776. maxLength: 253
  777. minLength: 1
  778. type: string
  779. kind:
  780. description: Kind is kind of the referent.
  781. maxLength: 253
  782. minLength: 1
  783. type: string
  784. name:
  785. description: Name is the name of the referent.
  786. maxLength: 253
  787. minLength: 1
  788. type: string
  789. required:
  790. - group
  791. - kind
  792. - name
  793. type: object
  794. requestHeaderModifier:
  795. description: "RequestHeaderModifier defines a schema for a filter that modifies request headers. \n Support: Core"
  796. properties:
  797. add:
  798. additionalProperties:
  799. type: string
  800. description: "Add adds the given header (name, value) to the request before the action. \n Input: GET /foo HTTP/1.1 \n Config: add: {\"my-header\": \"foo\"} \n Output: GET /foo HTTP/1.1 my-header: foo \n Support: Extended"
  801. type: object
  802. remove:
  803. description: "Remove the given header(s) from the HTTP request before the action. The value of RemoveHeader is a list of HTTP header names. Note that the header names are case-insensitive [RFC-2616 4.2]. \n Input: GET /foo HTTP/1.1 My-Header1: ABC My-Header2: DEF My-Header2: GHI \n Config: remove: [\"my-header1\", \"my-header3\"] \n Output: GET /foo HTTP/1.1 My-Header2: DEF \n Support: Extended"
  804. items:
  805. type: string
  806. maxItems: 16
  807. type: array
  808. type: object
  809. requestMirror:
  810. description: "RequestMirror defines a schema for a filter that mirrors requests. \n Support: Extended"
  811. properties:
  812. backendRef:
  813. description: "BackendRef is a local object reference to mirror matched requests to. If both BackendRef and ServiceName are specified, ServiceName will be given precedence. \n If the referent cannot be found, the rule is not included in the route. The controller should raise the \"ResolvedRefs\" condition on the Gateway with the \"DegradedRoutes\" reason. The gateway status for this route should be updated with a condition that describes the error more specifically. \n Support: Custom"
  814. properties:
  815. group:
  816. description: Group is the group of the referent.
  817. maxLength: 253
  818. minLength: 1
  819. type: string
  820. kind:
  821. description: Kind is kind of the referent.
  822. maxLength: 253
  823. minLength: 1
  824. type: string
  825. name:
  826. description: Name is the name of the referent.
  827. maxLength: 253
  828. minLength: 1
  829. type: string
  830. required:
  831. - group
  832. - kind
  833. - name
  834. type: object
  835. port:
  836. description: Port specifies the destination port number to use for the backend referenced by the ServiceName or BackendRef field.
  837. format: int32
  838. maximum: 65535
  839. minimum: 1
  840. type: integer
  841. serviceName:
  842. description: "ServiceName refers to the name of the Service to mirror matched requests to. When specified, this takes the place of BackendRef. If both BackendRef and ServiceName are specified, ServiceName will be given precedence. \n If the referent cannot be found, the rule is not included in the route. The controller should raise the \"ResolvedRefs\" condition on the Gateway with the \"DegradedRoutes\" reason. The gateway status for this route should be updated with a condition that describes the error more specifically. \n Support: Core"
  843. maxLength: 253
  844. type: string
  845. required:
  846. - port
  847. type: object
  848. type:
  849. description: "Type identifies the type of filter to apply. As with other API fields, types are classified into three conformance levels: \n - Core: Filter types and their corresponding configuration defined by \"Support: Core\" in this package, e.g. \"RequestHeaderModifier\". All implementations must support core filters. \n - Extended: Filter types and their corresponding configuration defined by \"Support: Extended\" in this package, e.g. \"RequestMirror\". Implementers are encouraged to support extended filters. \n - Custom: Filters that are defined and supported by specific vendors. In the future, filters showing convergence in behavior across multiple implementations will be considered for inclusion in extended or core conformance levels. Filter-specific configuration for such filters is specified using the ExtensionRef field. `Type` should be set to \"ExtensionRef\" for custom filters. \n Implementers are encouraged to define custom implementation types to extend the core API with implementation-specific behavior."
  850. enum:
  851. - RequestHeaderModifier
  852. - RequestMirror
  853. - ExtensionRef
  854. type: string
  855. required:
  856. - type
  857. type: object
  858. maxItems: 16
  859. type: array
  860. port:
  861. description: "Port specifies the destination port number to use for the backend referenced by the ServiceName or BackendRef field. \n Support: Core"
  862. format: int32
  863. maximum: 65535
  864. minimum: 1
  865. type: integer
  866. serviceName:
  867. description: "ServiceName refers to the name of the Service to forward matched requests to. When specified, this takes the place of BackendRef. If both BackendRef and ServiceName are specified, ServiceName will be given precedence. \n If the referent cannot be found, the route must be dropped from the Gateway. The controller should raise the \"ResolvedRefs\" condition on the Gateway with the \"DroppedRoutes\" reason. The gateway status for this route should be updated with a condition that describes the error more specifically. \n The protocol to use should be specified with the AppProtocol field on Service resources. This field was introduced in Kubernetes 1.18. If using an earlier version of Kubernetes, a `networking.x-k8s.io/app-protocol` annotation on the BackendPolicy resource may be used to define the protocol. If the AppProtocol field is available, this annotation should not be used. The AppProtocol field, when populated, takes precedence over the annotation in the BackendPolicy resource. For custom backends, it is encouraged to add a semantically-equivalent field in the Custom Resource Definition. \n Support: Core"
  868. maxLength: 253
  869. type: string
  870. weight:
  871. default: 1
  872. description: "Weight specifies the proportion of HTTP requests forwarded to the backend referenced by the ServiceName or BackendRef field. This is computed as weight/(sum of all weights in this ForwardTo list). For non-zero values, there may be some epsilon from the exact proportion defined here depending on the precision an implementation supports. Weight is not a percentage and the sum of weights does not need to equal 100. \n If only one backend is specified and it has a weight greater than 0, 100% of the traffic is forwarded to that backend. If weight is set to 0, no traffic should be forwarded for this entry. If unspecified, weight defaults to 1. \n Support: Core"
  873. format: int32
  874. maximum: 1000000
  875. minimum: 0
  876. type: integer
  877. required:
  878. - port
  879. type: object
  880. maxItems: 4
  881. type: array
  882. matches:
  883. default:
  884. - path:
  885. type: Prefix
  886. value: /
  887. description: "Matches define conditions used for matching the rule against incoming HTTP requests. Each match is independent, i.e. this rule will be matched if **any** one of the matches is satisfied. \n For example, take the following matches configuration: \n ``` matches: - path: value: \"/foo\" headers: values: version: \"2\" - path: value: \"/v2/foo\" ``` \n For a request to match against this rule, a request should satisfy EITHER of the two conditions: \n - path prefixed with `/foo` AND contains the header `version: \"2\"` - path prefix of `/v2/foo` \n See the documentation for HTTPRouteMatch on how to specify multiple match conditions that should be ANDed together. \n If no matches are specified, the default is a prefix path match on \"/\", which has the effect of matching every HTTP request. \n A client request may match multiple HTTP route rules. Matching precedence MUST be determined in order of the following criteria, continuing on ties: * The longest matching hostname. * The longest matching path. * The largest number of header matches * The oldest Route based on creation timestamp. For example, a Route with a creation timestamp of \"2020-09-08 01:02:03\" is given precedence over a Route with a creation timestamp of \"2020-09-08 01:02:04\". * The Route appearing first in alphabetical order (namespace/name) for example, foo/bar is given precedence over foo/baz."
  888. items:
  889. description: "HTTPRouteMatch defines the predicate used to match requests to a given action. Multiple match types are ANDed together, i.e. the match will evaluate to true only if all conditions are satisfied. \n For example, the match below will match a HTTP request only if its path starts with `/foo` AND it contains the `version: \"1\"` header: \n ``` match: path: value: \"/foo\" headers: values: version: \"1\" ```"
  890. properties:
  891. extensionRef:
  892. description: "ExtensionRef is an optional, implementation-specific extension to the \"match\" behavior. For example, resource \"myroutematcher\" in group \"networking.acme.io\". If the referent cannot be found, the rule is not included in the route. The controller should raise the \"ResolvedRefs\" condition on the Gateway with the \"DegradedRoutes\" reason. The gateway status for this route should be updated with a condition that describes the error more specifically. \n Support: custom"
  893. properties:
  894. group:
  895. description: Group is the group of the referent.
  896. maxLength: 253
  897. minLength: 1
  898. type: string
  899. kind:
  900. description: Kind is kind of the referent.
  901. maxLength: 253
  902. minLength: 1
  903. type: string
  904. name:
  905. description: Name is the name of the referent.
  906. maxLength: 253
  907. minLength: 1
  908. type: string
  909. required:
  910. - group
  911. - kind
  912. - name
  913. type: object
  914. headers:
  915. description: Headers specifies a HTTP request header matcher.
  916. properties:
  917. type:
  918. default: Exact
  919. description: "Type specifies how to match against the value of the header. \n Support: core (Exact) Support: custom (RegularExpression, ImplementationSpecific) \n Since RegularExpression PathType has custom conformance, implementations can support POSIX, PCRE or any other dialects of regular expressions. Please read the implementation's documentation to determine the supported dialect. \n HTTP Header name matching MUST be case-insensitive (RFC 2616 - section 4.2)."
  920. enum:
  921. - Exact
  922. - RegularExpression
  923. - ImplementationSpecific
  924. type: string
  925. values:
  926. additionalProperties:
  927. type: string
  928. description: "Values is a map of HTTP Headers to be matched. It MUST contain at least one entry. \n The HTTP header field name to match is the map key, and the value of the HTTP header is the map value. HTTP header field name matching MUST be case-insensitive. \n Multiple match values are ANDed together, meaning, a request must match all the specified headers to select the route."
  929. type: object
  930. required:
  931. - values
  932. type: object
  933. path:
  934. default:
  935. type: Prefix
  936. value: /
  937. description: Path specifies a HTTP request path matcher. If this field is not specified, a default prefix match on the "/" path is provided.
  938. properties:
  939. type:
  940. default: Prefix
  941. description: "Type specifies how to match against the path Value. \n Support: core (Exact, Prefix) Support: custom (RegularExpression, ImplementationSpecific) \n Since RegularExpression PathType has custom conformance, implementations can support POSIX, PCRE or any other dialects of regular expressions. Please read the implementation's documentation to determine the supported dialect."
  942. enum:
  943. - Exact
  944. - Prefix
  945. - RegularExpression
  946. - ImplementationSpecific
  947. type: string
  948. value:
  949. description: Value of the HTTP path to match against.
  950. minLength: 1
  951. type: string
  952. required:
  953. - value
  954. type: object
  955. type: object
  956. maxItems: 8
  957. type: array
  958. type: object
  959. maxItems: 16
  960. minItems: 1
  961. type: array
  962. tls:
  963. description: "TLS defines the TLS certificate to use for Hostnames defined in this Route. This configuration only takes effect if the AllowRouteOverride field is set to true in the associated Gateway resource. \n Collisions can happen if multiple HTTPRoutes define a TLS certificate for the same hostname. In such a case, conflict resolution guiding principles apply, specificallly, if hostnames are same and two different certificates are specified then the certificate in the oldest resource wins. \n Please note that HTTP Route-selection takes place after the TLS Handshake (ClientHello). Due to this, TLS certificate defined here will take precedence even if the request has the potential to match multiple routes (in case multiple HTTPRoutes share the same hostname). \n Support: Core"
  964. properties:
  965. certificateRef:
  966. description: 'CertificateRef refers to a Kubernetes object that contains a TLS certificate and private key. This certificate MUST be used for TLS handshakes for the domain this RouteTLSConfig is associated with. If an entry in this list omits or specifies the empty string for both the group and kind, the resource defaults to "secrets". An implementation may support other resources (for example, resource "mycertificates" in group "networking.acme.io"). Support: Core (Kubernetes Secrets) Support: Implementation-specific (Other resource types)'
  967. properties:
  968. group:
  969. description: Group is the group of the referent.
  970. maxLength: 253
  971. minLength: 1
  972. type: string
  973. kind:
  974. description: Kind is kind of the referent.
  975. maxLength: 253
  976. minLength: 1
  977. type: string
  978. name:
  979. description: Name is the name of the referent.
  980. maxLength: 253
  981. minLength: 1
  982. type: string
  983. required:
  984. - group
  985. - kind
  986. - name
  987. type: object
  988. required:
  989. - certificateRef
  990. type: object
  991. required:
  992. - rules
  993. type: object
  994. status:
  995. description: HTTPRouteStatus defines the observed state of HTTPRoute.
  996. properties:
  997. gateways:
  998. description: "Gateways is a list of the Gateways that are associated with the route, and the status of the route with respect to each of these Gateways. When a Gateway selects this route, the controller that manages the Gateway should add an entry to this list when the controller first sees the route and should update the entry as appropriate when the route is modified. \n A maximum of 100 Gateways will be represented in this list. If this list is full, there may be additional Gateways using this Route that are not included in the list."
  999. items:
  1000. description: RouteGatewayStatus describes the status of a route with respect to an associated Gateway.
  1001. properties:
  1002. conditions:
  1003. description: Conditions describes the status of the route with respect to the Gateway. For example, the "Admitted" condition indicates whether the route has been admitted or rejected by the Gateway, and why. Note that the route's availability is also subject to the Gateway's own status conditions and listener status.
  1004. items:
  1005. description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }"
  1006. properties:
  1007. lastTransitionTime:
  1008. description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
  1009. format: date-time
  1010. type: string
  1011. message:
  1012. description: message is a human readable message indicating details about the transition. This may be an empty string.
  1013. maxLength: 32768
  1014. type: string
  1015. observedGeneration:
  1016. description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
  1017. format: int64
  1018. minimum: 0
  1019. type: integer
  1020. reason:
  1021. description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
  1022. maxLength: 1024
  1023. minLength: 1
  1024. pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
  1025. type: string
  1026. status:
  1027. description: status of the condition, one of True, False, Unknown.
  1028. enum:
  1029. - "True"
  1030. - "False"
  1031. - Unknown
  1032. type: string
  1033. type:
  1034. description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
  1035. maxLength: 316
  1036. 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])$
  1037. type: string
  1038. required:
  1039. - lastTransitionTime
  1040. - message
  1041. - reason
  1042. - status
  1043. - type
  1044. type: object
  1045. maxItems: 8
  1046. type: array
  1047. x-kubernetes-list-map-keys:
  1048. - type
  1049. x-kubernetes-list-type: map
  1050. gatewayRef:
  1051. description: GatewayRef is a reference to a Gateway object that is associated with the route.
  1052. properties:
  1053. name:
  1054. description: Name is the name of the referent.
  1055. maxLength: 253
  1056. minLength: 1
  1057. type: string
  1058. namespace:
  1059. description: Namespace is the namespace of the referent.
  1060. maxLength: 253
  1061. minLength: 1
  1062. type: string
  1063. required:
  1064. - name
  1065. - namespace
  1066. type: object
  1067. required:
  1068. - gatewayRef
  1069. type: object
  1070. maxItems: 100
  1071. type: array
  1072. required:
  1073. - gateways
  1074. type: object
  1075. type: object
  1076. served: true
  1077. storage: true
  1078. subresources:
  1079. status: {}
  1080. status:
  1081. acceptedNames:
  1082. kind: ""
  1083. plural: ""
  1084. conditions: []
  1085. storedVersions: []

Resources

  1. ---
  2. kind: GatewayClass
  3. apiVersion: networking.x-k8s.io/v1alpha1
  4. metadata:
  5. name: my-gateway-class
  6. spec:
  7. controller: traefik.io/gateway-controller
  8. ---
  9. kind: Gateway
  10. apiVersion: networking.x-k8s.io/v1alpha1
  11. metadata:
  12. name: my-gateway
  13. namespace: default
  14. spec:
  15. gatewayClassName: my-gateway-class
  16. listeners: # Use GatewayClass defaults for listener definition.
  17. - protocol: HTTP
  18. port: 80
  19. routes:
  20. kind: HTTPRoute
  21. namespaces:
  22. from: Same
  23. selector:
  24. app: foo
  25. ---
  26. kind: HTTPRoute
  27. apiVersion: networking.x-k8s.io/v1alpha1
  28. metadata:
  29. name: http-app-1
  30. namespace: default
  31. labels:
  32. app: foo
  33. spec:
  34. hostnames:
  35. - "foo.com"
  36. rules:
  37. - matches:
  38. - path:
  39. type: Exact
  40. value: /bar
  41. forwardTo:
  42. - serviceName: whoami
  43. port: 80
  44. weight: 1

RBAC

  1. ---
  2. apiVersion: rbac.authorization.k8s.io/v1
  3. kind: ClusterRole
  4. metadata:
  5. name: gateway-role
  6. rules:
  7. - apiGroups:
  8. - ""
  9. resources:
  10. - services
  11. - endpoints
  12. - secrets
  13. verbs:
  14. - get
  15. - list
  16. - watch
  17. - apiGroups:
  18. - networking.x-k8s.io
  19. resources:
  20. - gatewayclasses
  21. - gateways
  22. - httproutes
  23. verbs:
  24. - get
  25. - list
  26. - watch
  27. - apiGroups:
  28. - networking.x-k8s.io
  29. resources:
  30. - gatewayclasses/status
  31. - gateways/status
  32. - httproutes/status
  33. verbs:
  34. - update
  35. ---
  36. kind: ClusterRoleBinding
  37. apiVersion: rbac.authorization.k8s.io/v1beta1
  38. metadata:
  39. name: gateway-controller
  40. roleRef:
  41. apiGroup: rbac.authorization.k8s.io
  42. kind: ClusterRole
  43. name: gateway-role
  44. subjects:
  45. - kind: ServiceAccount
  46. name: traefik-controller
  47. namespace: default