956 lines
42 KiB
YAML
956 lines
42 KiB
YAML
---
|
|
apiVersion: apiextensions.k8s.io/v1
|
|
kind: CustomResourceDefinition
|
|
metadata:
|
|
annotations:
|
|
api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
|
|
gateway.networking.k8s.io/bundle-version: v1.2.1
|
|
gateway.networking.k8s.io/channel: standard
|
|
creationTimestamp: null
|
|
name: gateways.gateway.networking.k8s.io
|
|
spec:
|
|
group: gateway.networking.k8s.io
|
|
names:
|
|
categories:
|
|
- gateway-api
|
|
kind: Gateway
|
|
listKind: GatewayList
|
|
plural: gateways
|
|
shortNames:
|
|
- gtw
|
|
singular: gateway
|
|
scope: Namespaced
|
|
versions:
|
|
- additionalPrinterColumns:
|
|
- jsonPath: .spec.gatewayClassName
|
|
name: Class
|
|
type: string
|
|
- jsonPath: .status.addresses[*].value
|
|
name: Address
|
|
type: string
|
|
- jsonPath: .status.conditions[?(@.type=="Programmed")].status
|
|
name: Programmed
|
|
type: string
|
|
- jsonPath: .metadata.creationTimestamp
|
|
name: Age
|
|
type: date
|
|
name: v1
|
|
schema:
|
|
openAPIV3Schema:
|
|
properties:
|
|
apiVersion:
|
|
type: string
|
|
kind:
|
|
type: string
|
|
metadata:
|
|
type: object
|
|
spec:
|
|
properties:
|
|
addresses:
|
|
items:
|
|
oneOf:
|
|
- properties:
|
|
type:
|
|
enum:
|
|
- IPAddress
|
|
value:
|
|
anyOf:
|
|
- format: ipv4
|
|
- format: ipv6
|
|
- properties:
|
|
type:
|
|
not:
|
|
enum:
|
|
- IPAddress
|
|
properties:
|
|
type:
|
|
default: IPAddress
|
|
maxLength: 253
|
|
minLength: 1
|
|
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\/\-._~%!$&'()*+,;=:]+$
|
|
type: string
|
|
value:
|
|
maxLength: 253
|
|
minLength: 1
|
|
type: string
|
|
required:
|
|
- value
|
|
type: object
|
|
x-kubernetes-validations:
|
|
- message: Hostname value must only contain valid characters (matching ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$)
|
|
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])?)*$"""): true'
|
|
maxItems: 16
|
|
type: array
|
|
x-kubernetes-validations:
|
|
- message: IPAddress values must be unique
|
|
rule: 'self.all(a1, a1.type == ''IPAddress'' ? self.exists_one(a2, a2.type == a1.type && a2.value == a1.value) : true )'
|
|
- message: Hostname values must be unique
|
|
rule: 'self.all(a1, a1.type == ''Hostname'' ? self.exists_one(a2, a2.type == a1.type && a2.value == a1.value) : true )'
|
|
gatewayClassName:
|
|
maxLength: 253
|
|
minLength: 1
|
|
type: string
|
|
infrastructure:
|
|
properties:
|
|
annotations:
|
|
additionalProperties:
|
|
maxLength: 4096
|
|
minLength: 0
|
|
type: string
|
|
maxProperties: 8
|
|
type: object
|
|
x-kubernetes-validations:
|
|
- message: Annotation keys must be in the form of an optional DNS subdomain prefix followed by a required name segment of up to 63 characters.
|
|
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]$"""))
|
|
- message: If specified, the annotation key's prefix must be a DNS subdomain not longer than 253 characters in total.
|
|
rule: self.all(key, key.split("/")[0].size() < 253)
|
|
labels:
|
|
additionalProperties:
|
|
maxLength: 63
|
|
minLength: 0
|
|
pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
|
|
type: string
|
|
maxProperties: 8
|
|
type: object
|
|
x-kubernetes-validations:
|
|
- message: Label keys must be in the form of an optional DNS subdomain prefix followed by a required name segment of up to 63 characters.
|
|
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]$"""))
|
|
- message: If specified, the label key's prefix must be a DNS subdomain not longer than 253 characters in total.
|
|
rule: self.all(key, key.split("/")[0].size() < 253)
|
|
parametersRef:
|
|
properties:
|
|
group:
|
|
maxLength: 253
|
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
|
type: string
|
|
kind:
|
|
maxLength: 63
|
|
minLength: 1
|
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
|
type: string
|
|
name:
|
|
maxLength: 253
|
|
minLength: 1
|
|
type: string
|
|
required:
|
|
- group
|
|
- kind
|
|
- name
|
|
type: object
|
|
type: object
|
|
listeners:
|
|
items:
|
|
properties:
|
|
allowedRoutes:
|
|
default:
|
|
namespaces:
|
|
from: Same
|
|
properties:
|
|
kinds:
|
|
items:
|
|
properties:
|
|
group:
|
|
default: gateway.networking.k8s.io
|
|
maxLength: 253
|
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
|
type: string
|
|
kind:
|
|
maxLength: 63
|
|
minLength: 1
|
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
|
type: string
|
|
required:
|
|
- kind
|
|
type: object
|
|
maxItems: 8
|
|
type: array
|
|
namespaces:
|
|
default:
|
|
from: Same
|
|
properties:
|
|
from:
|
|
default: Same
|
|
enum:
|
|
- All
|
|
- Selector
|
|
- Same
|
|
type: string
|
|
selector:
|
|
properties:
|
|
matchExpressions:
|
|
items:
|
|
properties:
|
|
key:
|
|
type: string
|
|
operator:
|
|
type: string
|
|
values:
|
|
items:
|
|
type: string
|
|
type: array
|
|
x-kubernetes-list-type: atomic
|
|
required:
|
|
- key
|
|
- operator
|
|
type: object
|
|
type: array
|
|
x-kubernetes-list-type: atomic
|
|
matchLabels:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
type: object
|
|
x-kubernetes-map-type: atomic
|
|
type: object
|
|
type: object
|
|
hostname:
|
|
maxLength: 253
|
|
minLength: 1
|
|
pattern: ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
|
type: string
|
|
name:
|
|
maxLength: 253
|
|
minLength: 1
|
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
|
type: string
|
|
port:
|
|
format: int32
|
|
maximum: 65535
|
|
minimum: 1
|
|
type: integer
|
|
protocol:
|
|
maxLength: 255
|
|
minLength: 1
|
|
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]+$
|
|
type: string
|
|
tls:
|
|
properties:
|
|
certificateRefs:
|
|
items:
|
|
properties:
|
|
group:
|
|
default: ""
|
|
maxLength: 253
|
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
|
type: string
|
|
kind:
|
|
default: Secret
|
|
maxLength: 63
|
|
minLength: 1
|
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
|
type: string
|
|
name:
|
|
maxLength: 253
|
|
minLength: 1
|
|
type: string
|
|
namespace:
|
|
maxLength: 63
|
|
minLength: 1
|
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
|
|
type: string
|
|
required:
|
|
- name
|
|
type: object
|
|
maxItems: 64
|
|
type: array
|
|
mode:
|
|
default: Terminate
|
|
enum:
|
|
- Terminate
|
|
- Passthrough
|
|
type: string
|
|
options:
|
|
additionalProperties:
|
|
maxLength: 4096
|
|
minLength: 0
|
|
type: string
|
|
maxProperties: 16
|
|
type: object
|
|
type: object
|
|
x-kubernetes-validations:
|
|
- message: certificateRefs or options must be specified when mode is Terminate
|
|
rule: 'self.mode == ''Terminate'' ? size(self.certificateRefs) > 0 || size(self.options) > 0 : true'
|
|
required:
|
|
- name
|
|
- port
|
|
- protocol
|
|
type: object
|
|
maxItems: 64
|
|
minItems: 1
|
|
type: array
|
|
x-kubernetes-list-map-keys:
|
|
- name
|
|
x-kubernetes-list-type: map
|
|
x-kubernetes-validations:
|
|
- message: tls must not be specified for protocols ['HTTP', 'TCP', 'UDP']
|
|
rule: 'self.all(l, l.protocol in [''HTTP'', ''TCP'', ''UDP''] ? !has(l.tls) : true)'
|
|
- message: tls mode must be Terminate for protocol HTTPS
|
|
rule: 'self.all(l, (l.protocol == ''HTTPS'' && has(l.tls)) ? (l.tls.mode == '''' || l.tls.mode == ''Terminate'') : true)'
|
|
- message: hostname must not be specified for protocols ['TCP', 'UDP']
|
|
rule: 'self.all(l, l.protocol in [''TCP'', ''UDP''] ? (!has(l.hostname) || l.hostname == '''') : true)'
|
|
- message: Listener name must be unique within the Gateway
|
|
rule: self.all(l1, self.exists_one(l2, l1.name == l2.name))
|
|
- message: Combination of port, protocol and hostname must be unique for each listener
|
|
rule: 'self.all(l1, self.exists_one(l2, l1.port == l2.port && l1.protocol == l2.protocol && (has(l1.hostname) && has(l2.hostname) ? l1.hostname == l2.hostname : !has(l1.hostname) && !has(l2.hostname))))'
|
|
required:
|
|
- gatewayClassName
|
|
- listeners
|
|
type: object
|
|
status:
|
|
default:
|
|
conditions:
|
|
- lastTransitionTime: "1970-01-01T00:00:00Z"
|
|
message: Waiting for controller
|
|
reason: Pending
|
|
status: Unknown
|
|
type: Accepted
|
|
- lastTransitionTime: "1970-01-01T00:00:00Z"
|
|
message: Waiting for controller
|
|
reason: Pending
|
|
status: Unknown
|
|
type: Programmed
|
|
properties:
|
|
addresses:
|
|
items:
|
|
oneOf:
|
|
- properties:
|
|
type:
|
|
enum:
|
|
- IPAddress
|
|
value:
|
|
anyOf:
|
|
- format: ipv4
|
|
- format: ipv6
|
|
- properties:
|
|
type:
|
|
not:
|
|
enum:
|
|
- IPAddress
|
|
properties:
|
|
type:
|
|
default: IPAddress
|
|
maxLength: 253
|
|
minLength: 1
|
|
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\/\-._~%!$&'()*+,;=:]+$
|
|
type: string
|
|
value:
|
|
maxLength: 253
|
|
minLength: 1
|
|
type: string
|
|
required:
|
|
- value
|
|
type: object
|
|
x-kubernetes-validations:
|
|
- message: Hostname value must only contain valid characters (matching ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$)
|
|
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])?)*$"""): true'
|
|
maxItems: 16
|
|
type: array
|
|
conditions:
|
|
default:
|
|
- lastTransitionTime: "1970-01-01T00:00:00Z"
|
|
message: Waiting for controller
|
|
reason: Pending
|
|
status: Unknown
|
|
type: Accepted
|
|
- lastTransitionTime: "1970-01-01T00:00:00Z"
|
|
message: Waiting for controller
|
|
reason: Pending
|
|
status: Unknown
|
|
type: Programmed
|
|
items:
|
|
properties:
|
|
lastTransitionTime:
|
|
format: date-time
|
|
type: string
|
|
message:
|
|
maxLength: 32768
|
|
type: string
|
|
observedGeneration:
|
|
format: int64
|
|
minimum: 0
|
|
type: integer
|
|
reason:
|
|
maxLength: 1024
|
|
minLength: 1
|
|
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
|
|
type: string
|
|
status:
|
|
enum:
|
|
- "True"
|
|
- "False"
|
|
- Unknown
|
|
type: string
|
|
type:
|
|
maxLength: 316
|
|
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
|
|
type: string
|
|
required:
|
|
- lastTransitionTime
|
|
- message
|
|
- reason
|
|
- status
|
|
- type
|
|
type: object
|
|
maxItems: 8
|
|
type: array
|
|
x-kubernetes-list-map-keys:
|
|
- type
|
|
x-kubernetes-list-type: map
|
|
listeners:
|
|
items:
|
|
properties:
|
|
attachedRoutes:
|
|
format: int32
|
|
type: integer
|
|
conditions:
|
|
items:
|
|
properties:
|
|
lastTransitionTime:
|
|
format: date-time
|
|
type: string
|
|
message:
|
|
maxLength: 32768
|
|
type: string
|
|
observedGeneration:
|
|
format: int64
|
|
minimum: 0
|
|
type: integer
|
|
reason:
|
|
maxLength: 1024
|
|
minLength: 1
|
|
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
|
|
type: string
|
|
status:
|
|
enum:
|
|
- "True"
|
|
- "False"
|
|
- Unknown
|
|
type: string
|
|
type:
|
|
maxLength: 316
|
|
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
|
|
type: string
|
|
required:
|
|
- lastTransitionTime
|
|
- message
|
|
- reason
|
|
- status
|
|
- type
|
|
type: object
|
|
maxItems: 8
|
|
type: array
|
|
x-kubernetes-list-map-keys:
|
|
- type
|
|
x-kubernetes-list-type: map
|
|
name:
|
|
maxLength: 253
|
|
minLength: 1
|
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
|
type: string
|
|
supportedKinds:
|
|
items:
|
|
properties:
|
|
group:
|
|
default: gateway.networking.k8s.io
|
|
maxLength: 253
|
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
|
type: string
|
|
kind:
|
|
maxLength: 63
|
|
minLength: 1
|
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
|
type: string
|
|
required:
|
|
- kind
|
|
type: object
|
|
maxItems: 8
|
|
type: array
|
|
required:
|
|
- attachedRoutes
|
|
- conditions
|
|
- name
|
|
- supportedKinds
|
|
type: object
|
|
maxItems: 64
|
|
type: array
|
|
x-kubernetes-list-map-keys:
|
|
- name
|
|
x-kubernetes-list-type: map
|
|
type: object
|
|
required:
|
|
- spec
|
|
type: object
|
|
served: true
|
|
storage: true
|
|
subresources:
|
|
status: {}
|
|
- additionalPrinterColumns:
|
|
- jsonPath: .spec.gatewayClassName
|
|
name: Class
|
|
type: string
|
|
- jsonPath: .status.addresses[*].value
|
|
name: Address
|
|
type: string
|
|
- jsonPath: .status.conditions[?(@.type=="Programmed")].status
|
|
name: Programmed
|
|
type: string
|
|
- jsonPath: .metadata.creationTimestamp
|
|
name: Age
|
|
type: date
|
|
name: v1beta1
|
|
schema:
|
|
openAPIV3Schema:
|
|
properties:
|
|
apiVersion:
|
|
type: string
|
|
kind:
|
|
type: string
|
|
metadata:
|
|
type: object
|
|
spec:
|
|
properties:
|
|
addresses:
|
|
items:
|
|
oneOf:
|
|
- properties:
|
|
type:
|
|
enum:
|
|
- IPAddress
|
|
value:
|
|
anyOf:
|
|
- format: ipv4
|
|
- format: ipv6
|
|
- properties:
|
|
type:
|
|
not:
|
|
enum:
|
|
- IPAddress
|
|
properties:
|
|
type:
|
|
default: IPAddress
|
|
maxLength: 253
|
|
minLength: 1
|
|
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\/\-._~%!$&'()*+,;=:]+$
|
|
type: string
|
|
value:
|
|
maxLength: 253
|
|
minLength: 1
|
|
type: string
|
|
required:
|
|
- value
|
|
type: object
|
|
x-kubernetes-validations:
|
|
- message: Hostname value must only contain valid characters (matching ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$)
|
|
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])?)*$"""): true'
|
|
maxItems: 16
|
|
type: array
|
|
x-kubernetes-validations:
|
|
- message: IPAddress values must be unique
|
|
rule: 'self.all(a1, a1.type == ''IPAddress'' ? self.exists_one(a2, a2.type == a1.type && a2.value == a1.value) : true )'
|
|
- message: Hostname values must be unique
|
|
rule: 'self.all(a1, a1.type == ''Hostname'' ? self.exists_one(a2, a2.type == a1.type && a2.value == a1.value) : true )'
|
|
gatewayClassName:
|
|
maxLength: 253
|
|
minLength: 1
|
|
type: string
|
|
infrastructure:
|
|
properties:
|
|
annotations:
|
|
additionalProperties:
|
|
maxLength: 4096
|
|
minLength: 0
|
|
type: string
|
|
maxProperties: 8
|
|
type: object
|
|
x-kubernetes-validations:
|
|
- message: Annotation keys must be in the form of an optional DNS subdomain prefix followed by a required name segment of up to 63 characters.
|
|
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]$"""))
|
|
- message: If specified, the annotation key's prefix must be a DNS subdomain not longer than 253 characters in total.
|
|
rule: self.all(key, key.split("/")[0].size() < 253)
|
|
labels:
|
|
additionalProperties:
|
|
maxLength: 63
|
|
minLength: 0
|
|
pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
|
|
type: string
|
|
maxProperties: 8
|
|
type: object
|
|
x-kubernetes-validations:
|
|
- message: Label keys must be in the form of an optional DNS subdomain prefix followed by a required name segment of up to 63 characters.
|
|
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]$"""))
|
|
- message: If specified, the label key's prefix must be a DNS subdomain not longer than 253 characters in total.
|
|
rule: self.all(key, key.split("/")[0].size() < 253)
|
|
parametersRef:
|
|
properties:
|
|
group:
|
|
maxLength: 253
|
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
|
type: string
|
|
kind:
|
|
maxLength: 63
|
|
minLength: 1
|
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
|
type: string
|
|
name:
|
|
maxLength: 253
|
|
minLength: 1
|
|
type: string
|
|
required:
|
|
- group
|
|
- kind
|
|
- name
|
|
type: object
|
|
type: object
|
|
listeners:
|
|
items:
|
|
properties:
|
|
allowedRoutes:
|
|
default:
|
|
namespaces:
|
|
from: Same
|
|
properties:
|
|
kinds:
|
|
items:
|
|
properties:
|
|
group:
|
|
default: gateway.networking.k8s.io
|
|
maxLength: 253
|
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
|
type: string
|
|
kind:
|
|
maxLength: 63
|
|
minLength: 1
|
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
|
type: string
|
|
required:
|
|
- kind
|
|
type: object
|
|
maxItems: 8
|
|
type: array
|
|
namespaces:
|
|
default:
|
|
from: Same
|
|
properties:
|
|
from:
|
|
default: Same
|
|
enum:
|
|
- All
|
|
- Selector
|
|
- Same
|
|
type: string
|
|
selector:
|
|
properties:
|
|
matchExpressions:
|
|
items:
|
|
properties:
|
|
key:
|
|
type: string
|
|
operator:
|
|
type: string
|
|
values:
|
|
items:
|
|
type: string
|
|
type: array
|
|
x-kubernetes-list-type: atomic
|
|
required:
|
|
- key
|
|
- operator
|
|
type: object
|
|
type: array
|
|
x-kubernetes-list-type: atomic
|
|
matchLabels:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
type: object
|
|
x-kubernetes-map-type: atomic
|
|
type: object
|
|
type: object
|
|
hostname:
|
|
maxLength: 253
|
|
minLength: 1
|
|
pattern: ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
|
type: string
|
|
name:
|
|
maxLength: 253
|
|
minLength: 1
|
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
|
type: string
|
|
port:
|
|
format: int32
|
|
maximum: 65535
|
|
minimum: 1
|
|
type: integer
|
|
protocol:
|
|
maxLength: 255
|
|
minLength: 1
|
|
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]+$
|
|
type: string
|
|
tls:
|
|
properties:
|
|
certificateRefs:
|
|
items:
|
|
properties:
|
|
group:
|
|
default: ""
|
|
maxLength: 253
|
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
|
type: string
|
|
kind:
|
|
default: Secret
|
|
maxLength: 63
|
|
minLength: 1
|
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
|
type: string
|
|
name:
|
|
maxLength: 253
|
|
minLength: 1
|
|
type: string
|
|
namespace:
|
|
maxLength: 63
|
|
minLength: 1
|
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
|
|
type: string
|
|
required:
|
|
- name
|
|
type: object
|
|
maxItems: 64
|
|
type: array
|
|
mode:
|
|
default: Terminate
|
|
enum:
|
|
- Terminate
|
|
- Passthrough
|
|
type: string
|
|
options:
|
|
additionalProperties:
|
|
maxLength: 4096
|
|
minLength: 0
|
|
type: string
|
|
maxProperties: 16
|
|
type: object
|
|
type: object
|
|
x-kubernetes-validations:
|
|
- message: certificateRefs or options must be specified when mode is Terminate
|
|
rule: 'self.mode == ''Terminate'' ? size(self.certificateRefs) > 0 || size(self.options) > 0 : true'
|
|
required:
|
|
- name
|
|
- port
|
|
- protocol
|
|
type: object
|
|
maxItems: 64
|
|
minItems: 1
|
|
type: array
|
|
x-kubernetes-list-map-keys:
|
|
- name
|
|
x-kubernetes-list-type: map
|
|
x-kubernetes-validations:
|
|
- message: tls must not be specified for protocols ['HTTP', 'TCP', 'UDP']
|
|
rule: 'self.all(l, l.protocol in [''HTTP'', ''TCP'', ''UDP''] ? !has(l.tls) : true)'
|
|
- message: tls mode must be Terminate for protocol HTTPS
|
|
rule: 'self.all(l, (l.protocol == ''HTTPS'' && has(l.tls)) ? (l.tls.mode == '''' || l.tls.mode == ''Terminate'') : true)'
|
|
- message: hostname must not be specified for protocols ['TCP', 'UDP']
|
|
rule: 'self.all(l, l.protocol in [''TCP'', ''UDP''] ? (!has(l.hostname) || l.hostname == '''') : true)'
|
|
- message: Listener name must be unique within the Gateway
|
|
rule: self.all(l1, self.exists_one(l2, l1.name == l2.name))
|
|
- message: Combination of port, protocol and hostname must be unique for each listener
|
|
rule: 'self.all(l1, self.exists_one(l2, l1.port == l2.port && l1.protocol == l2.protocol && (has(l1.hostname) && has(l2.hostname) ? l1.hostname == l2.hostname : !has(l1.hostname) && !has(l2.hostname))))'
|
|
required:
|
|
- gatewayClassName
|
|
- listeners
|
|
type: object
|
|
status:
|
|
default:
|
|
conditions:
|
|
- lastTransitionTime: "1970-01-01T00:00:00Z"
|
|
message: Waiting for controller
|
|
reason: Pending
|
|
status: Unknown
|
|
type: Accepted
|
|
- lastTransitionTime: "1970-01-01T00:00:00Z"
|
|
message: Waiting for controller
|
|
reason: Pending
|
|
status: Unknown
|
|
type: Programmed
|
|
properties:
|
|
addresses:
|
|
items:
|
|
oneOf:
|
|
- properties:
|
|
type:
|
|
enum:
|
|
- IPAddress
|
|
value:
|
|
anyOf:
|
|
- format: ipv4
|
|
- format: ipv6
|
|
- properties:
|
|
type:
|
|
not:
|
|
enum:
|
|
- IPAddress
|
|
properties:
|
|
type:
|
|
default: IPAddress
|
|
maxLength: 253
|
|
minLength: 1
|
|
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\/\-._~%!$&'()*+,;=:]+$
|
|
type: string
|
|
value:
|
|
maxLength: 253
|
|
minLength: 1
|
|
type: string
|
|
required:
|
|
- value
|
|
type: object
|
|
x-kubernetes-validations:
|
|
- message: Hostname value must only contain valid characters (matching ^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$)
|
|
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])?)*$"""): true'
|
|
maxItems: 16
|
|
type: array
|
|
conditions:
|
|
default:
|
|
- lastTransitionTime: "1970-01-01T00:00:00Z"
|
|
message: Waiting for controller
|
|
reason: Pending
|
|
status: Unknown
|
|
type: Accepted
|
|
- lastTransitionTime: "1970-01-01T00:00:00Z"
|
|
message: Waiting for controller
|
|
reason: Pending
|
|
status: Unknown
|
|
type: Programmed
|
|
items:
|
|
properties:
|
|
lastTransitionTime:
|
|
format: date-time
|
|
type: string
|
|
message:
|
|
maxLength: 32768
|
|
type: string
|
|
observedGeneration:
|
|
format: int64
|
|
minimum: 0
|
|
type: integer
|
|
reason:
|
|
maxLength: 1024
|
|
minLength: 1
|
|
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
|
|
type: string
|
|
status:
|
|
enum:
|
|
- "True"
|
|
- "False"
|
|
- Unknown
|
|
type: string
|
|
type:
|
|
maxLength: 316
|
|
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
|
|
type: string
|
|
required:
|
|
- lastTransitionTime
|
|
- message
|
|
- reason
|
|
- status
|
|
- type
|
|
type: object
|
|
maxItems: 8
|
|
type: array
|
|
x-kubernetes-list-map-keys:
|
|
- type
|
|
x-kubernetes-list-type: map
|
|
listeners:
|
|
items:
|
|
properties:
|
|
attachedRoutes:
|
|
format: int32
|
|
type: integer
|
|
conditions:
|
|
items:
|
|
properties:
|
|
lastTransitionTime:
|
|
format: date-time
|
|
type: string
|
|
message:
|
|
maxLength: 32768
|
|
type: string
|
|
observedGeneration:
|
|
format: int64
|
|
minimum: 0
|
|
type: integer
|
|
reason:
|
|
maxLength: 1024
|
|
minLength: 1
|
|
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
|
|
type: string
|
|
status:
|
|
enum:
|
|
- "True"
|
|
- "False"
|
|
- Unknown
|
|
type: string
|
|
type:
|
|
maxLength: 316
|
|
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
|
|
type: string
|
|
required:
|
|
- lastTransitionTime
|
|
- message
|
|
- reason
|
|
- status
|
|
- type
|
|
type: object
|
|
maxItems: 8
|
|
type: array
|
|
x-kubernetes-list-map-keys:
|
|
- type
|
|
x-kubernetes-list-type: map
|
|
name:
|
|
maxLength: 253
|
|
minLength: 1
|
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
|
type: string
|
|
supportedKinds:
|
|
items:
|
|
properties:
|
|
group:
|
|
default: gateway.networking.k8s.io
|
|
maxLength: 253
|
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
|
type: string
|
|
kind:
|
|
maxLength: 63
|
|
minLength: 1
|
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
|
type: string
|
|
required:
|
|
- kind
|
|
type: object
|
|
maxItems: 8
|
|
type: array
|
|
required:
|
|
- attachedRoutes
|
|
- conditions
|
|
- name
|
|
- supportedKinds
|
|
type: object
|
|
maxItems: 64
|
|
type: array
|
|
x-kubernetes-list-map-keys:
|
|
- name
|
|
x-kubernetes-list-type: map
|
|
type: object
|
|
required:
|
|
- spec
|
|
type: object
|
|
served: true
|
|
storage: false
|
|
subresources:
|
|
status: {}
|
|
status:
|
|
acceptedNames:
|
|
kind: ""
|
|
plural: ""
|
|
conditions: null
|
|
storedVersions: null
|