@r8s/crds 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/crds/certmanager-certificate.yaml +794 -0
  2. package/crds/certmanager-clusterissuer.yaml +3739 -0
  3. package/crds/clickhouse-installation.yaml +1847 -0
  4. package/crds/cnpg-cluster.yaml +6794 -0
  5. package/crds/cnpg-pooler.yaml +9311 -0
  6. package/crds/cnpg-scheduledbackup.yaml +191 -0
  7. package/crds/envoy-backendtrafficpolicy.yaml +1 -0
  8. package/crds/envoy-clienttrafficpolicy.yaml +1 -0
  9. package/crds/envoy-envoyproxy.yaml +1 -0
  10. package/crds/envoy-proxy.yaml +16626 -0
  11. package/crds/envoy-securitypolicy.yaml +1 -0
  12. package/crds/externaldns-endpoint.yaml +94 -0
  13. package/crds/gatewayapi-gateway.yaml +2253 -0
  14. package/crds/gatewayapi-httproute.yaml +5643 -0
  15. package/crds/keycloak-keycloak.yaml +3192 -0
  16. package/crds/keycloak-realmimport.yaml +2878 -0
  17. package/crds/logging-flow.yaml +1768 -0
  18. package/crds/logging-logging.yaml +16770 -0
  19. package/crds/logging-output.yaml +14658 -0
  20. package/crds/loki-lokistack.yaml +5390 -0
  21. package/crds/prometheus-alertmanager.yaml +10013 -0
  22. package/crds/prometheus-podmonitor.yaml +741 -0
  23. package/crds/prometheus-prometheus.yaml +13928 -0
  24. package/crds/prometheus-prometheusrule.yaml +267 -0
  25. package/crds/prometheus-scrapeconfig.yaml +12938 -0
  26. package/crds/prometheus-servicemonitor.yaml +764 -0
  27. package/crds/prometheus-thanosruler.yaml +9795 -0
  28. package/crds/redis-cluster.yaml +7862 -0
  29. package/crds/redis-failover.yaml +1 -0
  30. package/crds/redis-replication.yaml +5593 -0
  31. package/crds/velero-backups.yaml +630 -0
  32. package/crds/velero-backupstoragelocations.yaml +174 -0
  33. package/crds/velero-schedules.yaml +584 -0
  34. package/dist/generated/cert-manager.d.ts +873 -0
  35. package/dist/generated/cert-manager.d.ts.map +1 -0
  36. package/dist/generated/cert-manager.js +24 -0
  37. package/dist/generated/cert-manager.js.map +1 -0
  38. package/dist/generated/clickhouse.d.ts +692 -0
  39. package/dist/generated/clickhouse.d.ts.map +1 -0
  40. package/dist/generated/clickhouse.js +14 -0
  41. package/dist/generated/clickhouse.js.map +1 -0
  42. package/dist/generated/externaldns.d.ts +47 -0
  43. package/dist/generated/externaldns.d.ts.map +1 -0
  44. package/dist/generated/externaldns.js +14 -0
  45. package/dist/generated/externaldns.js.map +1 -0
  46. package/dist/generated/gateway.d.ts +2396 -0
  47. package/dist/generated/gateway.d.ts.map +1 -0
  48. package/dist/generated/gateway.js +34 -0
  49. package/dist/generated/gateway.js.map +1 -0
  50. package/dist/generated/index.d.ts +24 -0
  51. package/dist/generated/index.d.ts.map +1 -0
  52. package/dist/generated/index.js +61 -0
  53. package/dist/generated/index.js.map +1 -0
  54. package/dist/generated/keycloak.d.ts +1607 -0
  55. package/dist/generated/keycloak.d.ts.map +1 -0
  56. package/dist/generated/keycloak.js +24 -0
  57. package/dist/generated/keycloak.js.map +1 -0
  58. package/dist/generated/logging.d.ts +3487 -0
  59. package/dist/generated/logging.d.ts.map +1 -0
  60. package/dist/generated/logging.js +34 -0
  61. package/dist/generated/logging.js.map +1 -0
  62. package/dist/generated/loki.d.ts +578 -0
  63. package/dist/generated/loki.d.ts.map +1 -0
  64. package/dist/generated/loki.js +14 -0
  65. package/dist/generated/loki.js.map +1 -0
  66. package/dist/generated/monitoring.d.ts +4230 -0
  67. package/dist/generated/monitoring.d.ts.map +1 -0
  68. package/dist/generated/monitoring.js +74 -0
  69. package/dist/generated/monitoring.js.map +1 -0
  70. package/dist/generated/operators.d.ts +18 -0
  71. package/dist/generated/operators.d.ts.map +1 -0
  72. package/dist/generated/operators.js +191 -0
  73. package/dist/generated/operators.js.map +1 -0
  74. package/dist/generated/postgresql.d.ts +2820 -0
  75. package/dist/generated/postgresql.d.ts.map +1 -0
  76. package/dist/generated/postgresql.js +34 -0
  77. package/dist/generated/postgresql.js.map +1 -0
  78. package/dist/generated/redis.d.ts +1253 -0
  79. package/dist/generated/redis.d.ts.map +1 -0
  80. package/dist/generated/redis.js +24 -0
  81. package/dist/generated/redis.js.map +1 -0
  82. package/dist/generated/velero.d.ts +351 -0
  83. package/dist/generated/velero.d.ts.map +1 -0
  84. package/dist/generated/velero.js +34 -0
  85. package/dist/generated/velero.js.map +1 -0
  86. package/dist/index.d.ts +18 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +34 -0
  89. package/dist/index.js.map +1 -0
  90. package/operators.yaml +196 -0
  91. package/package.json +49 -0
@@ -0,0 +1,2253 @@
1
+ apiVersion: apiextensions.k8s.io/v1
2
+ kind: CustomResourceDefinition
3
+ metadata:
4
+ annotations:
5
+ api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
6
+ gateway.networking.k8s.io/bundle-version: v1.4.0
7
+ gateway.networking.k8s.io/channel: standard
8
+ name: gateways.gateway.networking.k8s.io
9
+ spec:
10
+ group: gateway.networking.k8s.io
11
+ names:
12
+ categories:
13
+ - gateway-api
14
+ kind: Gateway
15
+ listKind: GatewayList
16
+ plural: gateways
17
+ shortNames:
18
+ - gtw
19
+ singular: gateway
20
+ scope: Namespaced
21
+ versions:
22
+ - additionalPrinterColumns:
23
+ - jsonPath: .spec.gatewayClassName
24
+ name: Class
25
+ type: string
26
+ - jsonPath: .status.addresses[*].value
27
+ name: Address
28
+ type: string
29
+ - jsonPath: .status.conditions[?(@.type=="Programmed")].status
30
+ name: Programmed
31
+ type: string
32
+ - jsonPath: .metadata.creationTimestamp
33
+ name: Age
34
+ type: date
35
+ name: v1
36
+ schema:
37
+ openAPIV3Schema:
38
+ description: |-
39
+ Gateway represents an instance of a service-traffic handling infrastructure
40
+ by binding Listeners to a set of IP addresses.
41
+ properties:
42
+ apiVersion:
43
+ description: |-
44
+ APIVersion defines the versioned schema of this representation of an object.
45
+ Servers should convert recognized schemas to the latest internal value, and
46
+ may reject unrecognized values.
47
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
48
+ type: string
49
+ kind:
50
+ description: |-
51
+ Kind is a string value representing the REST resource this object represents.
52
+ Servers may infer this from the endpoint the client submits requests to.
53
+ Cannot be updated.
54
+ In CamelCase.
55
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
56
+ type: string
57
+ metadata:
58
+ type: object
59
+ spec:
60
+ description: Spec defines the desired state of Gateway.
61
+ properties:
62
+ addresses:
63
+ description: |-
64
+ Addresses requested for this Gateway. This is optional and behavior can
65
+ depend on the implementation. If a value is set in the spec and the
66
+ requested address is invalid or unavailable, the implementation MUST
67
+ indicate this in an associated entry in GatewayStatus.Conditions.
68
+
69
+ The Addresses field represents a request for the address(es) on the
70
+ "outside of the Gateway", that traffic bound for this Gateway will use.
71
+ This could be the IP address or hostname of an external load balancer or
72
+ other networking infrastructure, or some other address that traffic will
73
+ be sent to.
74
+
75
+ If no Addresses are specified, the implementation MAY schedule the
76
+ Gateway in an implementation-specific manner, assigning an appropriate
77
+ set of Addresses.
78
+
79
+ The implementation MUST bind all Listeners to every GatewayAddress that
80
+ it assigns to the Gateway and add a corresponding entry in
81
+ GatewayStatus.Addresses.
82
+
83
+ Support: Extended
84
+ items:
85
+ description: GatewaySpecAddress describes an address that can be
86
+ bound to a Gateway.
87
+ oneOf:
88
+ - properties:
89
+ type:
90
+ enum:
91
+ - IPAddress
92
+ value:
93
+ anyOf:
94
+ - format: ipv4
95
+ - format: ipv6
96
+ - properties:
97
+ type:
98
+ not:
99
+ enum:
100
+ - IPAddress
101
+ properties:
102
+ type:
103
+ default: IPAddress
104
+ description: Type of the address.
105
+ maxLength: 253
106
+ minLength: 1
107
+ pattern: ^Hostname|IPAddress|NamedAddress|[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$
108
+ type: string
109
+ value:
110
+ description: |-
111
+ When a value is unspecified, an implementation SHOULD automatically
112
+ assign an address matching the requested type if possible.
113
+
114
+ If an implementation does not support an empty value, they MUST set the
115
+ "Programmed" condition in status to False with a reason of "AddressNotAssigned".
116
+
117
+ Examples: `1.2.3.4`, `128::1`, `my-ip-address`.
118
+ maxLength: 253
119
+ type: string
120
+ type: object
121
+ x-kubernetes-validations:
122
+ - message: Hostname value must be empty or contain only valid characters
123
+ (matching ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$)
124
+ rule: 'self.type == ''Hostname'' ? (!has(self.value) || self.value.matches(r"""^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$""")):
125
+ true'
126
+ maxItems: 16
127
+ type: array
128
+ x-kubernetes-list-type: atomic
129
+ x-kubernetes-validations:
130
+ - message: IPAddress values must be unique
131
+ rule: 'self.all(a1, a1.type == ''IPAddress'' && has(a1.value) ?
132
+ self.exists_one(a2, a2.type == a1.type && has(a2.value) && a2.value
133
+ == a1.value) : true )'
134
+ - message: Hostname values must be unique
135
+ rule: 'self.all(a1, a1.type == ''Hostname'' && has(a1.value) ?
136
+ self.exists_one(a2, a2.type == a1.type && has(a2.value) && a2.value
137
+ == a1.value) : true )'
138
+ gatewayClassName:
139
+ description: |-
140
+ GatewayClassName used for this Gateway. This is the name of a
141
+ GatewayClass resource.
142
+ maxLength: 253
143
+ minLength: 1
144
+ type: string
145
+ infrastructure:
146
+ description: |-
147
+ Infrastructure defines infrastructure level attributes about this Gateway instance.
148
+
149
+ Support: Extended
150
+ properties:
151
+ annotations:
152
+ additionalProperties:
153
+ description: |-
154
+ AnnotationValue is the value of an annotation in Gateway API. This is used
155
+ for validation of maps such as TLS options. This roughly matches Kubernetes
156
+ annotation validation, although the length validation in that case is based
157
+ on the entire size of the annotations struct.
158
+ maxLength: 4096
159
+ minLength: 0
160
+ type: string
161
+ description: |-
162
+ Annotations that SHOULD be applied to any resources created in response to this Gateway.
163
+
164
+ For implementations creating other Kubernetes objects, this should be the `metadata.annotations` field on resources.
165
+ For other implementations, this refers to any relevant (implementation specific) "annotations" concepts.
166
+
167
+ An implementation may chose to add additional implementation-specific annotations as they see fit.
168
+
169
+ Support: Extended
170
+ maxProperties: 8
171
+ type: object
172
+ x-kubernetes-validations:
173
+ - message: Annotation keys must be in the form of an optional
174
+ DNS subdomain prefix followed by a required name segment of
175
+ up to 63 characters.
176
+ rule: self.all(key, key.matches(r"""^([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_.]{0,61})?[A-Za-z0-9]$"""))
177
+ - message: If specified, the annotation key's prefix must be a
178
+ DNS subdomain not longer than 253 characters in total.
179
+ rule: self.all(key, key.split("/")[0].size() < 253)
180
+ labels:
181
+ additionalProperties:
182
+ description: |-
183
+ LabelValue is the value of a label in the Gateway API. This is used for validation
184
+ of maps such as Gateway infrastructure labels. This matches the Kubernetes
185
+ label validation rules:
186
+ * must be 63 characters or less (can be empty),
187
+ * unless empty, must begin and end with an alphanumeric character ([a-z0-9A-Z]),
188
+ * could contain dashes (-), underscores (_), dots (.), and alphanumerics between.
189
+
190
+ Valid values include:
191
+
192
+ * MyValue
193
+ * my.name
194
+ * 123-my-value
195
+ maxLength: 63
196
+ minLength: 0
197
+ pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
198
+ type: string
199
+ description: |-
200
+ Labels that SHOULD be applied to any resources created in response to this Gateway.
201
+
202
+ For implementations creating other Kubernetes objects, this should be the `metadata.labels` field on resources.
203
+ For other implementations, this refers to any relevant (implementation specific) "labels" concepts.
204
+
205
+ An implementation may chose to add additional implementation-specific labels as they see fit.
206
+
207
+ If an implementation maps these labels to Pods, or any other resource that would need to be recreated when labels
208
+ change, it SHOULD clearly warn about this behavior in documentation.
209
+
210
+ Support: Extended
211
+ maxProperties: 8
212
+ type: object
213
+ x-kubernetes-validations:
214
+ - message: Label keys must be in the form of an optional DNS subdomain
215
+ prefix followed by a required name segment of up to 63 characters.
216
+ rule: self.all(key, key.matches(r"""^([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_.]{0,61})?[A-Za-z0-9]$"""))
217
+ - message: If specified, the label key's prefix must be a DNS
218
+ subdomain not longer than 253 characters in total.
219
+ rule: self.all(key, key.split("/")[0].size() < 253)
220
+ parametersRef:
221
+ description: |-
222
+ ParametersRef is a reference to a resource that contains the configuration
223
+ parameters corresponding to the Gateway. This is optional if the
224
+ controller does not require any additional configuration.
225
+
226
+ This follows the same semantics as GatewayClass's `parametersRef`, but on a per-Gateway basis
227
+
228
+ The Gateway's GatewayClass may provide its own `parametersRef`. When both are specified,
229
+ the merging behavior is implementation specific.
230
+ It is generally recommended that GatewayClass provides defaults that can be overridden by a Gateway.
231
+
232
+ If the referent cannot be found, refers to an unsupported kind, or when
233
+ the data within that resource is malformed, the Gateway SHOULD be
234
+ rejected with the "Accepted" status condition set to "False" and an
235
+ "InvalidParameters" reason.
236
+
237
+ Support: Implementation-specific
238
+ properties:
239
+ group:
240
+ description: Group is the group of the referent.
241
+ maxLength: 253
242
+ pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
243
+ type: string
244
+ kind:
245
+ description: Kind is kind of the referent.
246
+ maxLength: 63
247
+ minLength: 1
248
+ pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
249
+ type: string
250
+ name:
251
+ description: Name is the name of the referent.
252
+ maxLength: 253
253
+ minLength: 1
254
+ type: string
255
+ required:
256
+ - group
257
+ - kind
258
+ - name
259
+ type: object
260
+ type: object
261
+ listeners:
262
+ description: |-
263
+ Listeners associated with this Gateway. Listeners define
264
+ logical endpoints that are bound on this Gateway's addresses.
265
+ At least one Listener MUST be specified.
266
+
267
+ ## Distinct Listeners
268
+
269
+ Each Listener in a set of Listeners (for example, in a single Gateway)
270
+ MUST be _distinct_, in that a traffic flow MUST be able to be assigned to
271
+ exactly one listener. (This section uses "set of Listeners" rather than
272
+ "Listeners in a single Gateway" because implementations MAY merge configuration
273
+ from multiple Gateways onto a single data plane, and these rules _also_
274
+ apply in that case).
275
+
276
+ Practically, this means that each listener in a set MUST have a unique
277
+ combination of Port, Protocol, and, if supported by the protocol, Hostname.
278
+
279
+ Some combinations of port, protocol, and TLS settings are considered
280
+ Core support and MUST be supported by implementations based on the objects
281
+ they support:
282
+
283
+ HTTPRoute
284
+
285
+ 1. HTTPRoute, Port: 80, Protocol: HTTP
286
+ 2. HTTPRoute, Port: 443, Protocol: HTTPS, TLS Mode: Terminate, TLS keypair provided
287
+
288
+ TLSRoute
289
+
290
+ 1. TLSRoute, Port: 443, Protocol: TLS, TLS Mode: Passthrough
291
+
292
+ "Distinct" Listeners have the following property:
293
+
294
+ **The implementation can match inbound requests to a single distinct
295
+ Listener**.
296
+
297
+ When multiple Listeners share values for fields (for
298
+ example, two Listeners with the same Port value), the implementation
299
+ can match requests to only one of the Listeners using other
300
+ Listener fields.
301
+
302
+ When multiple listeners have the same value for the Protocol field, then
303
+ each of the Listeners with matching Protocol values MUST have different
304
+ values for other fields.
305
+
306
+ The set of fields that MUST be different for a Listener differs per protocol.
307
+ The following rules define the rules for what fields MUST be considered for
308
+ Listeners to be distinct with each protocol currently defined in the
309
+ Gateway API spec.
310
+
311
+ The set of listeners that all share a protocol value MUST have _different_
312
+ values for _at least one_ of these fields to be distinct:
313
+
314
+ * **HTTP, HTTPS, TLS**: Port, Hostname
315
+ * **TCP, UDP**: Port
316
+
317
+ One **very** important rule to call out involves what happens when an
318
+ implementation:
319
+
320
+ * Supports TCP protocol Listeners, as well as HTTP, HTTPS, or TLS protocol
321
+ Listeners, and
322
+ * sees HTTP, HTTPS, or TLS protocols with the same `port` as one with TCP
323
+ Protocol.
324
+
325
+ In this case all the Listeners that share a port with the
326
+ TCP Listener are not distinct and so MUST NOT be accepted.
327
+
328
+ If an implementation does not support TCP Protocol Listeners, then the
329
+ previous rule does not apply, and the TCP Listeners SHOULD NOT be
330
+ accepted.
331
+
332
+ Note that the `tls` field is not used for determining if a listener is distinct, because
333
+ Listeners that _only_ differ on TLS config will still conflict in all cases.
334
+
335
+ ### Listeners that are distinct only by Hostname
336
+
337
+ When the Listeners are distinct based only on Hostname, inbound request
338
+ hostnames MUST match from the most specific to least specific Hostname
339
+ values to choose the correct Listener and its associated set of Routes.
340
+
341
+ Exact matches MUST be processed before wildcard matches, and wildcard
342
+ matches MUST be processed before fallback (empty Hostname value)
343
+ matches. For example, `"foo.example.com"` takes precedence over
344
+ `"*.example.com"`, and `"*.example.com"` takes precedence over `""`.
345
+
346
+ Additionally, if there are multiple wildcard entries, more specific
347
+ wildcard entries must be processed before less specific wildcard entries.
348
+ For example, `"*.foo.example.com"` takes precedence over `"*.example.com"`.
349
+
350
+ The precise definition here is that the higher the number of dots in the
351
+ hostname to the right of the wildcard character, the higher the precedence.
352
+
353
+ The wildcard character will match any number of characters _and dots_ to
354
+ the left, however, so `"*.example.com"` will match both
355
+ `"foo.bar.example.com"` _and_ `"bar.example.com"`.
356
+
357
+ ## Handling indistinct Listeners
358
+
359
+ If a set of Listeners contains Listeners that are not distinct, then those
360
+ Listeners are _Conflicted_, and the implementation MUST set the "Conflicted"
361
+ condition in the Listener Status to "True".
362
+
363
+ The words "indistinct" and "conflicted" are considered equivalent for the
364
+ purpose of this documentation.
365
+
366
+ Implementations MAY choose to accept a Gateway with some Conflicted
367
+ Listeners only if they only accept the partial Listener set that contains
368
+ no Conflicted Listeners.
369
+
370
+ Specifically, an implementation MAY accept a partial Listener set subject to
371
+ the following rules:
372
+
373
+ * The implementation MUST NOT pick one conflicting Listener as the winner.
374
+ ALL indistinct Listeners must not be accepted for processing.
375
+ * At least one distinct Listener MUST be present, or else the Gateway effectively
376
+ contains _no_ Listeners, and must be rejected from processing as a whole.
377
+
378
+ The implementation MUST set a "ListenersNotValid" condition on the
379
+ Gateway Status when the Gateway contains Conflicted Listeners whether or
380
+ not they accept the Gateway. That Condition SHOULD clearly
381
+ indicate in the Message which Listeners are conflicted, and which are
382
+ Accepted. Additionally, the Listener status for those listeners SHOULD
383
+ indicate which Listeners are conflicted and not Accepted.
384
+
385
+ ## General Listener behavior
386
+
387
+ Note that, for all distinct Listeners, requests SHOULD match at most one Listener.
388
+ For example, if Listeners are defined for "foo.example.com" and "*.example.com", a
389
+ request to "foo.example.com" SHOULD only be routed using routes attached
390
+ to the "foo.example.com" Listener (and not the "*.example.com" Listener).
391
+
392
+ This concept is known as "Listener Isolation", and it is an Extended feature
393
+ of Gateway API. Implementations that do not support Listener Isolation MUST
394
+ clearly document this, and MUST NOT claim support for the
395
+ `GatewayHTTPListenerIsolation` feature.
396
+
397
+ Implementations that _do_ support Listener Isolation SHOULD claim support
398
+ for the Extended `GatewayHTTPListenerIsolation` feature and pass the associated
399
+ conformance tests.
400
+
401
+ ## Compatible Listeners
402
+
403
+ A Gateway's Listeners are considered _compatible_ if:
404
+
405
+ 1. They are distinct.
406
+ 2. The implementation can serve them in compliance with the Addresses
407
+ requirement that all Listeners are available on all assigned
408
+ addresses.
409
+
410
+ Compatible combinations in Extended support are expected to vary across
411
+ implementations. A combination that is compatible for one implementation
412
+ may not be compatible for another.
413
+
414
+ For example, an implementation that cannot serve both TCP and UDP listeners
415
+ on the same address, or cannot mix HTTPS and generic TLS listens on the same port
416
+ would not consider those cases compatible, even though they are distinct.
417
+
418
+ Implementations MAY merge separate Gateways onto a single set of
419
+ Addresses if all Listeners across all Gateways are compatible.
420
+
421
+ In a future release the MinItems=1 requirement MAY be dropped.
422
+
423
+ Support: Core
424
+ items:
425
+ description: |-
426
+ Listener embodies the concept of a logical endpoint where a Gateway accepts
427
+ network connections.
428
+ properties:
429
+ allowedRoutes:
430
+ default:
431
+ namespaces:
432
+ from: Same
433
+ description: |-
434
+ AllowedRoutes defines the types of routes that MAY be attached to a
435
+ Listener and the trusted namespaces where those Route resources MAY be
436
+ present.
437
+
438
+ Although a client request may match multiple route rules, only one rule
439
+ may ultimately receive the request. Matching precedence MUST be
440
+ determined in order of the following criteria:
441
+
442
+ * The most specific match as defined by the Route type.
443
+ * The oldest Route based on creation timestamp. For example, a Route with
444
+ a creation timestamp of "2020-09-08 01:02:03" is given precedence over
445
+ a Route with a creation timestamp of "2020-09-08 01:02:04".
446
+ * If everything else is equivalent, the Route appearing first in
447
+ alphabetical order (namespace/name) should be given precedence. For
448
+ example, foo/bar is given precedence over foo/baz.
449
+
450
+ All valid rules within a Route attached to this Listener should be
451
+ implemented. Invalid Route rules can be ignored (sometimes that will mean
452
+ the full Route). If a Route rule transitions from valid to invalid,
453
+ support for that Route rule should be dropped to ensure consistency. For
454
+ example, even if a filter specified by a Route rule is invalid, the rest
455
+ of the rules within that Route should still be supported.
456
+
457
+ Support: Core
458
+ properties:
459
+ kinds:
460
+ description: |-
461
+ Kinds specifies the groups and kinds of Routes that are allowed to bind
462
+ to this Gateway Listener. When unspecified or empty, the kinds of Routes
463
+ selected are determined using the Listener protocol.
464
+
465
+ A RouteGroupKind MUST correspond to kinds of Routes that are compatible
466
+ with the application protocol specified in the Listener's Protocol field.
467
+ If an implementation does not support or recognize this resource type, it
468
+ MUST set the "ResolvedRefs" condition to False for this Listener with the
469
+ "InvalidRouteKinds" reason.
470
+
471
+ Support: Core
472
+ items:
473
+ description: RouteGroupKind indicates the group and kind
474
+ of a Route resource.
475
+ properties:
476
+ group:
477
+ default: gateway.networking.k8s.io
478
+ description: Group is the group of the Route.
479
+ maxLength: 253
480
+ pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
481
+ type: string
482
+ kind:
483
+ description: Kind is the kind of the Route.
484
+ maxLength: 63
485
+ minLength: 1
486
+ pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
487
+ type: string
488
+ required:
489
+ - kind
490
+ type: object
491
+ maxItems: 8
492
+ type: array
493
+ x-kubernetes-list-type: atomic
494
+ namespaces:
495
+ default:
496
+ from: Same
497
+ description: |-
498
+ Namespaces indicates namespaces from which Routes may be attached to this
499
+ Listener. This is restricted to the namespace of this Gateway by default.
500
+
501
+ Support: Core
502
+ properties:
503
+ from:
504
+ default: Same
505
+ description: |-
506
+ From indicates where Routes will be selected for this Gateway. Possible
507
+ values are:
508
+
509
+ * All: Routes in all namespaces may be used by this Gateway.
510
+ * Selector: Routes in namespaces selected by the selector may be used by
511
+ this Gateway.
512
+ * Same: Only Routes in the same namespace may be used by this Gateway.
513
+
514
+ Support: Core
515
+ enum:
516
+ - All
517
+ - Selector
518
+ - Same
519
+ type: string
520
+ selector:
521
+ description: |-
522
+ Selector must be specified when From is set to "Selector". In that case,
523
+ only Routes in Namespaces matching this Selector will be selected by this
524
+ Gateway. This field is ignored for other values of "From".
525
+
526
+ Support: Core
527
+ properties:
528
+ matchExpressions:
529
+ description: matchExpressions is a list of label
530
+ selector requirements. The requirements are ANDed.
531
+ items:
532
+ description: |-
533
+ A label selector requirement is a selector that contains values, a key, and an operator that
534
+ relates the key and values.
535
+ properties:
536
+ key:
537
+ description: key is the label key that the
538
+ selector applies to.
539
+ type: string
540
+ operator:
541
+ description: |-
542
+ operator represents a key's relationship to a set of values.
543
+ Valid operators are In, NotIn, Exists and DoesNotExist.
544
+ type: string
545
+ values:
546
+ description: |-
547
+ values is an array of string values. If the operator is In or NotIn,
548
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
549
+ the values array must be empty. This array is replaced during a strategic
550
+ merge patch.
551
+ items:
552
+ type: string
553
+ type: array
554
+ x-kubernetes-list-type: atomic
555
+ required:
556
+ - key
557
+ - operator
558
+ type: object
559
+ type: array
560
+ x-kubernetes-list-type: atomic
561
+ matchLabels:
562
+ additionalProperties:
563
+ type: string
564
+ description: |-
565
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
566
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
567
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
568
+ type: object
569
+ type: object
570
+ x-kubernetes-map-type: atomic
571
+ type: object
572
+ type: object
573
+ hostname:
574
+ description: |-
575
+ Hostname specifies the virtual hostname to match for protocol types that
576
+ define this concept. When unspecified, all hostnames are matched. This
577
+ field is ignored for protocols that don't require hostname based
578
+ matching.
579
+
580
+ Implementations MUST apply Hostname matching appropriately for each of
581
+ the following protocols:
582
+
583
+ * TLS: The Listener Hostname MUST match the SNI.
584
+ * HTTP: The Listener Hostname MUST match the Host header of the request.
585
+ * HTTPS: The Listener Hostname SHOULD match both the SNI and Host header.
586
+ Note that this does not require the SNI and Host header to be the same.
587
+ The semantics of this are described in more detail below.
588
+
589
+ To ensure security, Section 11.1 of RFC-6066 emphasizes that server
590
+ implementations that rely on SNI hostname matching MUST also verify
591
+ hostnames within the application protocol.
592
+
593
+ Section 9.1.2 of RFC-7540 provides a mechanism for servers to reject the
594
+ reuse of a connection by responding with the HTTP 421 Misdirected Request
595
+ status code. This indicates that the origin server has rejected the
596
+ request because it appears to have been misdirected.
597
+
598
+ To detect misdirected requests, Gateways SHOULD match the authority of
599
+ the requests with all the SNI hostname(s) configured across all the
600
+ Gateway Listeners on the same port and protocol:
601
+
602
+ * If another Listener has an exact match or more specific wildcard entry,
603
+ the Gateway SHOULD return a 421.
604
+ * If the current Listener (selected by SNI matching during ClientHello)
605
+ does not match the Host:
606
+ * If another Listener does match the Host the Gateway SHOULD return a
607
+ 421.
608
+ * If no other Listener matches the Host, the Gateway MUST return a
609
+ 404.
610
+
611
+ For HTTPRoute and TLSRoute resources, there is an interaction with the
612
+ `spec.hostnames` array. When both listener and route specify hostnames,
613
+ there MUST be an intersection between the values for a Route to be
614
+ accepted. For more information, refer to the Route specific Hostnames
615
+ documentation.
616
+
617
+ Hostnames that are prefixed with a wildcard label (`*.`) are interpreted
618
+ as a suffix match. That means that a match for `*.example.com` would match
619
+ both `test.example.com`, and `foo.test.example.com`, but not `example.com`.
620
+
621
+ Support: Core
622
+ maxLength: 253
623
+ minLength: 1
624
+ pattern: ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
625
+ type: string
626
+ name:
627
+ description: |-
628
+ Name is the name of the Listener. This name MUST be unique within a
629
+ Gateway.
630
+
631
+ Support: Core
632
+ maxLength: 253
633
+ minLength: 1
634
+ pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
635
+ type: string
636
+ port:
637
+ description: |-
638
+ Port is the network port. Multiple listeners may use the
639
+ same port, subject to the Listener compatibility rules.
640
+
641
+ Support: Core
642
+ format: int32
643
+ maximum: 65535
644
+ minimum: 1
645
+ type: integer
646
+ protocol:
647
+ description: |-
648
+ Protocol specifies the network protocol this listener expects to receive.
649
+
650
+ Support: Core
651
+ maxLength: 255
652
+ minLength: 1
653
+ pattern: ^[a-zA-Z0-9]([-a-zA-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]+$
654
+ type: string
655
+ tls:
656
+ description: |-
657
+ TLS is the TLS configuration for the Listener. This field is required if
658
+ the Protocol field is "HTTPS" or "TLS". It is invalid to set this field
659
+ if the Protocol field is "HTTP", "TCP", or "UDP".
660
+
661
+ The association of SNIs to Certificate defined in ListenerTLSConfig is
662
+ defined based on the Hostname field for this listener.
663
+
664
+ The GatewayClass MUST use the longest matching SNI out of all
665
+ available certificates for any TLS handshake.
666
+
667
+ Support: Core
668
+ properties:
669
+ certificateRefs:
670
+ description: |-
671
+ CertificateRefs contains a series of references to Kubernetes objects that
672
+ contains TLS certificates and private keys. These certificates are used to
673
+ establish a TLS handshake for requests that match the hostname of the
674
+ associated listener.
675
+
676
+ A single CertificateRef to a Kubernetes Secret has "Core" support.
677
+ Implementations MAY choose to support attaching multiple certificates to
678
+ a Listener, but this behavior is implementation-specific.
679
+
680
+ References to a resource in different namespace are invalid UNLESS there
681
+ is a ReferenceGrant in the target namespace that allows the certificate
682
+ to be attached. If a ReferenceGrant does not allow this reference, the
683
+ "ResolvedRefs" condition MUST be set to False for this listener with the
684
+ "RefNotPermitted" reason.
685
+
686
+ This field is required to have at least one element when the mode is set
687
+ to "Terminate" (default) and is optional otherwise.
688
+
689
+ CertificateRefs can reference to standard Kubernetes resources, i.e.
690
+ Secret, or implementation-specific custom resources.
691
+
692
+ Support: Core - A single reference to a Kubernetes Secret of type kubernetes.io/tls
693
+
694
+ Support: Implementation-specific (More than one reference or other resource types)
695
+ items:
696
+ description: |-
697
+ SecretObjectReference identifies an API object including its namespace,
698
+ defaulting to Secret.
699
+
700
+ The API object must be valid in the cluster; the Group and Kind must
701
+ be registered in the cluster for this reference to be valid.
702
+
703
+ References to objects with invalid Group and Kind are not valid, and must
704
+ be rejected by the implementation, with appropriate Conditions set
705
+ on the containing object.
706
+ properties:
707
+ group:
708
+ default: ""
709
+ description: |-
710
+ Group is the group of the referent. For example, "gateway.networking.k8s.io".
711
+ When unspecified or empty string, core API group is inferred.
712
+ maxLength: 253
713
+ pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
714
+ type: string
715
+ kind:
716
+ default: Secret
717
+ description: Kind is kind of the referent. For example
718
+ "Secret".
719
+ maxLength: 63
720
+ minLength: 1
721
+ pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
722
+ type: string
723
+ name:
724
+ description: Name is the name of the referent.
725
+ maxLength: 253
726
+ minLength: 1
727
+ type: string
728
+ namespace:
729
+ description: |-
730
+ Namespace is the namespace of the referenced object. When unspecified, the local
731
+ namespace is inferred.
732
+
733
+ Note that when a namespace different than the local namespace is specified,
734
+ a ReferenceGrant object is required in the referent namespace to allow that
735
+ namespace's owner to accept the reference. See the ReferenceGrant
736
+ documentation for details.
737
+
738
+ Support: Core
739
+ maxLength: 63
740
+ minLength: 1
741
+ pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
742
+ type: string
743
+ required:
744
+ - name
745
+ type: object
746
+ maxItems: 64
747
+ type: array
748
+ x-kubernetes-list-type: atomic
749
+ mode:
750
+ default: Terminate
751
+ description: |-
752
+ Mode defines the TLS behavior for the TLS session initiated by the client.
753
+ There are two possible modes:
754
+
755
+ - Terminate: The TLS session between the downstream client and the
756
+ Gateway is terminated at the Gateway. This mode requires certificates
757
+ to be specified in some way, such as populating the certificateRefs
758
+ field.
759
+ - Passthrough: The TLS session is NOT terminated by the Gateway. This
760
+ implies that the Gateway can't decipher the TLS stream except for
761
+ the ClientHello message of the TLS protocol. The certificateRefs field
762
+ is ignored in this mode.
763
+
764
+ Support: Core
765
+ enum:
766
+ - Terminate
767
+ - Passthrough
768
+ type: string
769
+ options:
770
+ additionalProperties:
771
+ description: |-
772
+ AnnotationValue is the value of an annotation in Gateway API. This is used
773
+ for validation of maps such as TLS options. This roughly matches Kubernetes
774
+ annotation validation, although the length validation in that case is based
775
+ on the entire size of the annotations struct.
776
+ maxLength: 4096
777
+ minLength: 0
778
+ type: string
779
+ description: |-
780
+ Options are a list of key/value pairs to enable extended TLS
781
+ configuration for each implementation. For example, configuring the
782
+ minimum TLS version or supported cipher suites.
783
+
784
+ A set of common keys MAY be defined by the API in the future. To avoid
785
+ any ambiguity, implementation-specific definitions MUST use
786
+ domain-prefixed names, such as `example.com/my-custom-option`.
787
+ Un-prefixed names are reserved for key names defined by Gateway API.
788
+
789
+ Support: Implementation-specific
790
+ maxProperties: 16
791
+ type: object
792
+ type: object
793
+ x-kubernetes-validations:
794
+ - message: certificateRefs or options must be specified when
795
+ mode is Terminate
796
+ rule: 'self.mode == ''Terminate'' ? size(self.certificateRefs)
797
+ > 0 || size(self.options) > 0 : true'
798
+ required:
799
+ - name
800
+ - port
801
+ - protocol
802
+ type: object
803
+ maxItems: 64
804
+ minItems: 1
805
+ type: array
806
+ x-kubernetes-list-map-keys:
807
+ - name
808
+ x-kubernetes-list-type: map
809
+ x-kubernetes-validations:
810
+ - message: tls must not be specified for protocols ['HTTP', 'TCP',
811
+ 'UDP']
812
+ rule: 'self.all(l, l.protocol in [''HTTP'', ''TCP'', ''UDP''] ?
813
+ !has(l.tls) : true)'
814
+ - message: tls mode must be Terminate for protocol HTTPS
815
+ rule: 'self.all(l, (l.protocol == ''HTTPS'' && has(l.tls)) ? (l.tls.mode
816
+ == '''' || l.tls.mode == ''Terminate'') : true)'
817
+ - message: hostname must not be specified for protocols ['TCP', 'UDP']
818
+ rule: 'self.all(l, l.protocol in [''TCP'', ''UDP''] ? (!has(l.hostname)
819
+ || l.hostname == '''') : true)'
820
+ - message: Listener name must be unique within the Gateway
821
+ rule: self.all(l1, self.exists_one(l2, l1.name == l2.name))
822
+ - message: Combination of port, protocol and hostname must be unique
823
+ for each listener
824
+ rule: 'self.all(l1, self.exists_one(l2, l1.port == l2.port && l1.protocol
825
+ == l2.protocol && (has(l1.hostname) && has(l2.hostname) ? l1.hostname
826
+ == l2.hostname : !has(l1.hostname) && !has(l2.hostname))))'
827
+ required:
828
+ - gatewayClassName
829
+ - listeners
830
+ type: object
831
+ status:
832
+ default:
833
+ conditions:
834
+ - lastTransitionTime: "1970-01-01T00:00:00Z"
835
+ message: Waiting for controller
836
+ reason: Pending
837
+ status: Unknown
838
+ type: Accepted
839
+ - lastTransitionTime: "1970-01-01T00:00:00Z"
840
+ message: Waiting for controller
841
+ reason: Pending
842
+ status: Unknown
843
+ type: Programmed
844
+ description: Status defines the current state of Gateway.
845
+ properties:
846
+ addresses:
847
+ description: |-
848
+ Addresses lists the network addresses that have been bound to the
849
+ Gateway.
850
+
851
+ This list may differ from the addresses provided in the spec under some
852
+ conditions:
853
+
854
+ * no addresses are specified, all addresses are dynamically assigned
855
+ * a combination of specified and dynamic addresses are assigned
856
+ * a specified address was unusable (e.g. already in use)
857
+ items:
858
+ description: GatewayStatusAddress describes a network address that
859
+ is bound to a Gateway.
860
+ oneOf:
861
+ - properties:
862
+ type:
863
+ enum:
864
+ - IPAddress
865
+ value:
866
+ anyOf:
867
+ - format: ipv4
868
+ - format: ipv6
869
+ - properties:
870
+ type:
871
+ not:
872
+ enum:
873
+ - IPAddress
874
+ properties:
875
+ type:
876
+ default: IPAddress
877
+ description: Type of the address.
878
+ maxLength: 253
879
+ minLength: 1
880
+ pattern: ^Hostname|IPAddress|NamedAddress|[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$
881
+ type: string
882
+ value:
883
+ description: |-
884
+ Value of the address. The validity of the values will depend
885
+ on the type and support by the controller.
886
+
887
+ Examples: `1.2.3.4`, `128::1`, `my-ip-address`.
888
+ maxLength: 253
889
+ minLength: 1
890
+ type: string
891
+ required:
892
+ - value
893
+ type: object
894
+ x-kubernetes-validations:
895
+ - message: Hostname value must only contain valid characters (matching
896
+ ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$)
897
+ rule: 'self.type == ''Hostname'' ? self.value.matches(r"""^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$"""):
898
+ true'
899
+ maxItems: 16
900
+ type: array
901
+ x-kubernetes-list-type: atomic
902
+ conditions:
903
+ default:
904
+ - lastTransitionTime: "1970-01-01T00:00:00Z"
905
+ message: Waiting for controller
906
+ reason: Pending
907
+ status: Unknown
908
+ type: Accepted
909
+ - lastTransitionTime: "1970-01-01T00:00:00Z"
910
+ message: Waiting for controller
911
+ reason: Pending
912
+ status: Unknown
913
+ type: Programmed
914
+ description: |-
915
+ Conditions describe the current conditions of the Gateway.
916
+
917
+ Implementations should prefer to express Gateway conditions
918
+ using the `GatewayConditionType` and `GatewayConditionReason`
919
+ constants so that operators and tools can converge on a common
920
+ vocabulary to describe Gateway state.
921
+
922
+ Known condition types are:
923
+
924
+ * "Accepted"
925
+ * "Programmed"
926
+ * "Ready"
927
+ items:
928
+ description: Condition contains details for one aspect of the current
929
+ state of this API Resource.
930
+ properties:
931
+ lastTransitionTime:
932
+ description: |-
933
+ lastTransitionTime is the last time the condition transitioned from one status to another.
934
+ This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
935
+ format: date-time
936
+ type: string
937
+ message:
938
+ description: |-
939
+ message is a human readable message indicating details about the transition.
940
+ This may be an empty string.
941
+ maxLength: 32768
942
+ type: string
943
+ observedGeneration:
944
+ description: |-
945
+ observedGeneration represents the .metadata.generation that the condition was set based upon.
946
+ For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
947
+ with respect to the current state of the instance.
948
+ format: int64
949
+ minimum: 0
950
+ type: integer
951
+ reason:
952
+ description: |-
953
+ reason contains a programmatic identifier indicating the reason for the condition's last transition.
954
+ Producers of specific condition types may define expected values and meanings for this field,
955
+ and whether the values are considered a guaranteed API.
956
+ The value should be a CamelCase string.
957
+ This field may not be empty.
958
+ maxLength: 1024
959
+ minLength: 1
960
+ pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
961
+ type: string
962
+ status:
963
+ description: status of the condition, one of True, False, Unknown.
964
+ enum:
965
+ - "True"
966
+ - "False"
967
+ - Unknown
968
+ type: string
969
+ type:
970
+ description: type of condition in CamelCase or in foo.example.com/CamelCase.
971
+ maxLength: 316
972
+ 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])$
973
+ type: string
974
+ required:
975
+ - lastTransitionTime
976
+ - message
977
+ - reason
978
+ - status
979
+ - type
980
+ type: object
981
+ maxItems: 8
982
+ type: array
983
+ x-kubernetes-list-map-keys:
984
+ - type
985
+ x-kubernetes-list-type: map
986
+ listeners:
987
+ description: Listeners provide status for each unique listener port
988
+ defined in the Spec.
989
+ items:
990
+ description: ListenerStatus is the status associated with a Listener.
991
+ properties:
992
+ attachedRoutes:
993
+ description: |-
994
+ AttachedRoutes represents the total number of Routes that have been
995
+ successfully attached to this Listener.
996
+
997
+ Successful attachment of a Route to a Listener is based solely on the
998
+ combination of the AllowedRoutes field on the corresponding Listener
999
+ and the Route's ParentRefs field. A Route is successfully attached to
1000
+ a Listener when it is selected by the Listener's AllowedRoutes field
1001
+ AND the Route has a valid ParentRef selecting the whole Gateway
1002
+ resource or a specific Listener as a parent resource (more detail on
1003
+ attachment semantics can be found in the documentation on the various
1004
+ Route kinds ParentRefs fields). Listener or Route status does not impact
1005
+ successful attachment, i.e. the AttachedRoutes field count MUST be set
1006
+ for Listeners with condition Accepted: false and MUST count successfully
1007
+ attached Routes that may themselves have Accepted: false conditions.
1008
+
1009
+ Uses for this field include troubleshooting Route attachment and
1010
+ measuring blast radius/impact of changes to a Listener.
1011
+ format: int32
1012
+ type: integer
1013
+ conditions:
1014
+ description: Conditions describe the current condition of this
1015
+ listener.
1016
+ items:
1017
+ description: Condition contains details for one aspect of
1018
+ the current state of this API Resource.
1019
+ properties:
1020
+ lastTransitionTime:
1021
+ description: |-
1022
+ lastTransitionTime is the last time the condition transitioned from one status to another.
1023
+ This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
1024
+ format: date-time
1025
+ type: string
1026
+ message:
1027
+ description: |-
1028
+ message is a human readable message indicating details about the transition.
1029
+ This may be an empty string.
1030
+ maxLength: 32768
1031
+ type: string
1032
+ observedGeneration:
1033
+ description: |-
1034
+ observedGeneration represents the .metadata.generation that the condition was set based upon.
1035
+ For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
1036
+ with respect to the current state of the instance.
1037
+ format: int64
1038
+ minimum: 0
1039
+ type: integer
1040
+ reason:
1041
+ description: |-
1042
+ reason contains a programmatic identifier indicating the reason for the condition's last transition.
1043
+ Producers of specific condition types may define expected values and meanings for this field,
1044
+ and whether the values are considered a guaranteed API.
1045
+ The value should be a CamelCase string.
1046
+ This field may not be empty.
1047
+ maxLength: 1024
1048
+ minLength: 1
1049
+ pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
1050
+ type: string
1051
+ status:
1052
+ description: status of the condition, one of True, False,
1053
+ Unknown.
1054
+ enum:
1055
+ - "True"
1056
+ - "False"
1057
+ - Unknown
1058
+ type: string
1059
+ type:
1060
+ description: type of condition in CamelCase or in foo.example.com/CamelCase.
1061
+ maxLength: 316
1062
+ 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])$
1063
+ type: string
1064
+ required:
1065
+ - lastTransitionTime
1066
+ - message
1067
+ - reason
1068
+ - status
1069
+ - type
1070
+ type: object
1071
+ maxItems: 8
1072
+ type: array
1073
+ x-kubernetes-list-map-keys:
1074
+ - type
1075
+ x-kubernetes-list-type: map
1076
+ name:
1077
+ description: Name is the name of the Listener that this status
1078
+ corresponds to.
1079
+ maxLength: 253
1080
+ minLength: 1
1081
+ pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
1082
+ type: string
1083
+ supportedKinds:
1084
+ description: |-
1085
+ SupportedKinds is the list indicating the Kinds supported by this
1086
+ listener. This MUST represent the kinds an implementation supports for
1087
+ that Listener configuration.
1088
+
1089
+ If kinds are specified in Spec that are not supported, they MUST NOT
1090
+ appear in this list and an implementation MUST set the "ResolvedRefs"
1091
+ condition to "False" with the "InvalidRouteKinds" reason. If both valid
1092
+ and invalid Route kinds are specified, the implementation MUST
1093
+ reference the valid Route kinds that have been specified.
1094
+ items:
1095
+ description: RouteGroupKind indicates the group and kind of
1096
+ a Route resource.
1097
+ properties:
1098
+ group:
1099
+ default: gateway.networking.k8s.io
1100
+ description: Group is the group of the Route.
1101
+ maxLength: 253
1102
+ pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
1103
+ type: string
1104
+ kind:
1105
+ description: Kind is the kind of the Route.
1106
+ maxLength: 63
1107
+ minLength: 1
1108
+ pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
1109
+ type: string
1110
+ required:
1111
+ - kind
1112
+ type: object
1113
+ maxItems: 8
1114
+ type: array
1115
+ x-kubernetes-list-type: atomic
1116
+ required:
1117
+ - attachedRoutes
1118
+ - conditions
1119
+ - name
1120
+ - supportedKinds
1121
+ type: object
1122
+ maxItems: 64
1123
+ type: array
1124
+ x-kubernetes-list-map-keys:
1125
+ - name
1126
+ x-kubernetes-list-type: map
1127
+ type: object
1128
+ required:
1129
+ - spec
1130
+ type: object
1131
+ served: true
1132
+ storage: true
1133
+ subresources:
1134
+ status: {}
1135
+ - additionalPrinterColumns:
1136
+ - jsonPath: .spec.gatewayClassName
1137
+ name: Class
1138
+ type: string
1139
+ - jsonPath: .status.addresses[*].value
1140
+ name: Address
1141
+ type: string
1142
+ - jsonPath: .status.conditions[?(@.type=="Programmed")].status
1143
+ name: Programmed
1144
+ type: string
1145
+ - jsonPath: .metadata.creationTimestamp
1146
+ name: Age
1147
+ type: date
1148
+ name: v1beta1
1149
+ schema:
1150
+ openAPIV3Schema:
1151
+ description: |-
1152
+ Gateway represents an instance of a service-traffic handling infrastructure
1153
+ by binding Listeners to a set of IP addresses.
1154
+ properties:
1155
+ apiVersion:
1156
+ description: |-
1157
+ APIVersion defines the versioned schema of this representation of an object.
1158
+ Servers should convert recognized schemas to the latest internal value, and
1159
+ may reject unrecognized values.
1160
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
1161
+ type: string
1162
+ kind:
1163
+ description: |-
1164
+ Kind is a string value representing the REST resource this object represents.
1165
+ Servers may infer this from the endpoint the client submits requests to.
1166
+ Cannot be updated.
1167
+ In CamelCase.
1168
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
1169
+ type: string
1170
+ metadata:
1171
+ type: object
1172
+ spec:
1173
+ description: Spec defines the desired state of Gateway.
1174
+ properties:
1175
+ addresses:
1176
+ description: |-
1177
+ Addresses requested for this Gateway. This is optional and behavior can
1178
+ depend on the implementation. If a value is set in the spec and the
1179
+ requested address is invalid or unavailable, the implementation MUST
1180
+ indicate this in an associated entry in GatewayStatus.Conditions.
1181
+
1182
+ The Addresses field represents a request for the address(es) on the
1183
+ "outside of the Gateway", that traffic bound for this Gateway will use.
1184
+ This could be the IP address or hostname of an external load balancer or
1185
+ other networking infrastructure, or some other address that traffic will
1186
+ be sent to.
1187
+
1188
+ If no Addresses are specified, the implementation MAY schedule the
1189
+ Gateway in an implementation-specific manner, assigning an appropriate
1190
+ set of Addresses.
1191
+
1192
+ The implementation MUST bind all Listeners to every GatewayAddress that
1193
+ it assigns to the Gateway and add a corresponding entry in
1194
+ GatewayStatus.Addresses.
1195
+
1196
+ Support: Extended
1197
+ items:
1198
+ description: GatewaySpecAddress describes an address that can be
1199
+ bound to a Gateway.
1200
+ oneOf:
1201
+ - properties:
1202
+ type:
1203
+ enum:
1204
+ - IPAddress
1205
+ value:
1206
+ anyOf:
1207
+ - format: ipv4
1208
+ - format: ipv6
1209
+ - properties:
1210
+ type:
1211
+ not:
1212
+ enum:
1213
+ - IPAddress
1214
+ properties:
1215
+ type:
1216
+ default: IPAddress
1217
+ description: Type of the address.
1218
+ maxLength: 253
1219
+ minLength: 1
1220
+ pattern: ^Hostname|IPAddress|NamedAddress|[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$
1221
+ type: string
1222
+ value:
1223
+ description: |-
1224
+ When a value is unspecified, an implementation SHOULD automatically
1225
+ assign an address matching the requested type if possible.
1226
+
1227
+ If an implementation does not support an empty value, they MUST set the
1228
+ "Programmed" condition in status to False with a reason of "AddressNotAssigned".
1229
+
1230
+ Examples: `1.2.3.4`, `128::1`, `my-ip-address`.
1231
+ maxLength: 253
1232
+ type: string
1233
+ type: object
1234
+ x-kubernetes-validations:
1235
+ - message: Hostname value must be empty or contain only valid characters
1236
+ (matching ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$)
1237
+ rule: 'self.type == ''Hostname'' ? (!has(self.value) || self.value.matches(r"""^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$""")):
1238
+ true'
1239
+ maxItems: 16
1240
+ type: array
1241
+ x-kubernetes-list-type: atomic
1242
+ x-kubernetes-validations:
1243
+ - message: IPAddress values must be unique
1244
+ rule: 'self.all(a1, a1.type == ''IPAddress'' && has(a1.value) ?
1245
+ self.exists_one(a2, a2.type == a1.type && has(a2.value) && a2.value
1246
+ == a1.value) : true )'
1247
+ - message: Hostname values must be unique
1248
+ rule: 'self.all(a1, a1.type == ''Hostname'' && has(a1.value) ?
1249
+ self.exists_one(a2, a2.type == a1.type && has(a2.value) && a2.value
1250
+ == a1.value) : true )'
1251
+ gatewayClassName:
1252
+ description: |-
1253
+ GatewayClassName used for this Gateway. This is the name of a
1254
+ GatewayClass resource.
1255
+ maxLength: 253
1256
+ minLength: 1
1257
+ type: string
1258
+ infrastructure:
1259
+ description: |-
1260
+ Infrastructure defines infrastructure level attributes about this Gateway instance.
1261
+
1262
+ Support: Extended
1263
+ properties:
1264
+ annotations:
1265
+ additionalProperties:
1266
+ description: |-
1267
+ AnnotationValue is the value of an annotation in Gateway API. This is used
1268
+ for validation of maps such as TLS options. This roughly matches Kubernetes
1269
+ annotation validation, although the length validation in that case is based
1270
+ on the entire size of the annotations struct.
1271
+ maxLength: 4096
1272
+ minLength: 0
1273
+ type: string
1274
+ description: |-
1275
+ Annotations that SHOULD be applied to any resources created in response to this Gateway.
1276
+
1277
+ For implementations creating other Kubernetes objects, this should be the `metadata.annotations` field on resources.
1278
+ For other implementations, this refers to any relevant (implementation specific) "annotations" concepts.
1279
+
1280
+ An implementation may chose to add additional implementation-specific annotations as they see fit.
1281
+
1282
+ Support: Extended
1283
+ maxProperties: 8
1284
+ type: object
1285
+ x-kubernetes-validations:
1286
+ - message: Annotation keys must be in the form of an optional
1287
+ DNS subdomain prefix followed by a required name segment of
1288
+ up to 63 characters.
1289
+ rule: self.all(key, key.matches(r"""^([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_.]{0,61})?[A-Za-z0-9]$"""))
1290
+ - message: If specified, the annotation key's prefix must be a
1291
+ DNS subdomain not longer than 253 characters in total.
1292
+ rule: self.all(key, key.split("/")[0].size() < 253)
1293
+ labels:
1294
+ additionalProperties:
1295
+ description: |-
1296
+ LabelValue is the value of a label in the Gateway API. This is used for validation
1297
+ of maps such as Gateway infrastructure labels. This matches the Kubernetes
1298
+ label validation rules:
1299
+ * must be 63 characters or less (can be empty),
1300
+ * unless empty, must begin and end with an alphanumeric character ([a-z0-9A-Z]),
1301
+ * could contain dashes (-), underscores (_), dots (.), and alphanumerics between.
1302
+
1303
+ Valid values include:
1304
+
1305
+ * MyValue
1306
+ * my.name
1307
+ * 123-my-value
1308
+ maxLength: 63
1309
+ minLength: 0
1310
+ pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
1311
+ type: string
1312
+ description: |-
1313
+ Labels that SHOULD be applied to any resources created in response to this Gateway.
1314
+
1315
+ For implementations creating other Kubernetes objects, this should be the `metadata.labels` field on resources.
1316
+ For other implementations, this refers to any relevant (implementation specific) "labels" concepts.
1317
+
1318
+ An implementation may chose to add additional implementation-specific labels as they see fit.
1319
+
1320
+ If an implementation maps these labels to Pods, or any other resource that would need to be recreated when labels
1321
+ change, it SHOULD clearly warn about this behavior in documentation.
1322
+
1323
+ Support: Extended
1324
+ maxProperties: 8
1325
+ type: object
1326
+ x-kubernetes-validations:
1327
+ - message: Label keys must be in the form of an optional DNS subdomain
1328
+ prefix followed by a required name segment of up to 63 characters.
1329
+ rule: self.all(key, key.matches(r"""^([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_.]{0,61})?[A-Za-z0-9]$"""))
1330
+ - message: If specified, the label key's prefix must be a DNS
1331
+ subdomain not longer than 253 characters in total.
1332
+ rule: self.all(key, key.split("/")[0].size() < 253)
1333
+ parametersRef:
1334
+ description: |-
1335
+ ParametersRef is a reference to a resource that contains the configuration
1336
+ parameters corresponding to the Gateway. This is optional if the
1337
+ controller does not require any additional configuration.
1338
+
1339
+ This follows the same semantics as GatewayClass's `parametersRef`, but on a per-Gateway basis
1340
+
1341
+ The Gateway's GatewayClass may provide its own `parametersRef`. When both are specified,
1342
+ the merging behavior is implementation specific.
1343
+ It is generally recommended that GatewayClass provides defaults that can be overridden by a Gateway.
1344
+
1345
+ If the referent cannot be found, refers to an unsupported kind, or when
1346
+ the data within that resource is malformed, the Gateway SHOULD be
1347
+ rejected with the "Accepted" status condition set to "False" and an
1348
+ "InvalidParameters" reason.
1349
+
1350
+ Support: Implementation-specific
1351
+ properties:
1352
+ group:
1353
+ description: Group is the group of the referent.
1354
+ maxLength: 253
1355
+ pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
1356
+ type: string
1357
+ kind:
1358
+ description: Kind is kind of the referent.
1359
+ maxLength: 63
1360
+ minLength: 1
1361
+ pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
1362
+ type: string
1363
+ name:
1364
+ description: Name is the name of the referent.
1365
+ maxLength: 253
1366
+ minLength: 1
1367
+ type: string
1368
+ required:
1369
+ - group
1370
+ - kind
1371
+ - name
1372
+ type: object
1373
+ type: object
1374
+ listeners:
1375
+ description: |-
1376
+ Listeners associated with this Gateway. Listeners define
1377
+ logical endpoints that are bound on this Gateway's addresses.
1378
+ At least one Listener MUST be specified.
1379
+
1380
+ ## Distinct Listeners
1381
+
1382
+ Each Listener in a set of Listeners (for example, in a single Gateway)
1383
+ MUST be _distinct_, in that a traffic flow MUST be able to be assigned to
1384
+ exactly one listener. (This section uses "set of Listeners" rather than
1385
+ "Listeners in a single Gateway" because implementations MAY merge configuration
1386
+ from multiple Gateways onto a single data plane, and these rules _also_
1387
+ apply in that case).
1388
+
1389
+ Practically, this means that each listener in a set MUST have a unique
1390
+ combination of Port, Protocol, and, if supported by the protocol, Hostname.
1391
+
1392
+ Some combinations of port, protocol, and TLS settings are considered
1393
+ Core support and MUST be supported by implementations based on the objects
1394
+ they support:
1395
+
1396
+ HTTPRoute
1397
+
1398
+ 1. HTTPRoute, Port: 80, Protocol: HTTP
1399
+ 2. HTTPRoute, Port: 443, Protocol: HTTPS, TLS Mode: Terminate, TLS keypair provided
1400
+
1401
+ TLSRoute
1402
+
1403
+ 1. TLSRoute, Port: 443, Protocol: TLS, TLS Mode: Passthrough
1404
+
1405
+ "Distinct" Listeners have the following property:
1406
+
1407
+ **The implementation can match inbound requests to a single distinct
1408
+ Listener**.
1409
+
1410
+ When multiple Listeners share values for fields (for
1411
+ example, two Listeners with the same Port value), the implementation
1412
+ can match requests to only one of the Listeners using other
1413
+ Listener fields.
1414
+
1415
+ When multiple listeners have the same value for the Protocol field, then
1416
+ each of the Listeners with matching Protocol values MUST have different
1417
+ values for other fields.
1418
+
1419
+ The set of fields that MUST be different for a Listener differs per protocol.
1420
+ The following rules define the rules for what fields MUST be considered for
1421
+ Listeners to be distinct with each protocol currently defined in the
1422
+ Gateway API spec.
1423
+
1424
+ The set of listeners that all share a protocol value MUST have _different_
1425
+ values for _at least one_ of these fields to be distinct:
1426
+
1427
+ * **HTTP, HTTPS, TLS**: Port, Hostname
1428
+ * **TCP, UDP**: Port
1429
+
1430
+ One **very** important rule to call out involves what happens when an
1431
+ implementation:
1432
+
1433
+ * Supports TCP protocol Listeners, as well as HTTP, HTTPS, or TLS protocol
1434
+ Listeners, and
1435
+ * sees HTTP, HTTPS, or TLS protocols with the same `port` as one with TCP
1436
+ Protocol.
1437
+
1438
+ In this case all the Listeners that share a port with the
1439
+ TCP Listener are not distinct and so MUST NOT be accepted.
1440
+
1441
+ If an implementation does not support TCP Protocol Listeners, then the
1442
+ previous rule does not apply, and the TCP Listeners SHOULD NOT be
1443
+ accepted.
1444
+
1445
+ Note that the `tls` field is not used for determining if a listener is distinct, because
1446
+ Listeners that _only_ differ on TLS config will still conflict in all cases.
1447
+
1448
+ ### Listeners that are distinct only by Hostname
1449
+
1450
+ When the Listeners are distinct based only on Hostname, inbound request
1451
+ hostnames MUST match from the most specific to least specific Hostname
1452
+ values to choose the correct Listener and its associated set of Routes.
1453
+
1454
+ Exact matches MUST be processed before wildcard matches, and wildcard
1455
+ matches MUST be processed before fallback (empty Hostname value)
1456
+ matches. For example, `"foo.example.com"` takes precedence over
1457
+ `"*.example.com"`, and `"*.example.com"` takes precedence over `""`.
1458
+
1459
+ Additionally, if there are multiple wildcard entries, more specific
1460
+ wildcard entries must be processed before less specific wildcard entries.
1461
+ For example, `"*.foo.example.com"` takes precedence over `"*.example.com"`.
1462
+
1463
+ The precise definition here is that the higher the number of dots in the
1464
+ hostname to the right of the wildcard character, the higher the precedence.
1465
+
1466
+ The wildcard character will match any number of characters _and dots_ to
1467
+ the left, however, so `"*.example.com"` will match both
1468
+ `"foo.bar.example.com"` _and_ `"bar.example.com"`.
1469
+
1470
+ ## Handling indistinct Listeners
1471
+
1472
+ If a set of Listeners contains Listeners that are not distinct, then those
1473
+ Listeners are _Conflicted_, and the implementation MUST set the "Conflicted"
1474
+ condition in the Listener Status to "True".
1475
+
1476
+ The words "indistinct" and "conflicted" are considered equivalent for the
1477
+ purpose of this documentation.
1478
+
1479
+ Implementations MAY choose to accept a Gateway with some Conflicted
1480
+ Listeners only if they only accept the partial Listener set that contains
1481
+ no Conflicted Listeners.
1482
+
1483
+ Specifically, an implementation MAY accept a partial Listener set subject to
1484
+ the following rules:
1485
+
1486
+ * The implementation MUST NOT pick one conflicting Listener as the winner.
1487
+ ALL indistinct Listeners must not be accepted for processing.
1488
+ * At least one distinct Listener MUST be present, or else the Gateway effectively
1489
+ contains _no_ Listeners, and must be rejected from processing as a whole.
1490
+
1491
+ The implementation MUST set a "ListenersNotValid" condition on the
1492
+ Gateway Status when the Gateway contains Conflicted Listeners whether or
1493
+ not they accept the Gateway. That Condition SHOULD clearly
1494
+ indicate in the Message which Listeners are conflicted, and which are
1495
+ Accepted. Additionally, the Listener status for those listeners SHOULD
1496
+ indicate which Listeners are conflicted and not Accepted.
1497
+
1498
+ ## General Listener behavior
1499
+
1500
+ Note that, for all distinct Listeners, requests SHOULD match at most one Listener.
1501
+ For example, if Listeners are defined for "foo.example.com" and "*.example.com", a
1502
+ request to "foo.example.com" SHOULD only be routed using routes attached
1503
+ to the "foo.example.com" Listener (and not the "*.example.com" Listener).
1504
+
1505
+ This concept is known as "Listener Isolation", and it is an Extended feature
1506
+ of Gateway API. Implementations that do not support Listener Isolation MUST
1507
+ clearly document this, and MUST NOT claim support for the
1508
+ `GatewayHTTPListenerIsolation` feature.
1509
+
1510
+ Implementations that _do_ support Listener Isolation SHOULD claim support
1511
+ for the Extended `GatewayHTTPListenerIsolation` feature and pass the associated
1512
+ conformance tests.
1513
+
1514
+ ## Compatible Listeners
1515
+
1516
+ A Gateway's Listeners are considered _compatible_ if:
1517
+
1518
+ 1. They are distinct.
1519
+ 2. The implementation can serve them in compliance with the Addresses
1520
+ requirement that all Listeners are available on all assigned
1521
+ addresses.
1522
+
1523
+ Compatible combinations in Extended support are expected to vary across
1524
+ implementations. A combination that is compatible for one implementation
1525
+ may not be compatible for another.
1526
+
1527
+ For example, an implementation that cannot serve both TCP and UDP listeners
1528
+ on the same address, or cannot mix HTTPS and generic TLS listens on the same port
1529
+ would not consider those cases compatible, even though they are distinct.
1530
+
1531
+ Implementations MAY merge separate Gateways onto a single set of
1532
+ Addresses if all Listeners across all Gateways are compatible.
1533
+
1534
+ In a future release the MinItems=1 requirement MAY be dropped.
1535
+
1536
+ Support: Core
1537
+ items:
1538
+ description: |-
1539
+ Listener embodies the concept of a logical endpoint where a Gateway accepts
1540
+ network connections.
1541
+ properties:
1542
+ allowedRoutes:
1543
+ default:
1544
+ namespaces:
1545
+ from: Same
1546
+ description: |-
1547
+ AllowedRoutes defines the types of routes that MAY be attached to a
1548
+ Listener and the trusted namespaces where those Route resources MAY be
1549
+ present.
1550
+
1551
+ Although a client request may match multiple route rules, only one rule
1552
+ may ultimately receive the request. Matching precedence MUST be
1553
+ determined in order of the following criteria:
1554
+
1555
+ * The most specific match as defined by the Route type.
1556
+ * The oldest Route based on creation timestamp. For example, a Route with
1557
+ a creation timestamp of "2020-09-08 01:02:03" is given precedence over
1558
+ a Route with a creation timestamp of "2020-09-08 01:02:04".
1559
+ * If everything else is equivalent, the Route appearing first in
1560
+ alphabetical order (namespace/name) should be given precedence. For
1561
+ example, foo/bar is given precedence over foo/baz.
1562
+
1563
+ All valid rules within a Route attached to this Listener should be
1564
+ implemented. Invalid Route rules can be ignored (sometimes that will mean
1565
+ the full Route). If a Route rule transitions from valid to invalid,
1566
+ support for that Route rule should be dropped to ensure consistency. For
1567
+ example, even if a filter specified by a Route rule is invalid, the rest
1568
+ of the rules within that Route should still be supported.
1569
+
1570
+ Support: Core
1571
+ properties:
1572
+ kinds:
1573
+ description: |-
1574
+ Kinds specifies the groups and kinds of Routes that are allowed to bind
1575
+ to this Gateway Listener. When unspecified or empty, the kinds of Routes
1576
+ selected are determined using the Listener protocol.
1577
+
1578
+ A RouteGroupKind MUST correspond to kinds of Routes that are compatible
1579
+ with the application protocol specified in the Listener's Protocol field.
1580
+ If an implementation does not support or recognize this resource type, it
1581
+ MUST set the "ResolvedRefs" condition to False for this Listener with the
1582
+ "InvalidRouteKinds" reason.
1583
+
1584
+ Support: Core
1585
+ items:
1586
+ description: RouteGroupKind indicates the group and kind
1587
+ of a Route resource.
1588
+ properties:
1589
+ group:
1590
+ default: gateway.networking.k8s.io
1591
+ description: Group is the group of the Route.
1592
+ maxLength: 253
1593
+ pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
1594
+ type: string
1595
+ kind:
1596
+ description: Kind is the kind of the Route.
1597
+ maxLength: 63
1598
+ minLength: 1
1599
+ pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
1600
+ type: string
1601
+ required:
1602
+ - kind
1603
+ type: object
1604
+ maxItems: 8
1605
+ type: array
1606
+ x-kubernetes-list-type: atomic
1607
+ namespaces:
1608
+ default:
1609
+ from: Same
1610
+ description: |-
1611
+ Namespaces indicates namespaces from which Routes may be attached to this
1612
+ Listener. This is restricted to the namespace of this Gateway by default.
1613
+
1614
+ Support: Core
1615
+ properties:
1616
+ from:
1617
+ default: Same
1618
+ description: |-
1619
+ From indicates where Routes will be selected for this Gateway. Possible
1620
+ values are:
1621
+
1622
+ * All: Routes in all namespaces may be used by this Gateway.
1623
+ * Selector: Routes in namespaces selected by the selector may be used by
1624
+ this Gateway.
1625
+ * Same: Only Routes in the same namespace may be used by this Gateway.
1626
+
1627
+ Support: Core
1628
+ enum:
1629
+ - All
1630
+ - Selector
1631
+ - Same
1632
+ type: string
1633
+ selector:
1634
+ description: |-
1635
+ Selector must be specified when From is set to "Selector". In that case,
1636
+ only Routes in Namespaces matching this Selector will be selected by this
1637
+ Gateway. This field is ignored for other values of "From".
1638
+
1639
+ Support: Core
1640
+ properties:
1641
+ matchExpressions:
1642
+ description: matchExpressions is a list of label
1643
+ selector requirements. The requirements are ANDed.
1644
+ items:
1645
+ description: |-
1646
+ A label selector requirement is a selector that contains values, a key, and an operator that
1647
+ relates the key and values.
1648
+ properties:
1649
+ key:
1650
+ description: key is the label key that the
1651
+ selector applies to.
1652
+ type: string
1653
+ operator:
1654
+ description: |-
1655
+ operator represents a key's relationship to a set of values.
1656
+ Valid operators are In, NotIn, Exists and DoesNotExist.
1657
+ type: string
1658
+ values:
1659
+ description: |-
1660
+ values is an array of string values. If the operator is In or NotIn,
1661
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
1662
+ the values array must be empty. This array is replaced during a strategic
1663
+ merge patch.
1664
+ items:
1665
+ type: string
1666
+ type: array
1667
+ x-kubernetes-list-type: atomic
1668
+ required:
1669
+ - key
1670
+ - operator
1671
+ type: object
1672
+ type: array
1673
+ x-kubernetes-list-type: atomic
1674
+ matchLabels:
1675
+ additionalProperties:
1676
+ type: string
1677
+ description: |-
1678
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
1679
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
1680
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
1681
+ type: object
1682
+ type: object
1683
+ x-kubernetes-map-type: atomic
1684
+ type: object
1685
+ type: object
1686
+ hostname:
1687
+ description: |-
1688
+ Hostname specifies the virtual hostname to match for protocol types that
1689
+ define this concept. When unspecified, all hostnames are matched. This
1690
+ field is ignored for protocols that don't require hostname based
1691
+ matching.
1692
+
1693
+ Implementations MUST apply Hostname matching appropriately for each of
1694
+ the following protocols:
1695
+
1696
+ * TLS: The Listener Hostname MUST match the SNI.
1697
+ * HTTP: The Listener Hostname MUST match the Host header of the request.
1698
+ * HTTPS: The Listener Hostname SHOULD match both the SNI and Host header.
1699
+ Note that this does not require the SNI and Host header to be the same.
1700
+ The semantics of this are described in more detail below.
1701
+
1702
+ To ensure security, Section 11.1 of RFC-6066 emphasizes that server
1703
+ implementations that rely on SNI hostname matching MUST also verify
1704
+ hostnames within the application protocol.
1705
+
1706
+ Section 9.1.2 of RFC-7540 provides a mechanism for servers to reject the
1707
+ reuse of a connection by responding with the HTTP 421 Misdirected Request
1708
+ status code. This indicates that the origin server has rejected the
1709
+ request because it appears to have been misdirected.
1710
+
1711
+ To detect misdirected requests, Gateways SHOULD match the authority of
1712
+ the requests with all the SNI hostname(s) configured across all the
1713
+ Gateway Listeners on the same port and protocol:
1714
+
1715
+ * If another Listener has an exact match or more specific wildcard entry,
1716
+ the Gateway SHOULD return a 421.
1717
+ * If the current Listener (selected by SNI matching during ClientHello)
1718
+ does not match the Host:
1719
+ * If another Listener does match the Host the Gateway SHOULD return a
1720
+ 421.
1721
+ * If no other Listener matches the Host, the Gateway MUST return a
1722
+ 404.
1723
+
1724
+ For HTTPRoute and TLSRoute resources, there is an interaction with the
1725
+ `spec.hostnames` array. When both listener and route specify hostnames,
1726
+ there MUST be an intersection between the values for a Route to be
1727
+ accepted. For more information, refer to the Route specific Hostnames
1728
+ documentation.
1729
+
1730
+ Hostnames that are prefixed with a wildcard label (`*.`) are interpreted
1731
+ as a suffix match. That means that a match for `*.example.com` would match
1732
+ both `test.example.com`, and `foo.test.example.com`, but not `example.com`.
1733
+
1734
+ Support: Core
1735
+ maxLength: 253
1736
+ minLength: 1
1737
+ pattern: ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
1738
+ type: string
1739
+ name:
1740
+ description: |-
1741
+ Name is the name of the Listener. This name MUST be unique within a
1742
+ Gateway.
1743
+
1744
+ Support: Core
1745
+ maxLength: 253
1746
+ minLength: 1
1747
+ pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
1748
+ type: string
1749
+ port:
1750
+ description: |-
1751
+ Port is the network port. Multiple listeners may use the
1752
+ same port, subject to the Listener compatibility rules.
1753
+
1754
+ Support: Core
1755
+ format: int32
1756
+ maximum: 65535
1757
+ minimum: 1
1758
+ type: integer
1759
+ protocol:
1760
+ description: |-
1761
+ Protocol specifies the network protocol this listener expects to receive.
1762
+
1763
+ Support: Core
1764
+ maxLength: 255
1765
+ minLength: 1
1766
+ pattern: ^[a-zA-Z0-9]([-a-zA-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]+$
1767
+ type: string
1768
+ tls:
1769
+ description: |-
1770
+ TLS is the TLS configuration for the Listener. This field is required if
1771
+ the Protocol field is "HTTPS" or "TLS". It is invalid to set this field
1772
+ if the Protocol field is "HTTP", "TCP", or "UDP".
1773
+
1774
+ The association of SNIs to Certificate defined in ListenerTLSConfig is
1775
+ defined based on the Hostname field for this listener.
1776
+
1777
+ The GatewayClass MUST use the longest matching SNI out of all
1778
+ available certificates for any TLS handshake.
1779
+
1780
+ Support: Core
1781
+ properties:
1782
+ certificateRefs:
1783
+ description: |-
1784
+ CertificateRefs contains a series of references to Kubernetes objects that
1785
+ contains TLS certificates and private keys. These certificates are used to
1786
+ establish a TLS handshake for requests that match the hostname of the
1787
+ associated listener.
1788
+
1789
+ A single CertificateRef to a Kubernetes Secret has "Core" support.
1790
+ Implementations MAY choose to support attaching multiple certificates to
1791
+ a Listener, but this behavior is implementation-specific.
1792
+
1793
+ References to a resource in different namespace are invalid UNLESS there
1794
+ is a ReferenceGrant in the target namespace that allows the certificate
1795
+ to be attached. If a ReferenceGrant does not allow this reference, the
1796
+ "ResolvedRefs" condition MUST be set to False for this listener with the
1797
+ "RefNotPermitted" reason.
1798
+
1799
+ This field is required to have at least one element when the mode is set
1800
+ to "Terminate" (default) and is optional otherwise.
1801
+
1802
+ CertificateRefs can reference to standard Kubernetes resources, i.e.
1803
+ Secret, or implementation-specific custom resources.
1804
+
1805
+ Support: Core - A single reference to a Kubernetes Secret of type kubernetes.io/tls
1806
+
1807
+ Support: Implementation-specific (More than one reference or other resource types)
1808
+ items:
1809
+ description: |-
1810
+ SecretObjectReference identifies an API object including its namespace,
1811
+ defaulting to Secret.
1812
+
1813
+ The API object must be valid in the cluster; the Group and Kind must
1814
+ be registered in the cluster for this reference to be valid.
1815
+
1816
+ References to objects with invalid Group and Kind are not valid, and must
1817
+ be rejected by the implementation, with appropriate Conditions set
1818
+ on the containing object.
1819
+ properties:
1820
+ group:
1821
+ default: ""
1822
+ description: |-
1823
+ Group is the group of the referent. For example, "gateway.networking.k8s.io".
1824
+ When unspecified or empty string, core API group is inferred.
1825
+ maxLength: 253
1826
+ pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
1827
+ type: string
1828
+ kind:
1829
+ default: Secret
1830
+ description: Kind is kind of the referent. For example
1831
+ "Secret".
1832
+ maxLength: 63
1833
+ minLength: 1
1834
+ pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
1835
+ type: string
1836
+ name:
1837
+ description: Name is the name of the referent.
1838
+ maxLength: 253
1839
+ minLength: 1
1840
+ type: string
1841
+ namespace:
1842
+ description: |-
1843
+ Namespace is the namespace of the referenced object. When unspecified, the local
1844
+ namespace is inferred.
1845
+
1846
+ Note that when a namespace different than the local namespace is specified,
1847
+ a ReferenceGrant object is required in the referent namespace to allow that
1848
+ namespace's owner to accept the reference. See the ReferenceGrant
1849
+ documentation for details.
1850
+
1851
+ Support: Core
1852
+ maxLength: 63
1853
+ minLength: 1
1854
+ pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
1855
+ type: string
1856
+ required:
1857
+ - name
1858
+ type: object
1859
+ maxItems: 64
1860
+ type: array
1861
+ x-kubernetes-list-type: atomic
1862
+ mode:
1863
+ default: Terminate
1864
+ description: |-
1865
+ Mode defines the TLS behavior for the TLS session initiated by the client.
1866
+ There are two possible modes:
1867
+
1868
+ - Terminate: The TLS session between the downstream client and the
1869
+ Gateway is terminated at the Gateway. This mode requires certificates
1870
+ to be specified in some way, such as populating the certificateRefs
1871
+ field.
1872
+ - Passthrough: The TLS session is NOT terminated by the Gateway. This
1873
+ implies that the Gateway can't decipher the TLS stream except for
1874
+ the ClientHello message of the TLS protocol. The certificateRefs field
1875
+ is ignored in this mode.
1876
+
1877
+ Support: Core
1878
+ enum:
1879
+ - Terminate
1880
+ - Passthrough
1881
+ type: string
1882
+ options:
1883
+ additionalProperties:
1884
+ description: |-
1885
+ AnnotationValue is the value of an annotation in Gateway API. This is used
1886
+ for validation of maps such as TLS options. This roughly matches Kubernetes
1887
+ annotation validation, although the length validation in that case is based
1888
+ on the entire size of the annotations struct.
1889
+ maxLength: 4096
1890
+ minLength: 0
1891
+ type: string
1892
+ description: |-
1893
+ Options are a list of key/value pairs to enable extended TLS
1894
+ configuration for each implementation. For example, configuring the
1895
+ minimum TLS version or supported cipher suites.
1896
+
1897
+ A set of common keys MAY be defined by the API in the future. To avoid
1898
+ any ambiguity, implementation-specific definitions MUST use
1899
+ domain-prefixed names, such as `example.com/my-custom-option`.
1900
+ Un-prefixed names are reserved for key names defined by Gateway API.
1901
+
1902
+ Support: Implementation-specific
1903
+ maxProperties: 16
1904
+ type: object
1905
+ type: object
1906
+ x-kubernetes-validations:
1907
+ - message: certificateRefs or options must be specified when
1908
+ mode is Terminate
1909
+ rule: 'self.mode == ''Terminate'' ? size(self.certificateRefs)
1910
+ > 0 || size(self.options) > 0 : true'
1911
+ required:
1912
+ - name
1913
+ - port
1914
+ - protocol
1915
+ type: object
1916
+ maxItems: 64
1917
+ minItems: 1
1918
+ type: array
1919
+ x-kubernetes-list-map-keys:
1920
+ - name
1921
+ x-kubernetes-list-type: map
1922
+ x-kubernetes-validations:
1923
+ - message: tls must not be specified for protocols ['HTTP', 'TCP',
1924
+ 'UDP']
1925
+ rule: 'self.all(l, l.protocol in [''HTTP'', ''TCP'', ''UDP''] ?
1926
+ !has(l.tls) : true)'
1927
+ - message: tls mode must be Terminate for protocol HTTPS
1928
+ rule: 'self.all(l, (l.protocol == ''HTTPS'' && has(l.tls)) ? (l.tls.mode
1929
+ == '''' || l.tls.mode == ''Terminate'') : true)'
1930
+ - message: hostname must not be specified for protocols ['TCP', 'UDP']
1931
+ rule: 'self.all(l, l.protocol in [''TCP'', ''UDP''] ? (!has(l.hostname)
1932
+ || l.hostname == '''') : true)'
1933
+ - message: Listener name must be unique within the Gateway
1934
+ rule: self.all(l1, self.exists_one(l2, l1.name == l2.name))
1935
+ - message: Combination of port, protocol and hostname must be unique
1936
+ for each listener
1937
+ rule: 'self.all(l1, self.exists_one(l2, l1.port == l2.port && l1.protocol
1938
+ == l2.protocol && (has(l1.hostname) && has(l2.hostname) ? l1.hostname
1939
+ == l2.hostname : !has(l1.hostname) && !has(l2.hostname))))'
1940
+ required:
1941
+ - gatewayClassName
1942
+ - listeners
1943
+ type: object
1944
+ status:
1945
+ default:
1946
+ conditions:
1947
+ - lastTransitionTime: "1970-01-01T00:00:00Z"
1948
+ message: Waiting for controller
1949
+ reason: Pending
1950
+ status: Unknown
1951
+ type: Accepted
1952
+ - lastTransitionTime: "1970-01-01T00:00:00Z"
1953
+ message: Waiting for controller
1954
+ reason: Pending
1955
+ status: Unknown
1956
+ type: Programmed
1957
+ description: Status defines the current state of Gateway.
1958
+ properties:
1959
+ addresses:
1960
+ description: |-
1961
+ Addresses lists the network addresses that have been bound to the
1962
+ Gateway.
1963
+
1964
+ This list may differ from the addresses provided in the spec under some
1965
+ conditions:
1966
+
1967
+ * no addresses are specified, all addresses are dynamically assigned
1968
+ * a combination of specified and dynamic addresses are assigned
1969
+ * a specified address was unusable (e.g. already in use)
1970
+ items:
1971
+ description: GatewayStatusAddress describes a network address that
1972
+ is bound to a Gateway.
1973
+ oneOf:
1974
+ - properties:
1975
+ type:
1976
+ enum:
1977
+ - IPAddress
1978
+ value:
1979
+ anyOf:
1980
+ - format: ipv4
1981
+ - format: ipv6
1982
+ - properties:
1983
+ type:
1984
+ not:
1985
+ enum:
1986
+ - IPAddress
1987
+ properties:
1988
+ type:
1989
+ default: IPAddress
1990
+ description: Type of the address.
1991
+ maxLength: 253
1992
+ minLength: 1
1993
+ pattern: ^Hostname|IPAddress|NamedAddress|[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$
1994
+ type: string
1995
+ value:
1996
+ description: |-
1997
+ Value of the address. The validity of the values will depend
1998
+ on the type and support by the controller.
1999
+
2000
+ Examples: `1.2.3.4`, `128::1`, `my-ip-address`.
2001
+ maxLength: 253
2002
+ minLength: 1
2003
+ type: string
2004
+ required:
2005
+ - value
2006
+ type: object
2007
+ x-kubernetes-validations:
2008
+ - message: Hostname value must only contain valid characters (matching
2009
+ ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$)
2010
+ rule: 'self.type == ''Hostname'' ? self.value.matches(r"""^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$"""):
2011
+ true'
2012
+ maxItems: 16
2013
+ type: array
2014
+ x-kubernetes-list-type: atomic
2015
+ conditions:
2016
+ default:
2017
+ - lastTransitionTime: "1970-01-01T00:00:00Z"
2018
+ message: Waiting for controller
2019
+ reason: Pending
2020
+ status: Unknown
2021
+ type: Accepted
2022
+ - lastTransitionTime: "1970-01-01T00:00:00Z"
2023
+ message: Waiting for controller
2024
+ reason: Pending
2025
+ status: Unknown
2026
+ type: Programmed
2027
+ description: |-
2028
+ Conditions describe the current conditions of the Gateway.
2029
+
2030
+ Implementations should prefer to express Gateway conditions
2031
+ using the `GatewayConditionType` and `GatewayConditionReason`
2032
+ constants so that operators and tools can converge on a common
2033
+ vocabulary to describe Gateway state.
2034
+
2035
+ Known condition types are:
2036
+
2037
+ * "Accepted"
2038
+ * "Programmed"
2039
+ * "Ready"
2040
+ items:
2041
+ description: Condition contains details for one aspect of the current
2042
+ state of this API Resource.
2043
+ properties:
2044
+ lastTransitionTime:
2045
+ description: |-
2046
+ lastTransitionTime is the last time the condition transitioned from one status to another.
2047
+ This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
2048
+ format: date-time
2049
+ type: string
2050
+ message:
2051
+ description: |-
2052
+ message is a human readable message indicating details about the transition.
2053
+ This may be an empty string.
2054
+ maxLength: 32768
2055
+ type: string
2056
+ observedGeneration:
2057
+ description: |-
2058
+ observedGeneration represents the .metadata.generation that the condition was set based upon.
2059
+ For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
2060
+ with respect to the current state of the instance.
2061
+ format: int64
2062
+ minimum: 0
2063
+ type: integer
2064
+ reason:
2065
+ description: |-
2066
+ reason contains a programmatic identifier indicating the reason for the condition's last transition.
2067
+ Producers of specific condition types may define expected values and meanings for this field,
2068
+ and whether the values are considered a guaranteed API.
2069
+ The value should be a CamelCase string.
2070
+ This field may not be empty.
2071
+ maxLength: 1024
2072
+ minLength: 1
2073
+ pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
2074
+ type: string
2075
+ status:
2076
+ description: status of the condition, one of True, False, Unknown.
2077
+ enum:
2078
+ - "True"
2079
+ - "False"
2080
+ - Unknown
2081
+ type: string
2082
+ type:
2083
+ description: type of condition in CamelCase or in foo.example.com/CamelCase.
2084
+ maxLength: 316
2085
+ 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])$
2086
+ type: string
2087
+ required:
2088
+ - lastTransitionTime
2089
+ - message
2090
+ - reason
2091
+ - status
2092
+ - type
2093
+ type: object
2094
+ maxItems: 8
2095
+ type: array
2096
+ x-kubernetes-list-map-keys:
2097
+ - type
2098
+ x-kubernetes-list-type: map
2099
+ listeners:
2100
+ description: Listeners provide status for each unique listener port
2101
+ defined in the Spec.
2102
+ items:
2103
+ description: ListenerStatus is the status associated with a Listener.
2104
+ properties:
2105
+ attachedRoutes:
2106
+ description: |-
2107
+ AttachedRoutes represents the total number of Routes that have been
2108
+ successfully attached to this Listener.
2109
+
2110
+ Successful attachment of a Route to a Listener is based solely on the
2111
+ combination of the AllowedRoutes field on the corresponding Listener
2112
+ and the Route's ParentRefs field. A Route is successfully attached to
2113
+ a Listener when it is selected by the Listener's AllowedRoutes field
2114
+ AND the Route has a valid ParentRef selecting the whole Gateway
2115
+ resource or a specific Listener as a parent resource (more detail on
2116
+ attachment semantics can be found in the documentation on the various
2117
+ Route kinds ParentRefs fields). Listener or Route status does not impact
2118
+ successful attachment, i.e. the AttachedRoutes field count MUST be set
2119
+ for Listeners with condition Accepted: false and MUST count successfully
2120
+ attached Routes that may themselves have Accepted: false conditions.
2121
+
2122
+ Uses for this field include troubleshooting Route attachment and
2123
+ measuring blast radius/impact of changes to a Listener.
2124
+ format: int32
2125
+ type: integer
2126
+ conditions:
2127
+ description: Conditions describe the current condition of this
2128
+ listener.
2129
+ items:
2130
+ description: Condition contains details for one aspect of
2131
+ the current state of this API Resource.
2132
+ properties:
2133
+ lastTransitionTime:
2134
+ description: |-
2135
+ lastTransitionTime is the last time the condition transitioned from one status to another.
2136
+ This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
2137
+ format: date-time
2138
+ type: string
2139
+ message:
2140
+ description: |-
2141
+ message is a human readable message indicating details about the transition.
2142
+ This may be an empty string.
2143
+ maxLength: 32768
2144
+ type: string
2145
+ observedGeneration:
2146
+ description: |-
2147
+ observedGeneration represents the .metadata.generation that the condition was set based upon.
2148
+ For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
2149
+ with respect to the current state of the instance.
2150
+ format: int64
2151
+ minimum: 0
2152
+ type: integer
2153
+ reason:
2154
+ description: |-
2155
+ reason contains a programmatic identifier indicating the reason for the condition's last transition.
2156
+ Producers of specific condition types may define expected values and meanings for this field,
2157
+ and whether the values are considered a guaranteed API.
2158
+ The value should be a CamelCase string.
2159
+ This field may not be empty.
2160
+ maxLength: 1024
2161
+ minLength: 1
2162
+ pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
2163
+ type: string
2164
+ status:
2165
+ description: status of the condition, one of True, False,
2166
+ Unknown.
2167
+ enum:
2168
+ - "True"
2169
+ - "False"
2170
+ - Unknown
2171
+ type: string
2172
+ type:
2173
+ description: type of condition in CamelCase or in foo.example.com/CamelCase.
2174
+ maxLength: 316
2175
+ 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])$
2176
+ type: string
2177
+ required:
2178
+ - lastTransitionTime
2179
+ - message
2180
+ - reason
2181
+ - status
2182
+ - type
2183
+ type: object
2184
+ maxItems: 8
2185
+ type: array
2186
+ x-kubernetes-list-map-keys:
2187
+ - type
2188
+ x-kubernetes-list-type: map
2189
+ name:
2190
+ description: Name is the name of the Listener that this status
2191
+ corresponds to.
2192
+ maxLength: 253
2193
+ minLength: 1
2194
+ pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
2195
+ type: string
2196
+ supportedKinds:
2197
+ description: |-
2198
+ SupportedKinds is the list indicating the Kinds supported by this
2199
+ listener. This MUST represent the kinds an implementation supports for
2200
+ that Listener configuration.
2201
+
2202
+ If kinds are specified in Spec that are not supported, they MUST NOT
2203
+ appear in this list and an implementation MUST set the "ResolvedRefs"
2204
+ condition to "False" with the "InvalidRouteKinds" reason. If both valid
2205
+ and invalid Route kinds are specified, the implementation MUST
2206
+ reference the valid Route kinds that have been specified.
2207
+ items:
2208
+ description: RouteGroupKind indicates the group and kind of
2209
+ a Route resource.
2210
+ properties:
2211
+ group:
2212
+ default: gateway.networking.k8s.io
2213
+ description: Group is the group of the Route.
2214
+ maxLength: 253
2215
+ pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
2216
+ type: string
2217
+ kind:
2218
+ description: Kind is the kind of the Route.
2219
+ maxLength: 63
2220
+ minLength: 1
2221
+ pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
2222
+ type: string
2223
+ required:
2224
+ - kind
2225
+ type: object
2226
+ maxItems: 8
2227
+ type: array
2228
+ x-kubernetes-list-type: atomic
2229
+ required:
2230
+ - attachedRoutes
2231
+ - conditions
2232
+ - name
2233
+ - supportedKinds
2234
+ type: object
2235
+ maxItems: 64
2236
+ type: array
2237
+ x-kubernetes-list-map-keys:
2238
+ - name
2239
+ x-kubernetes-list-type: map
2240
+ type: object
2241
+ required:
2242
+ - spec
2243
+ type: object
2244
+ served: true
2245
+ storage: false
2246
+ subresources:
2247
+ status: {}
2248
+ status:
2249
+ acceptedNames:
2250
+ kind: ""
2251
+ plural: ""
2252
+ conditions: null
2253
+ storedVersions: null