fix(cloud-init): install Gateway API v1.1.0 CRDs before cilium so operator registers gateway controller (#581)
Root cause (otech22 2026-05-02): Cilium operator checks for Gateway API CRDs at startup and disables its gateway controller if they are absent — a static, one-shot decision. Cloud-init installs k3s+Cilium first, then Flux reconciles bp-gateway-api minutes later, so the operator always starts without CRDs and never recovers. All 8 HTTPRoutes orphaned. Three-part permanent fix: 1. cloud-init: apply Gateway API v1.1.0 experimental CRDs (incl. TLSRoute) BEFORE the Cilium helm install. Cilium 1.16.x requires TLSRoute CRD to be present; without it the operator's capability check fails entirely and disables the gateway controller. 2. bp-cilium (1.1.2 → 1.1.3): add gatewayAPI.gatewayClass.create: "true" to force GatewayClass creation regardless of CRD presence at Helm render time. Upstream default "auto" skips GatewayClass when the gateway API CRDs are absent at install time (Capabilities check). 3. bp-gateway-api (1.0.0 → 1.1.0): downgrade CRDs from v1.2.0 to v1.1.0 and ship experimental channel (TLSRoute, TCPRoute, UDPRoute, BackendLBPolicy, BackendTLSPolicy). Gateway API v1.2.0 changed status.supportedFeatures from string[] to object[]; Cilium 1.16.5 writes the old string format and the v1.2.0 CRD rejects the status patch with "must be of type object: string", leaving GatewayClass permanently Unknown/Pending. v1.1.0 retains string schema. Upgrade path: bump bp-gateway-api + bp-cilium together when Cilium ≥ 1.17 adopts the v1.2.0 object schema for supportedFeatures. Closes #503 Co-authored-by: hatiyildiz <hatiyildiz@openova.io> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
83ec889f06
commit
73ae746637
@ -36,7 +36,7 @@ spec:
|
|||||||
chart:
|
chart:
|
||||||
spec:
|
spec:
|
||||||
chart: bp-cilium
|
chart: bp-cilium
|
||||||
version: 1.1.1
|
version: 1.1.3
|
||||||
sourceRef:
|
sourceRef:
|
||||||
kind: HelmRepository
|
kind: HelmRepository
|
||||||
name: bp-cilium
|
name: bp-cilium
|
||||||
|
|||||||
@ -60,7 +60,7 @@ spec:
|
|||||||
chart:
|
chart:
|
||||||
spec:
|
spec:
|
||||||
chart: bp-gateway-api
|
chart: bp-gateway-api
|
||||||
version: 1.0.0
|
version: 1.1.0
|
||||||
sourceRef:
|
sourceRef:
|
||||||
kind: HelmRepository
|
kind: HelmRepository
|
||||||
name: bp-gateway-api
|
name: bp-gateway-api
|
||||||
|
|||||||
@ -421,6 +421,16 @@ write_files:
|
|||||||
type: wireguard
|
type: wireguard
|
||||||
gatewayAPI:
|
gatewayAPI:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
gatewayClass:
|
||||||
|
# Force GatewayClass creation regardless of CRD presence at Helm
|
||||||
|
# render time. Default is "auto" which skips creation when the
|
||||||
|
# gateway.networking.k8s.io CRDs are not yet present — exactly
|
||||||
|
# what happens during bootstrap: the upstream Helm chart's
|
||||||
|
# Capabilities check fires BEFORE bp-gateway-api has run, so
|
||||||
|
# GatewayClass/cilium is never rendered into the release.
|
||||||
|
# Forcing "true" ensures the GatewayClass is always created.
|
||||||
|
# Fix for cilium-gateway-race (issue #503).
|
||||||
|
create: "true"
|
||||||
envoy:
|
envoy:
|
||||||
enabled: true
|
enabled: true
|
||||||
# envoyConfig.enabled is the load-bearing flag from issue #491.
|
# envoyConfig.enabled is the load-bearing flag from issue #491.
|
||||||
@ -847,6 +857,39 @@ runcmd:
|
|||||||
# inline as a --version flag because OpenTofu's `var.k3s_version`
|
# inline as a --version flag because OpenTofu's `var.k3s_version`
|
||||||
# parameterisation wires through to it (per INVIOLABLE-PRINCIPLES
|
# parameterisation wires through to it (per INVIOLABLE-PRINCIPLES
|
||||||
# #4 — never hardcode).
|
# #4 — never hardcode).
|
||||||
|
# ── Gateway API CRDs BEFORE Cilium ──────────────────────────────────────
|
||||||
|
#
|
||||||
|
# Cilium 1.16.x operator checks for gateway.networking.k8s.io CRDs at
|
||||||
|
# startup. If the CRDs are absent the operator disables its gateway
|
||||||
|
# controller entirely and never re-checks — a static decision made once
|
||||||
|
# at boot. This creates a race when Gateway API CRDs are installed AFTER
|
||||||
|
# k3s/Cilium, which is the normal Flux GitOps order (bp-gateway-api
|
||||||
|
# reconciles minutes after bp-cilium). Result: every fresh Sovereign has
|
||||||
|
# no GatewayClass/cilium, all HTTPRoutes are orphaned, no routing.
|
||||||
|
#
|
||||||
|
# Fix: pre-install the Gateway API experimental CRDs here, before the
|
||||||
|
# Cilium helm install below. The experimental channel is required because
|
||||||
|
# Cilium 1.16.x references tlsroutes.gateway.networking.k8s.io (v1alpha2)
|
||||||
|
# at startup; the standard channel does not ship TLSRoute.
|
||||||
|
#
|
||||||
|
# Version choice — v1.1.0 NOT v1.2.0:
|
||||||
|
# Gateway API v1.2.0 changed status.supportedFeatures from an array of
|
||||||
|
# strings to an array of objects ({name: string}). Cilium 1.16.5 still
|
||||||
|
# writes the old string format; the v1.2.0 CRD rejects its status patch
|
||||||
|
# with "must be of type object: string", leaving GatewayClass/cilium
|
||||||
|
# permanently in status=Unknown/Pending. v1.1.0 retains the string
|
||||||
|
# format and is fully compatible with Cilium 1.16.x.
|
||||||
|
#
|
||||||
|
# bp-gateway-api Flux blueprint becomes a no-op on first reconcile
|
||||||
|
# (CRDs already present, kubectl apply is idempotent); it is kept as the
|
||||||
|
# GitOps record and handles CRD upgrades when Cilium is bumped.
|
||||||
|
#
|
||||||
|
# Incident reference: otech22 2026-05-02 — all 8 HTTPRoutes orphaned,
|
||||||
|
# cilium-operator log: "Required GatewayAPI resources are not found …
|
||||||
|
# tlsroutes.gateway.networking.k8s.io not found". Fix: issue #503.
|
||||||
|
- 'kubectl --kubeconfig=/etc/rancher/k3s/k3s.yaml apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.1.0/experimental-install.yaml'
|
||||||
|
- 'kubectl --kubeconfig=/etc/rancher/k3s/k3s.yaml wait --for=condition=Established crd/tlsroutes.gateway.networking.k8s.io --timeout=60s'
|
||||||
|
|
||||||
- 'curl -sSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash'
|
- 'curl -sSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash'
|
||||||
- 'helm repo add cilium https://helm.cilium.io/'
|
- 'helm repo add cilium https://helm.cilium.io/'
|
||||||
- 'helm repo update'
|
- 'helm repo update'
|
||||||
|
|||||||
@ -6,7 +6,7 @@ metadata:
|
|||||||
catalyst.openova.io/category: per-host-cluster-infrastructure
|
catalyst.openova.io/category: per-host-cluster-infrastructure
|
||||||
catalyst.openova.io/section: pts-3-1-networking-and-service-mesh
|
catalyst.openova.io/section: pts-3-1-networking-and-service-mesh
|
||||||
spec:
|
spec:
|
||||||
version: 1.1.1
|
version: 1.1.3
|
||||||
card:
|
card:
|
||||||
title: Cilium
|
title: Cilium
|
||||||
summary: Unified CNI + Service Mesh (eBPF). mTLS via WireGuard, Hubble observability, Gateway API.
|
summary: Unified CNI + Service Mesh (eBPF). mTLS via WireGuard, Hubble observability, Gateway API.
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
name: bp-cilium
|
name: bp-cilium
|
||||||
version: 1.1.2
|
version: 1.1.3
|
||||||
description: |
|
description: |
|
||||||
Catalyst-curated Blueprint umbrella chart for Cilium. Depends on the
|
Catalyst-curated Blueprint umbrella chart for Cilium. Depends on the
|
||||||
upstream `cilium` chart as a Helm subchart so `helm dependency build`
|
upstream `cilium` chart as a Helm subchart so `helm dependency build`
|
||||||
|
|||||||
@ -86,6 +86,16 @@ cilium:
|
|||||||
# Gateway API — replaces traditional ingress controllers
|
# Gateway API — replaces traditional ingress controllers
|
||||||
gatewayAPI:
|
gatewayAPI:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
gatewayClass:
|
||||||
|
# Force GatewayClass creation regardless of CRD presence at Helm
|
||||||
|
# render time. Upstream default is "auto" which skips creation when
|
||||||
|
# the gateway.networking.k8s.io CRDs are absent (Capabilities check
|
||||||
|
# at helm install time). During bootstrap, bp-gateway-api runs AFTER
|
||||||
|
# bp-cilium, so "auto" silently skips the GatewayClass — leaving
|
||||||
|
# every HTTPRoute orphaned until the operator is manually restarted.
|
||||||
|
# Forcing "true" ensures GatewayClass/cilium is always created.
|
||||||
|
# Permanent fix for the cilium-gateway race (issue #503).
|
||||||
|
create: "true"
|
||||||
|
|
||||||
# L7 proxy via Envoy — for HTTPRoute, gRPCRoute, L7 NetworkPolicy
|
# L7 proxy via Envoy — for HTTPRoute, gRPCRoute, L7 NetworkPolicy
|
||||||
envoy:
|
envoy:
|
||||||
|
|||||||
@ -6,11 +6,11 @@ metadata:
|
|||||||
catalyst.openova.io/category: per-host-cluster-infrastructure
|
catalyst.openova.io/category: per-host-cluster-infrastructure
|
||||||
catalyst.openova.io/section: pts-3-1-networking-and-service-mesh
|
catalyst.openova.io/section: pts-3-1-networking-and-service-mesh
|
||||||
spec:
|
spec:
|
||||||
version: 1.0.0
|
version: 1.1.0
|
||||||
card:
|
card:
|
||||||
title: Gateway API
|
title: Gateway API
|
||||||
summary: |
|
summary: |
|
||||||
Upstream Kubernetes Gateway API CRDs (Standard channel) — the
|
Upstream Kubernetes Gateway API CRDs (Experimental channel, v1.1.0) — the
|
||||||
gateway.networking.k8s.io/v1 family that every HTTPRoute/Gateway/
|
gateway.networking.k8s.io/v1 family that every HTTPRoute/Gateway/
|
||||||
GatewayClass-using Blueprint depends on. Cilium 1.16's `gatewayAPI.
|
GatewayClass-using Blueprint depends on. Cilium 1.16's `gatewayAPI.
|
||||||
enabled=true` flag wires up the cilium controller but does NOT
|
enabled=true` flag wires up the cilium controller but does NOT
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
name: bp-gateway-api
|
name: bp-gateway-api
|
||||||
version: 1.0.0
|
version: 1.1.0
|
||||||
description: |
|
description: |
|
||||||
Catalyst Blueprint installing the upstream Kubernetes Gateway API
|
Catalyst Blueprint installing the upstream Kubernetes Gateway API
|
||||||
CustomResourceDefinitions (Standard channel — gatewayclasses, gateways,
|
CustomResourceDefinitions (Standard channel — gatewayclasses, gateways,
|
||||||
@ -41,8 +41,21 @@ maintainers:
|
|||||||
# Upstream Gateway API release pinned here (operator-bumpable per
|
# Upstream Gateway API release pinned here (operator-bumpable per
|
||||||
# docs/INVIOLABLE-PRINCIPLES.md #4 — never hardcode in app/values, only in
|
# docs/INVIOLABLE-PRINCIPLES.md #4 — never hardcode in app/values, only in
|
||||||
# the Blueprint version metadata + a single annotation that the templates
|
# the Blueprint version metadata + a single annotation that the templates
|
||||||
# read via .Chart.Annotations). Cilium 1.16 supports Gateway API v1.2.x;
|
# read via .Chart.Annotations).
|
||||||
# bumping requires a paired Cilium support-matrix check.
|
#
|
||||||
|
# Version v1.1.0 (NOT v1.2.0): Gateway API v1.2.0 changed
|
||||||
|
# status.supportedFeatures from string[] to object[]; Cilium 1.16.5
|
||||||
|
# still writes the old string format. The v1.2.0 CRD rejects the
|
||||||
|
# status patch with "must be of type object: string", leaving
|
||||||
|
# GatewayClass/cilium permanently Unknown/Pending. v1.1.0 retains the
|
||||||
|
# string schema. Bump in lock-step with Cilium when 1.17+ (which
|
||||||
|
# writes the v1.2.0 object format) is adopted. See issue #503.
|
||||||
|
#
|
||||||
|
# experimental-install.yaml (NOT standard-install.yaml): Cilium 1.16.x
|
||||||
|
# checks for tlsroutes.gateway.networking.k8s.io at operator startup.
|
||||||
|
# The standard channel does not ship TLSRoute — the operator disables
|
||||||
|
# its gateway controller if TLSRoute is absent. Experimental channel
|
||||||
|
# includes TLSRoute, TCPRoute, UDPRoute, BackendLBPolicy, BackendTLSPolicy.
|
||||||
annotations:
|
annotations:
|
||||||
catalyst.openova.io/no-upstream: "true"
|
catalyst.openova.io/no-upstream: "true"
|
||||||
catalyst.openova.io/upstream-gateway-api-version: "v1.2.0"
|
catalyst.openova.io/upstream-gateway-api-version: "v1.1.0"
|
||||||
|
|||||||
569
platform/gateway-api/chart/templates/backendlbpolicies.yaml
Normal file
569
platform/gateway-api/chart/templates/backendlbpolicies.yaml
Normal file
@ -0,0 +1,569 @@
|
|||||||
|
{{/*
|
||||||
|
Vendored from kubernetes-sigs/gateway-api {{ index .Chart.Annotations "catalyst.openova.io/upstream-gateway-api-version" }}
|
||||||
|
experimental-install.yaml. Do NOT hand-edit annotations / spec — re-vendor
|
||||||
|
via the script in tests/regenerate.sh when bumping the upstream version
|
||||||
|
(also bump catalyst.openova.io/upstream-gateway-api-version in Chart.yaml).
|
||||||
|
|
||||||
|
helm.sh/resource-policy: keep is added under metadata.annotations so a
|
||||||
|
Helm uninstall does NOT delete the CRD. Gateway API CRDs are foundational
|
||||||
|
cluster-scoped infrastructure; deleting them on uninstall would break
|
||||||
|
every HTTPRoute on the cluster simultaneously.
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
#
|
||||||
|
# config/crd/experimental/gateway.networking.k8s.io_backendlbpolicies.yaml
|
||||||
|
#
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
helm.sh/resource-policy: keep
|
||||||
|
api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/2997
|
||||||
|
gateway.networking.k8s.io/bundle-version: v1.1.0
|
||||||
|
gateway.networking.k8s.io/channel: experimental
|
||||||
|
creationTimestamp: null
|
||||||
|
name: backendlbpolicies.gateway.networking.k8s.io
|
||||||
|
spec:
|
||||||
|
group: gateway.networking.k8s.io
|
||||||
|
names:
|
||||||
|
categories:
|
||||||
|
- gateway-api
|
||||||
|
kind: BackendLBPolicy
|
||||||
|
listKind: BackendLBPolicyList
|
||||||
|
plural: backendlbpolicies
|
||||||
|
shortNames:
|
||||||
|
- blbpolicy
|
||||||
|
singular: backendlbpolicy
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- additionalPrinterColumns:
|
||||||
|
- jsonPath: .metadata.creationTimestamp
|
||||||
|
name: Age
|
||||||
|
type: date
|
||||||
|
name: v1alpha2
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
BackendLBPolicy provides a way to define load balancing rules
|
||||||
|
for a backend.
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: |-
|
||||||
|
APIVersion defines the versioned schema of this representation of an object.
|
||||||
|
Servers should convert recognized schemas to the latest internal value, and
|
||||||
|
may reject unrecognized values.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: |-
|
||||||
|
Kind is a string value representing the REST resource this object represents.
|
||||||
|
Servers may infer this from the endpoint the client submits requests to.
|
||||||
|
Cannot be updated.
|
||||||
|
In CamelCase.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||||
|
type: string
|
||||||
|
metadata:
|
||||||
|
type: object
|
||||||
|
spec:
|
||||||
|
description: Spec defines the desired state of BackendLBPolicy.
|
||||||
|
properties:
|
||||||
|
sessionPersistence:
|
||||||
|
description: |-
|
||||||
|
SessionPersistence defines and configures session persistence
|
||||||
|
for the backend.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended
|
||||||
|
properties:
|
||||||
|
absoluteTimeout:
|
||||||
|
description: |-
|
||||||
|
AbsoluteTimeout defines the absolute timeout of the persistent
|
||||||
|
session. Once the AbsoluteTimeout duration has elapsed, the
|
||||||
|
session becomes invalid.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended
|
||||||
|
pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
|
||||||
|
type: string
|
||||||
|
cookieConfig:
|
||||||
|
description: |-
|
||||||
|
CookieConfig provides configuration settings that are specific
|
||||||
|
to cookie-based session persistence.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
properties:
|
||||||
|
lifetimeType:
|
||||||
|
default: Session
|
||||||
|
description: |-
|
||||||
|
LifetimeType specifies whether the cookie has a permanent or
|
||||||
|
session-based lifetime. A permanent cookie persists until its
|
||||||
|
specified expiry time, defined by the Expires or Max-Age cookie
|
||||||
|
attributes, while a session cookie is deleted when the current
|
||||||
|
session ends.
|
||||||
|
|
||||||
|
|
||||||
|
When set to "Permanent", AbsoluteTimeout indicates the
|
||||||
|
cookie's lifetime via the Expires or Max-Age cookie attributes
|
||||||
|
and is required.
|
||||||
|
|
||||||
|
|
||||||
|
When set to "Session", AbsoluteTimeout indicates the
|
||||||
|
absolute lifetime of the cookie tracked by the gateway and
|
||||||
|
is optional.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core for "Session" type
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended for "Permanent" type
|
||||||
|
enum:
|
||||||
|
- Permanent
|
||||||
|
- Session
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
idleTimeout:
|
||||||
|
description: |-
|
||||||
|
IdleTimeout defines the idle timeout of the persistent session.
|
||||||
|
Once the session has been idle for more than the specified
|
||||||
|
IdleTimeout duration, the session becomes invalid.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended
|
||||||
|
pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
|
||||||
|
type: string
|
||||||
|
sessionName:
|
||||||
|
description: |-
|
||||||
|
SessionName defines the name of the persistent session token
|
||||||
|
which may be reflected in the cookie or the header. Users
|
||||||
|
should avoid reusing session names to prevent unintended
|
||||||
|
consequences, such as rejection or unpredictable behavior.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Implementation-specific
|
||||||
|
maxLength: 128
|
||||||
|
type: string
|
||||||
|
type:
|
||||||
|
default: Cookie
|
||||||
|
description: |-
|
||||||
|
Type defines the type of session persistence such as through
|
||||||
|
the use a header or cookie. Defaults to cookie based session
|
||||||
|
persistence.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core for "Cookie" type
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended for "Header" type
|
||||||
|
enum:
|
||||||
|
- Cookie
|
||||||
|
- Header
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
x-kubernetes-validations:
|
||||||
|
- message: AbsoluteTimeout must be specified when cookie lifetimeType
|
||||||
|
is Permanent
|
||||||
|
rule: '!has(self.cookieConfig.lifetimeType) || self.cookieConfig.lifetimeType
|
||||||
|
!= ''Permanent'' || has(self.absoluteTimeout)'
|
||||||
|
targetRefs:
|
||||||
|
description: |-
|
||||||
|
TargetRef identifies an API object to apply policy to.
|
||||||
|
Currently, Backends (i.e. Service, ServiceImport, or any
|
||||||
|
implementation-specific backendRef) are the only valid API
|
||||||
|
target references.
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
LocalPolicyTargetReference identifies an API object to apply a direct or
|
||||||
|
inherited policy to. This should be used as part of Policy resources
|
||||||
|
that can target Gateway API resources. For more information on how this
|
||||||
|
policy attachment model works, and a sample Policy resource, refer to
|
||||||
|
the policy attachment documentation for Gateway API.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
description: Group is the group of the target resource.
|
||||||
|
maxLength: 253
|
||||||
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: Kind is kind of the target resource.
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: Name is the name of the target resource.
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- group
|
||||||
|
- kind
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
maxItems: 16
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- group
|
||||||
|
- kind
|
||||||
|
- name
|
||||||
|
x-kubernetes-list-type: map
|
||||||
|
required:
|
||||||
|
- targetRefs
|
||||||
|
type: object
|
||||||
|
status:
|
||||||
|
description: Status defines the current state of BackendLBPolicy.
|
||||||
|
properties:
|
||||||
|
ancestors:
|
||||||
|
description: |-
|
||||||
|
Ancestors is a list of ancestor resources (usually Gateways) that are
|
||||||
|
associated with the policy, and the status of the policy with respect to
|
||||||
|
each ancestor. When this policy attaches to a parent, the controller that
|
||||||
|
manages the parent and the ancestors MUST add an entry to this list when
|
||||||
|
the controller first sees the policy and SHOULD update the entry as
|
||||||
|
appropriate when the relevant ancestor is modified.
|
||||||
|
|
||||||
|
|
||||||
|
Note that choosing the relevant ancestor is left to the Policy designers;
|
||||||
|
an important part of Policy design is designing the right object level at
|
||||||
|
which to namespace this status.
|
||||||
|
|
||||||
|
|
||||||
|
Note also that implementations MUST ONLY populate ancestor status for
|
||||||
|
the Ancestor resources they are responsible for. Implementations MUST
|
||||||
|
use the ControllerName field to uniquely identify the entries in this list
|
||||||
|
that they are responsible for.
|
||||||
|
|
||||||
|
|
||||||
|
Note that to achieve this, the list of PolicyAncestorStatus structs
|
||||||
|
MUST be treated as a map with a composite key, made up of the AncestorRef
|
||||||
|
and ControllerName fields combined.
|
||||||
|
|
||||||
|
|
||||||
|
A maximum of 16 ancestors will be represented in this list. An empty list
|
||||||
|
means the Policy is not relevant for any ancestors.
|
||||||
|
|
||||||
|
|
||||||
|
If this slice is full, implementations MUST NOT add further entries.
|
||||||
|
Instead they MUST consider the policy unimplementable and signal that
|
||||||
|
on any related resources such as the ancestor that would be referenced
|
||||||
|
here. For example, if this list was full on BackendTLSPolicy, no
|
||||||
|
additional Gateways would be able to reference the Service targeted by
|
||||||
|
the BackendTLSPolicy.
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
PolicyAncestorStatus describes the status of a route with respect to an
|
||||||
|
associated Ancestor.
|
||||||
|
|
||||||
|
|
||||||
|
Ancestors refer to objects that are either the Target of a policy or above it
|
||||||
|
in terms of object hierarchy. For example, if a policy targets a Service, the
|
||||||
|
Policy's Ancestors are, in order, the Service, the HTTPRoute, the Gateway, and
|
||||||
|
the GatewayClass. Almost always, in this hierarchy, the Gateway will be the most
|
||||||
|
useful object to place Policy status on, so we recommend that implementations
|
||||||
|
SHOULD use Gateway as the PolicyAncestorStatus object unless the designers
|
||||||
|
have a _very_ good reason otherwise.
|
||||||
|
|
||||||
|
|
||||||
|
In the context of policy attachment, the Ancestor is used to distinguish which
|
||||||
|
resource results in a distinct application of this policy. For example, if a policy
|
||||||
|
targets a Service, it may have a distinct result per attached Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Policies targeting the same resource may have different effects depending on the
|
||||||
|
ancestors of those resources. For example, different Gateways targeting the same
|
||||||
|
Service may have different capabilities, especially if they have different underlying
|
||||||
|
implementations.
|
||||||
|
|
||||||
|
|
||||||
|
For example, in BackendTLSPolicy, the Policy attaches to a Service that is
|
||||||
|
used as a backend in a HTTPRoute that is itself attached to a Gateway.
|
||||||
|
In this case, the relevant object for status is the Gateway, and that is the
|
||||||
|
ancestor object referred to in this status.
|
||||||
|
|
||||||
|
|
||||||
|
Note that a parent is also an ancestor, so for objects where the parent is the
|
||||||
|
relevant object for status, this struct SHOULD still be used.
|
||||||
|
|
||||||
|
|
||||||
|
This struct is intended to be used in a slice that's effectively a map,
|
||||||
|
with a composite key made up of the AncestorRef and the ControllerName.
|
||||||
|
properties:
|
||||||
|
ancestorRef:
|
||||||
|
description: |-
|
||||||
|
AncestorRef corresponds with a ParentRef in the spec that this
|
||||||
|
PolicyAncestorStatus struct describes the status of.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
default: gateway.networking.k8s.io
|
||||||
|
description: |-
|
||||||
|
Group is the group of the referent.
|
||||||
|
When unspecified, "gateway.networking.k8s.io" is inferred.
|
||||||
|
To set the core API group (such as for a "Service" kind referent),
|
||||||
|
Group must be explicitly set to "" (empty string).
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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: Gateway
|
||||||
|
description: |-
|
||||||
|
Kind is kind of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
There are two kinds of parent resources with "Core" support:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway (Gateway conformance profile)
|
||||||
|
* Service (Mesh conformance profile, ClusterIP Services only)
|
||||||
|
|
||||||
|
|
||||||
|
Support for other resources is Implementation-Specific.
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name is the name of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace is the namespace of the referent. When unspecified, this refers
|
||||||
|
to the local namespace of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
Note that there are specific rules for ParentRefs which cross namespace
|
||||||
|
boundaries. Cross-namespace references are only valid if they are explicitly
|
||||||
|
allowed by something in the namespace they are referring to. For example:
|
||||||
|
Gateway has the AllowedRoutes field, and ReferenceGrant provides a
|
||||||
|
generic way to enable any other kind of cross-namespace reference.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in the same namespace are "producer"
|
||||||
|
routes, which apply default routing rules to inbound connections from
|
||||||
|
any namespace to the Service.
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in a different namespace are
|
||||||
|
"consumer" routes, and these routing rules are only applied to outbound
|
||||||
|
connections originating from the same namespace as the Route, for which
|
||||||
|
the intended destination of the connections are a Service targeted as a
|
||||||
|
ParentRef of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: |-
|
||||||
|
Port is the network port this Route targets. It can be interpreted
|
||||||
|
differently based on the type of parent resource.
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Gateway, this targets all listeners
|
||||||
|
listening on the specified port that also support this kind of Route(and
|
||||||
|
select this Route). It's not recommended to set `Port` unless the
|
||||||
|
networking behaviors specified in a Route must apply to a specific port
|
||||||
|
as opposed to a listener(s) whose port(s) may be changed. When both Port
|
||||||
|
and SectionName are specified, the name and port of the selected listener
|
||||||
|
must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Service, this targets a specific port in the
|
||||||
|
Service spec. When both Port (experimental) and SectionName are specified,
|
||||||
|
the name and port of the selected port must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support other parent resources.
|
||||||
|
Implementations supporting other types of parent resources MUST clearly
|
||||||
|
document how/if Port is interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
For the purpose of status, an attachment is considered successful as
|
||||||
|
long as the parent resource accepts it partially. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment
|
||||||
|
from the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route,
|
||||||
|
the Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended
|
||||||
|
format: int32
|
||||||
|
maximum: 65535
|
||||||
|
minimum: 1
|
||||||
|
type: integer
|
||||||
|
sectionName:
|
||||||
|
description: |-
|
||||||
|
SectionName is the name of a section within the target resource. In the
|
||||||
|
following resources, SectionName is interpreted as the following:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway: Listener name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
* Service: Port name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support attaching Routes to other resources.
|
||||||
|
If that is the case, they MUST clearly document how SectionName is
|
||||||
|
interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
When unspecified (empty string), this will reference the entire resource.
|
||||||
|
For the purpose of status, an attachment is considered successful if at
|
||||||
|
least one section in the parent resource accepts it. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment from
|
||||||
|
the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route, the
|
||||||
|
Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
conditions:
|
||||||
|
description: Conditions describes the status of the Policy with
|
||||||
|
respect to the given Ancestor.
|
||||||
|
items:
|
||||||
|
description: "Condition contains details for one aspect of
|
||||||
|
the current state of this API Resource.\n---\nThis struct
|
||||||
|
is intended for direct use as an array at the field path
|
||||||
|
.status.conditions. For example,\n\n\n\ttype FooStatus
|
||||||
|
struct{\n\t // Represents the observations of a foo's
|
||||||
|
current state.\n\t // Known .status.conditions.type are:
|
||||||
|
\"Available\", \"Progressing\", and \"Degraded\"\n\t //
|
||||||
|
+patchMergeKey=type\n\t // +patchStrategy=merge\n\t //
|
||||||
|
+listType=map\n\t // +listMapKey=type\n\t Conditions
|
||||||
|
[]metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\"
|
||||||
|
patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t
|
||||||
|
\ // other fields\n\t}"
|
||||||
|
properties:
|
||||||
|
lastTransitionTime:
|
||||||
|
description: |-
|
||||||
|
lastTransitionTime is the last time the condition transitioned from one status to another.
|
||||||
|
This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
|
||||||
|
format: date-time
|
||||||
|
type: string
|
||||||
|
message:
|
||||||
|
description: |-
|
||||||
|
message is a human readable message indicating details about the transition.
|
||||||
|
This may be an empty string.
|
||||||
|
maxLength: 32768
|
||||||
|
type: string
|
||||||
|
observedGeneration:
|
||||||
|
description: |-
|
||||||
|
observedGeneration represents the .metadata.generation that the condition was set based upon.
|
||||||
|
For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
|
||||||
|
with respect to the current state of the instance.
|
||||||
|
format: int64
|
||||||
|
minimum: 0
|
||||||
|
type: integer
|
||||||
|
reason:
|
||||||
|
description: |-
|
||||||
|
reason contains a programmatic identifier indicating the reason for the condition's last transition.
|
||||||
|
Producers of specific condition types may define expected values and meanings for this field,
|
||||||
|
and whether the values are considered a guaranteed API.
|
||||||
|
The value should be a CamelCase string.
|
||||||
|
This field may not be empty.
|
||||||
|
maxLength: 1024
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: status of the condition, one of True, False,
|
||||||
|
Unknown.
|
||||||
|
enum:
|
||||||
|
- "True"
|
||||||
|
- "False"
|
||||||
|
- Unknown
|
||||||
|
type: string
|
||||||
|
type:
|
||||||
|
description: |-
|
||||||
|
type of condition in CamelCase or in foo.example.com/CamelCase.
|
||||||
|
---
|
||||||
|
Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
|
||||||
|
useful (see .node.status.conditions), the ability to deconflict is important.
|
||||||
|
The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
|
||||||
|
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
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- type
|
||||||
|
x-kubernetes-list-type: map
|
||||||
|
controllerName:
|
||||||
|
description: |-
|
||||||
|
ControllerName is a domain/path string that indicates the name of the
|
||||||
|
controller that wrote this status. This corresponds with the
|
||||||
|
controllerName field on GatewayClass.
|
||||||
|
|
||||||
|
|
||||||
|
Example: "example.net/gateway-controller".
|
||||||
|
|
||||||
|
|
||||||
|
The format of this field is DOMAIN "/" PATH, where DOMAIN and PATH are
|
||||||
|
valid Kubernetes names
|
||||||
|
(https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
|
||||||
|
|
||||||
|
|
||||||
|
Controllers MUST populate this field when writing status. Controllers should ensure that
|
||||||
|
entries to status populated with their ControllerName are cleaned up when they are no
|
||||||
|
longer necessary.
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- ancestorRef
|
||||||
|
- controllerName
|
||||||
|
type: object
|
||||||
|
maxItems: 16
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- ancestors
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
subresources:
|
||||||
|
status: {}
|
||||||
|
status:
|
||||||
|
acceptedNames:
|
||||||
|
kind: ""
|
||||||
|
plural: ""
|
||||||
|
conditions: null
|
||||||
|
storedVersions: null
|
||||||
616
platform/gateway-api/chart/templates/backendtlspolicies.yaml
Normal file
616
platform/gateway-api/chart/templates/backendtlspolicies.yaml
Normal file
@ -0,0 +1,616 @@
|
|||||||
|
{{/*
|
||||||
|
Vendored from kubernetes-sigs/gateway-api {{ index .Chart.Annotations "catalyst.openova.io/upstream-gateway-api-version" }}
|
||||||
|
experimental-install.yaml. Do NOT hand-edit annotations / spec — re-vendor
|
||||||
|
via the script in tests/regenerate.sh when bumping the upstream version
|
||||||
|
(also bump catalyst.openova.io/upstream-gateway-api-version in Chart.yaml).
|
||||||
|
|
||||||
|
helm.sh/resource-policy: keep is added under metadata.annotations so a
|
||||||
|
Helm uninstall does NOT delete the CRD. Gateway API CRDs are foundational
|
||||||
|
cluster-scoped infrastructure; deleting them on uninstall would break
|
||||||
|
every HTTPRoute on the cluster simultaneously.
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
#
|
||||||
|
# config/crd/experimental/gateway.networking.k8s.io_backendtlspolicies.yaml
|
||||||
|
#
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
helm.sh/resource-policy: keep
|
||||||
|
api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/2997
|
||||||
|
gateway.networking.k8s.io/bundle-version: v1.1.0
|
||||||
|
gateway.networking.k8s.io/channel: experimental
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
gateway.networking.k8s.io/policy: Direct
|
||||||
|
name: backendtlspolicies.gateway.networking.k8s.io
|
||||||
|
spec:
|
||||||
|
group: gateway.networking.k8s.io
|
||||||
|
names:
|
||||||
|
categories:
|
||||||
|
- gateway-api
|
||||||
|
kind: BackendTLSPolicy
|
||||||
|
listKind: BackendTLSPolicyList
|
||||||
|
plural: backendtlspolicies
|
||||||
|
shortNames:
|
||||||
|
- btlspolicy
|
||||||
|
singular: backendtlspolicy
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- additionalPrinterColumns:
|
||||||
|
- jsonPath: .metadata.creationTimestamp
|
||||||
|
name: Age
|
||||||
|
type: date
|
||||||
|
name: v1alpha3
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
BackendTLSPolicy provides a way to configure how a Gateway
|
||||||
|
connects to a Backend via TLS.
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: |-
|
||||||
|
APIVersion defines the versioned schema of this representation of an object.
|
||||||
|
Servers should convert recognized schemas to the latest internal value, and
|
||||||
|
may reject unrecognized values.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: |-
|
||||||
|
Kind is a string value representing the REST resource this object represents.
|
||||||
|
Servers may infer this from the endpoint the client submits requests to.
|
||||||
|
Cannot be updated.
|
||||||
|
In CamelCase.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||||
|
type: string
|
||||||
|
metadata:
|
||||||
|
type: object
|
||||||
|
spec:
|
||||||
|
description: Spec defines the desired state of BackendTLSPolicy.
|
||||||
|
properties:
|
||||||
|
targetRefs:
|
||||||
|
description: |-
|
||||||
|
TargetRefs identifies an API object to apply the policy to.
|
||||||
|
Only Services have Extended support. Implementations MAY support
|
||||||
|
additional objects, with Implementation Specific support.
|
||||||
|
Note that this config applies to the entire referenced resource
|
||||||
|
by default, but this default may change in the future to provide
|
||||||
|
a more granular application of the policy.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended for Kubernetes Service
|
||||||
|
|
||||||
|
|
||||||
|
Support: Implementation-specific for any other resource
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
LocalPolicyTargetReferenceWithSectionName identifies an API object to apply a
|
||||||
|
direct policy to. This should be used as part of Policy resources that can
|
||||||
|
target single resources. For more information on how this policy attachment
|
||||||
|
mode works, and a sample Policy resource, refer to the policy attachment
|
||||||
|
documentation for Gateway API.
|
||||||
|
|
||||||
|
|
||||||
|
Note: This should only be used for direct policy attachment when references
|
||||||
|
to SectionName are actually needed. In all other cases,
|
||||||
|
LocalPolicyTargetReference should be used.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
description: Group is the group of the target resource.
|
||||||
|
maxLength: 253
|
||||||
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: Kind is kind of the target resource.
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: Name is the name of the target resource.
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
sectionName:
|
||||||
|
description: |-
|
||||||
|
SectionName is the name of a section within the target resource. When
|
||||||
|
unspecified, this targetRef targets the entire resource. In the following
|
||||||
|
resources, SectionName is interpreted as the following:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway: Listener name
|
||||||
|
* HTTPRoute: HTTPRouteRule name
|
||||||
|
* Service: Port name
|
||||||
|
|
||||||
|
|
||||||
|
If a SectionName is specified, but does not exist on the targeted object,
|
||||||
|
the Policy must fail to attach, and the policy implementation should record
|
||||||
|
a `ResolvedRefs` or similar Condition in the Policy's status.
|
||||||
|
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
|
||||||
|
required:
|
||||||
|
- group
|
||||||
|
- kind
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
maxItems: 16
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
validation:
|
||||||
|
description: Validation contains backend TLS validation configuration.
|
||||||
|
properties:
|
||||||
|
caCertificateRefs:
|
||||||
|
description: |-
|
||||||
|
CACertificateRefs contains one or more references to Kubernetes objects that
|
||||||
|
contain a PEM-encoded TLS CA certificate bundle, which is used to
|
||||||
|
validate a TLS handshake between the Gateway and backend Pod.
|
||||||
|
|
||||||
|
|
||||||
|
If CACertificateRefs is empty or unspecified, then WellKnownCACertificates must be
|
||||||
|
specified. Only one of CACertificateRefs or WellKnownCACertificates may be specified,
|
||||||
|
not both. If CACertifcateRefs is empty or unspecified, the configuration for
|
||||||
|
WellKnownCACertificates MUST be honored instead if supported by the implementation.
|
||||||
|
|
||||||
|
|
||||||
|
References to a resource in a different namespace are invalid for the
|
||||||
|
moment, although we will revisit this in the future.
|
||||||
|
|
||||||
|
|
||||||
|
A single CACertificateRef to a Kubernetes ConfigMap kind has "Core" support.
|
||||||
|
Implementations MAY choose to support attaching multiple certificates to
|
||||||
|
a backend, but this behavior is implementation-specific.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core - An optional single reference to a Kubernetes ConfigMap,
|
||||||
|
with the CA certificate in a key named `ca.crt`.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Implementation-specific (More than one reference, or other kinds
|
||||||
|
of resources).
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
LocalObjectReference identifies an API object within the namespace of the
|
||||||
|
referrer.
|
||||||
|
The API object must be valid in the cluster; the Group and Kind must
|
||||||
|
be registered in the cluster for this reference to be valid.
|
||||||
|
|
||||||
|
|
||||||
|
References to objects with invalid Group and Kind are not valid, and must
|
||||||
|
be rejected by the implementation, with appropriate Conditions set
|
||||||
|
on the containing object.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
description: |-
|
||||||
|
Group is the group of the referent. For example, "gateway.networking.k8s.io".
|
||||||
|
When unspecified or empty string, core API group is inferred.
|
||||||
|
maxLength: 253
|
||||||
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: Kind is kind of the referent. For example "HTTPRoute"
|
||||||
|
or "Service".
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: Name is the name of the referent.
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- group
|
||||||
|
- kind
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
maxItems: 8
|
||||||
|
type: array
|
||||||
|
hostname:
|
||||||
|
description: |-
|
||||||
|
Hostname is used for two purposes in the connection between Gateways and
|
||||||
|
backends:
|
||||||
|
|
||||||
|
|
||||||
|
1. Hostname MUST be used as the SNI to connect to the backend (RFC 6066).
|
||||||
|
2. Hostname MUST be used for authentication and MUST match the certificate
|
||||||
|
served by the matching backend.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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
|
||||||
|
wellKnownCACertificates:
|
||||||
|
description: |-
|
||||||
|
WellKnownCACertificates specifies whether system CA certificates may be used in
|
||||||
|
the TLS handshake between the gateway and backend pod.
|
||||||
|
|
||||||
|
|
||||||
|
If WellKnownCACertificates is unspecified or empty (""), then CACertificateRefs
|
||||||
|
must be specified with at least one entry for a valid configuration. Only one of
|
||||||
|
CACertificateRefs or WellKnownCACertificates may be specified, not both. If an
|
||||||
|
implementation does not support the WellKnownCACertificates field or the value
|
||||||
|
supplied is not supported, the Status Conditions on the Policy MUST be
|
||||||
|
updated to include an Accepted: False Condition with Reason: Invalid.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Implementation-specific
|
||||||
|
enum:
|
||||||
|
- System
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- hostname
|
||||||
|
type: object
|
||||||
|
x-kubernetes-validations:
|
||||||
|
- message: must not contain both CACertificateRefs and WellKnownCACertificates
|
||||||
|
rule: '!(has(self.caCertificateRefs) && size(self.caCertificateRefs)
|
||||||
|
> 0 && has(self.wellKnownCACertificates) && self.wellKnownCACertificates
|
||||||
|
!= "")'
|
||||||
|
- message: must specify either CACertificateRefs or WellKnownCACertificates
|
||||||
|
rule: (has(self.caCertificateRefs) && size(self.caCertificateRefs)
|
||||||
|
> 0 || has(self.wellKnownCACertificates) && self.wellKnownCACertificates
|
||||||
|
!= "")
|
||||||
|
required:
|
||||||
|
- targetRefs
|
||||||
|
- validation
|
||||||
|
type: object
|
||||||
|
status:
|
||||||
|
description: Status defines the current state of BackendTLSPolicy.
|
||||||
|
properties:
|
||||||
|
ancestors:
|
||||||
|
description: |-
|
||||||
|
Ancestors is a list of ancestor resources (usually Gateways) that are
|
||||||
|
associated with the policy, and the status of the policy with respect to
|
||||||
|
each ancestor. When this policy attaches to a parent, the controller that
|
||||||
|
manages the parent and the ancestors MUST add an entry to this list when
|
||||||
|
the controller first sees the policy and SHOULD update the entry as
|
||||||
|
appropriate when the relevant ancestor is modified.
|
||||||
|
|
||||||
|
|
||||||
|
Note that choosing the relevant ancestor is left to the Policy designers;
|
||||||
|
an important part of Policy design is designing the right object level at
|
||||||
|
which to namespace this status.
|
||||||
|
|
||||||
|
|
||||||
|
Note also that implementations MUST ONLY populate ancestor status for
|
||||||
|
the Ancestor resources they are responsible for. Implementations MUST
|
||||||
|
use the ControllerName field to uniquely identify the entries in this list
|
||||||
|
that they are responsible for.
|
||||||
|
|
||||||
|
|
||||||
|
Note that to achieve this, the list of PolicyAncestorStatus structs
|
||||||
|
MUST be treated as a map with a composite key, made up of the AncestorRef
|
||||||
|
and ControllerName fields combined.
|
||||||
|
|
||||||
|
|
||||||
|
A maximum of 16 ancestors will be represented in this list. An empty list
|
||||||
|
means the Policy is not relevant for any ancestors.
|
||||||
|
|
||||||
|
|
||||||
|
If this slice is full, implementations MUST NOT add further entries.
|
||||||
|
Instead they MUST consider the policy unimplementable and signal that
|
||||||
|
on any related resources such as the ancestor that would be referenced
|
||||||
|
here. For example, if this list was full on BackendTLSPolicy, no
|
||||||
|
additional Gateways would be able to reference the Service targeted by
|
||||||
|
the BackendTLSPolicy.
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
PolicyAncestorStatus describes the status of a route with respect to an
|
||||||
|
associated Ancestor.
|
||||||
|
|
||||||
|
|
||||||
|
Ancestors refer to objects that are either the Target of a policy or above it
|
||||||
|
in terms of object hierarchy. For example, if a policy targets a Service, the
|
||||||
|
Policy's Ancestors are, in order, the Service, the HTTPRoute, the Gateway, and
|
||||||
|
the GatewayClass. Almost always, in this hierarchy, the Gateway will be the most
|
||||||
|
useful object to place Policy status on, so we recommend that implementations
|
||||||
|
SHOULD use Gateway as the PolicyAncestorStatus object unless the designers
|
||||||
|
have a _very_ good reason otherwise.
|
||||||
|
|
||||||
|
|
||||||
|
In the context of policy attachment, the Ancestor is used to distinguish which
|
||||||
|
resource results in a distinct application of this policy. For example, if a policy
|
||||||
|
targets a Service, it may have a distinct result per attached Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Policies targeting the same resource may have different effects depending on the
|
||||||
|
ancestors of those resources. For example, different Gateways targeting the same
|
||||||
|
Service may have different capabilities, especially if they have different underlying
|
||||||
|
implementations.
|
||||||
|
|
||||||
|
|
||||||
|
For example, in BackendTLSPolicy, the Policy attaches to a Service that is
|
||||||
|
used as a backend in a HTTPRoute that is itself attached to a Gateway.
|
||||||
|
In this case, the relevant object for status is the Gateway, and that is the
|
||||||
|
ancestor object referred to in this status.
|
||||||
|
|
||||||
|
|
||||||
|
Note that a parent is also an ancestor, so for objects where the parent is the
|
||||||
|
relevant object for status, this struct SHOULD still be used.
|
||||||
|
|
||||||
|
|
||||||
|
This struct is intended to be used in a slice that's effectively a map,
|
||||||
|
with a composite key made up of the AncestorRef and the ControllerName.
|
||||||
|
properties:
|
||||||
|
ancestorRef:
|
||||||
|
description: |-
|
||||||
|
AncestorRef corresponds with a ParentRef in the spec that this
|
||||||
|
PolicyAncestorStatus struct describes the status of.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
default: gateway.networking.k8s.io
|
||||||
|
description: |-
|
||||||
|
Group is the group of the referent.
|
||||||
|
When unspecified, "gateway.networking.k8s.io" is inferred.
|
||||||
|
To set the core API group (such as for a "Service" kind referent),
|
||||||
|
Group must be explicitly set to "" (empty string).
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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: Gateway
|
||||||
|
description: |-
|
||||||
|
Kind is kind of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
There are two kinds of parent resources with "Core" support:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway (Gateway conformance profile)
|
||||||
|
* Service (Mesh conformance profile, ClusterIP Services only)
|
||||||
|
|
||||||
|
|
||||||
|
Support for other resources is Implementation-Specific.
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name is the name of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace is the namespace of the referent. When unspecified, this refers
|
||||||
|
to the local namespace of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
Note that there are specific rules for ParentRefs which cross namespace
|
||||||
|
boundaries. Cross-namespace references are only valid if they are explicitly
|
||||||
|
allowed by something in the namespace they are referring to. For example:
|
||||||
|
Gateway has the AllowedRoutes field, and ReferenceGrant provides a
|
||||||
|
generic way to enable any other kind of cross-namespace reference.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in the same namespace are "producer"
|
||||||
|
routes, which apply default routing rules to inbound connections from
|
||||||
|
any namespace to the Service.
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in a different namespace are
|
||||||
|
"consumer" routes, and these routing rules are only applied to outbound
|
||||||
|
connections originating from the same namespace as the Route, for which
|
||||||
|
the intended destination of the connections are a Service targeted as a
|
||||||
|
ParentRef of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: |-
|
||||||
|
Port is the network port this Route targets. It can be interpreted
|
||||||
|
differently based on the type of parent resource.
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Gateway, this targets all listeners
|
||||||
|
listening on the specified port that also support this kind of Route(and
|
||||||
|
select this Route). It's not recommended to set `Port` unless the
|
||||||
|
networking behaviors specified in a Route must apply to a specific port
|
||||||
|
as opposed to a listener(s) whose port(s) may be changed. When both Port
|
||||||
|
and SectionName are specified, the name and port of the selected listener
|
||||||
|
must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Service, this targets a specific port in the
|
||||||
|
Service spec. When both Port (experimental) and SectionName are specified,
|
||||||
|
the name and port of the selected port must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support other parent resources.
|
||||||
|
Implementations supporting other types of parent resources MUST clearly
|
||||||
|
document how/if Port is interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
For the purpose of status, an attachment is considered successful as
|
||||||
|
long as the parent resource accepts it partially. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment
|
||||||
|
from the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route,
|
||||||
|
the Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended
|
||||||
|
format: int32
|
||||||
|
maximum: 65535
|
||||||
|
minimum: 1
|
||||||
|
type: integer
|
||||||
|
sectionName:
|
||||||
|
description: |-
|
||||||
|
SectionName is the name of a section within the target resource. In the
|
||||||
|
following resources, SectionName is interpreted as the following:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway: Listener name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
* Service: Port name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support attaching Routes to other resources.
|
||||||
|
If that is the case, they MUST clearly document how SectionName is
|
||||||
|
interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
When unspecified (empty string), this will reference the entire resource.
|
||||||
|
For the purpose of status, an attachment is considered successful if at
|
||||||
|
least one section in the parent resource accepts it. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment from
|
||||||
|
the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route, the
|
||||||
|
Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
conditions:
|
||||||
|
description: Conditions describes the status of the Policy with
|
||||||
|
respect to the given Ancestor.
|
||||||
|
items:
|
||||||
|
description: "Condition contains details for one aspect of
|
||||||
|
the current state of this API Resource.\n---\nThis struct
|
||||||
|
is intended for direct use as an array at the field path
|
||||||
|
.status.conditions. For example,\n\n\n\ttype FooStatus
|
||||||
|
struct{\n\t // Represents the observations of a foo's
|
||||||
|
current state.\n\t // Known .status.conditions.type are:
|
||||||
|
\"Available\", \"Progressing\", and \"Degraded\"\n\t //
|
||||||
|
+patchMergeKey=type\n\t // +patchStrategy=merge\n\t //
|
||||||
|
+listType=map\n\t // +listMapKey=type\n\t Conditions
|
||||||
|
[]metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\"
|
||||||
|
patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t
|
||||||
|
\ // other fields\n\t}"
|
||||||
|
properties:
|
||||||
|
lastTransitionTime:
|
||||||
|
description: |-
|
||||||
|
lastTransitionTime is the last time the condition transitioned from one status to another.
|
||||||
|
This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
|
||||||
|
format: date-time
|
||||||
|
type: string
|
||||||
|
message:
|
||||||
|
description: |-
|
||||||
|
message is a human readable message indicating details about the transition.
|
||||||
|
This may be an empty string.
|
||||||
|
maxLength: 32768
|
||||||
|
type: string
|
||||||
|
observedGeneration:
|
||||||
|
description: |-
|
||||||
|
observedGeneration represents the .metadata.generation that the condition was set based upon.
|
||||||
|
For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
|
||||||
|
with respect to the current state of the instance.
|
||||||
|
format: int64
|
||||||
|
minimum: 0
|
||||||
|
type: integer
|
||||||
|
reason:
|
||||||
|
description: |-
|
||||||
|
reason contains a programmatic identifier indicating the reason for the condition's last transition.
|
||||||
|
Producers of specific condition types may define expected values and meanings for this field,
|
||||||
|
and whether the values are considered a guaranteed API.
|
||||||
|
The value should be a CamelCase string.
|
||||||
|
This field may not be empty.
|
||||||
|
maxLength: 1024
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: status of the condition, one of True, False,
|
||||||
|
Unknown.
|
||||||
|
enum:
|
||||||
|
- "True"
|
||||||
|
- "False"
|
||||||
|
- Unknown
|
||||||
|
type: string
|
||||||
|
type:
|
||||||
|
description: |-
|
||||||
|
type of condition in CamelCase or in foo.example.com/CamelCase.
|
||||||
|
---
|
||||||
|
Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
|
||||||
|
useful (see .node.status.conditions), the ability to deconflict is important.
|
||||||
|
The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
|
||||||
|
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
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- type
|
||||||
|
x-kubernetes-list-type: map
|
||||||
|
controllerName:
|
||||||
|
description: |-
|
||||||
|
ControllerName is a domain/path string that indicates the name of the
|
||||||
|
controller that wrote this status. This corresponds with the
|
||||||
|
controllerName field on GatewayClass.
|
||||||
|
|
||||||
|
|
||||||
|
Example: "example.net/gateway-controller".
|
||||||
|
|
||||||
|
|
||||||
|
The format of this field is DOMAIN "/" PATH, where DOMAIN and PATH are
|
||||||
|
valid Kubernetes names
|
||||||
|
(https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
|
||||||
|
|
||||||
|
|
||||||
|
Controllers MUST populate this field when writing status. Controllers should ensure that
|
||||||
|
entries to status populated with their ControllerName are cleaned up when they are no
|
||||||
|
longer necessary.
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- ancestorRef
|
||||||
|
- controllerName
|
||||||
|
type: object
|
||||||
|
maxItems: 16
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- ancestors
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
subresources:
|
||||||
|
status: {}
|
||||||
|
status:
|
||||||
|
acceptedNames:
|
||||||
|
kind: ""
|
||||||
|
plural: ""
|
||||||
|
conditions: null
|
||||||
|
storedVersions: null
|
||||||
@ -1,6 +1,6 @@
|
|||||||
{{/*
|
{{/*
|
||||||
Vendored from kubernetes-sigs/gateway-api {{ index .Chart.Annotations "catalyst.openova.io/upstream-gateway-api-version" }}
|
Vendored from kubernetes-sigs/gateway-api {{ index .Chart.Annotations "catalyst.openova.io/upstream-gateway-api-version" }}
|
||||||
standard-install.yaml. Do NOT hand-edit annotations / spec — re-vendor
|
experimental-install.yaml. Do NOT hand-edit annotations / spec — re-vendor
|
||||||
via the script in tests/regenerate.sh when bumping the upstream version
|
via the script in tests/regenerate.sh when bumping the upstream version
|
||||||
(also bump catalyst.openova.io/upstream-gateway-api-version in Chart.yaml).
|
(also bump catalyst.openova.io/upstream-gateway-api-version in Chart.yaml).
|
||||||
|
|
||||||
@ -9,17 +9,18 @@
|
|||||||
cluster-scoped infrastructure; deleting them on uninstall would break
|
cluster-scoped infrastructure; deleting them on uninstall would break
|
||||||
every HTTPRoute on the cluster simultaneously.
|
every HTTPRoute on the cluster simultaneously.
|
||||||
*/}}
|
*/}}
|
||||||
|
|
||||||
#
|
#
|
||||||
# config/crd/standard/gateway.networking.k8s.io_gatewayclasses.yaml
|
# config/crd/experimental/gateway.networking.k8s.io_gatewayclasses.yaml
|
||||||
#
|
#
|
||||||
apiVersion: apiextensions.k8s.io/v1
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
helm.sh/resource-policy: keep
|
helm.sh/resource-policy: keep
|
||||||
api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
|
api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/2997
|
||||||
gateway.networking.k8s.io/bundle-version: v1.2.0
|
gateway.networking.k8s.io/bundle-version: v1.1.0
|
||||||
gateway.networking.k8s.io/channel: standard
|
gateway.networking.k8s.io/channel: experimental
|
||||||
creationTimestamp: null
|
creationTimestamp: null
|
||||||
name: gatewayclasses.gateway.networking.k8s.io
|
name: gatewayclasses.gateway.networking.k8s.io
|
||||||
spec:
|
spec:
|
||||||
@ -56,6 +57,7 @@ spec:
|
|||||||
GatewayClass describes a class of Gateways available to the user for creating
|
GatewayClass describes a class of Gateways available to the user for creating
|
||||||
Gateway resources.
|
Gateway resources.
|
||||||
|
|
||||||
|
|
||||||
It is recommended that this resource be used as a template for Gateways. This
|
It is recommended that this resource be used as a template for Gateways. This
|
||||||
means that a Gateway is based on the state of the GatewayClass at the time it
|
means that a Gateway is based on the state of the GatewayClass at the time it
|
||||||
was created and changes to the GatewayClass or associated parameters are not
|
was created and changes to the GatewayClass or associated parameters are not
|
||||||
@ -64,11 +66,13 @@ spec:
|
|||||||
If implementations choose to propagate GatewayClass changes to existing
|
If implementations choose to propagate GatewayClass changes to existing
|
||||||
Gateways, that MUST be clearly documented by the implementation.
|
Gateways, that MUST be clearly documented by the implementation.
|
||||||
|
|
||||||
|
|
||||||
Whenever one or more Gateways are using a GatewayClass, implementations SHOULD
|
Whenever one or more Gateways are using a GatewayClass, implementations SHOULD
|
||||||
add the `gateway-exists-finalizer.gateway.networking.k8s.io` finalizer on the
|
add the `gateway-exists-finalizer.gateway.networking.k8s.io` finalizer on the
|
||||||
associated GatewayClass. This ensures that a GatewayClass associated with a
|
associated GatewayClass. This ensures that a GatewayClass associated with a
|
||||||
Gateway is not deleted while in use.
|
Gateway is not deleted while in use.
|
||||||
|
|
||||||
|
|
||||||
GatewayClass is a Cluster level resource.
|
GatewayClass is a Cluster level resource.
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
@ -96,10 +100,13 @@ spec:
|
|||||||
ControllerName is the name of the controller that is managing Gateways of
|
ControllerName is the name of the controller that is managing Gateways of
|
||||||
this class. The value of this field MUST be a domain prefixed path.
|
this class. The value of this field MUST be a domain prefixed path.
|
||||||
|
|
||||||
|
|
||||||
Example: "example.net/gateway-controller".
|
Example: "example.net/gateway-controller".
|
||||||
|
|
||||||
|
|
||||||
This field is not mutable and cannot be empty.
|
This field is not mutable and cannot be empty.
|
||||||
|
|
||||||
|
|
||||||
Support: Core
|
Support: Core
|
||||||
maxLength: 253
|
maxLength: 253
|
||||||
minLength: 1
|
minLength: 1
|
||||||
@ -118,19 +125,21 @@ spec:
|
|||||||
parameters corresponding to the GatewayClass. This is optional if the
|
parameters corresponding to the GatewayClass. This is optional if the
|
||||||
controller does not require any additional configuration.
|
controller does not require any additional configuration.
|
||||||
|
|
||||||
|
|
||||||
ParametersRef can reference a standard Kubernetes resource, i.e. ConfigMap,
|
ParametersRef can reference a standard Kubernetes resource, i.e. ConfigMap,
|
||||||
or an implementation-specific custom resource. The resource can be
|
or an implementation-specific custom resource. The resource can be
|
||||||
cluster-scoped or namespace-scoped.
|
cluster-scoped or namespace-scoped.
|
||||||
|
|
||||||
If the referent cannot be found, refers to an unsupported kind, or when
|
|
||||||
the data within that resource is malformed, the GatewayClass SHOULD be
|
If the referent cannot be found, the GatewayClass's "InvalidParameters"
|
||||||
rejected with the "Accepted" status condition set to "False" and an
|
status condition will be true.
|
||||||
"InvalidParameters" reason.
|
|
||||||
|
|
||||||
A Gateway for this GatewayClass may provide its own `parametersRef`. When both are specified,
|
A Gateway for this GatewayClass may provide its own `parametersRef`. When both are specified,
|
||||||
the merging behavior is implementation specific.
|
the merging behavior is implementation specific.
|
||||||
It is generally recommended that GatewayClass provides defaults that can be overridden by a Gateway.
|
It is generally recommended that GatewayClass provides defaults that can be overridden by a Gateway.
|
||||||
|
|
||||||
|
|
||||||
Support: Implementation-specific
|
Support: Implementation-specific
|
||||||
properties:
|
properties:
|
||||||
group:
|
group:
|
||||||
@ -171,12 +180,13 @@ spec:
|
|||||||
conditions:
|
conditions:
|
||||||
- lastTransitionTime: "1970-01-01T00:00:00Z"
|
- lastTransitionTime: "1970-01-01T00:00:00Z"
|
||||||
message: Waiting for controller
|
message: Waiting for controller
|
||||||
reason: Pending
|
reason: Waiting
|
||||||
status: Unknown
|
status: Unknown
|
||||||
type: Accepted
|
type: Accepted
|
||||||
description: |-
|
description: |-
|
||||||
Status defines the current state of GatewayClass.
|
Status defines the current state of GatewayClass.
|
||||||
|
|
||||||
|
|
||||||
Implementations MUST populate status on all GatewayClass resources which
|
Implementations MUST populate status on all GatewayClass resources which
|
||||||
specify their controller name.
|
specify their controller name.
|
||||||
properties:
|
properties:
|
||||||
@ -191,11 +201,20 @@ spec:
|
|||||||
Conditions is the current status from the controller for
|
Conditions is the current status from the controller for
|
||||||
this GatewayClass.
|
this GatewayClass.
|
||||||
|
|
||||||
|
|
||||||
Controllers should prefer to publish conditions using values
|
Controllers should prefer to publish conditions using values
|
||||||
of GatewayClassConditionType for the type of each Condition.
|
of GatewayClassConditionType for the type of each Condition.
|
||||||
items:
|
items:
|
||||||
description: Condition contains details for one aspect of the current
|
description: "Condition contains details for one aspect of the current
|
||||||
state of this API Resource.
|
state of this API Resource.\n---\nThis struct is intended for
|
||||||
|
direct use as an array at the field path .status.conditions. For
|
||||||
|
example,\n\n\n\ttype FooStatus struct{\n\t // Represents the
|
||||||
|
observations of a foo's current state.\n\t // Known .status.conditions.type
|
||||||
|
are: \"Available\", \"Progressing\", and \"Degraded\"\n\t //
|
||||||
|
+patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t
|
||||||
|
\ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\"
|
||||||
|
patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t
|
||||||
|
\ // other fields\n\t}"
|
||||||
properties:
|
properties:
|
||||||
lastTransitionTime:
|
lastTransitionTime:
|
||||||
description: |-
|
description: |-
|
||||||
@ -236,7 +255,12 @@ spec:
|
|||||||
- Unknown
|
- Unknown
|
||||||
type: string
|
type: string
|
||||||
type:
|
type:
|
||||||
description: type of condition in CamelCase or in foo.example.com/CamelCase.
|
description: |-
|
||||||
|
type of condition in CamelCase or in foo.example.com/CamelCase.
|
||||||
|
---
|
||||||
|
Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
|
||||||
|
useful (see .node.status.conditions), the ability to deconflict is important.
|
||||||
|
The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
|
||||||
maxLength: 316
|
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])$
|
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
|
type: string
|
||||||
@ -252,6 +276,18 @@ spec:
|
|||||||
x-kubernetes-list-map-keys:
|
x-kubernetes-list-map-keys:
|
||||||
- type
|
- type
|
||||||
x-kubernetes-list-type: map
|
x-kubernetes-list-type: map
|
||||||
|
supportedFeatures:
|
||||||
|
description: |
|
||||||
|
SupportedFeatures is the set of features the GatewayClass support.
|
||||||
|
It MUST be sorted in ascending alphabetical order.
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
SupportedFeature is used to describe distinct features that are covered by
|
||||||
|
conformance tests.
|
||||||
|
type: string
|
||||||
|
maxItems: 64
|
||||||
|
type: array
|
||||||
|
x-kubernetes-list-type: set
|
||||||
type: object
|
type: object
|
||||||
required:
|
required:
|
||||||
- spec
|
- spec
|
||||||
@ -281,6 +317,7 @@ spec:
|
|||||||
GatewayClass describes a class of Gateways available to the user for creating
|
GatewayClass describes a class of Gateways available to the user for creating
|
||||||
Gateway resources.
|
Gateway resources.
|
||||||
|
|
||||||
|
|
||||||
It is recommended that this resource be used as a template for Gateways. This
|
It is recommended that this resource be used as a template for Gateways. This
|
||||||
means that a Gateway is based on the state of the GatewayClass at the time it
|
means that a Gateway is based on the state of the GatewayClass at the time it
|
||||||
was created and changes to the GatewayClass or associated parameters are not
|
was created and changes to the GatewayClass or associated parameters are not
|
||||||
@ -289,11 +326,13 @@ spec:
|
|||||||
If implementations choose to propagate GatewayClass changes to existing
|
If implementations choose to propagate GatewayClass changes to existing
|
||||||
Gateways, that MUST be clearly documented by the implementation.
|
Gateways, that MUST be clearly documented by the implementation.
|
||||||
|
|
||||||
|
|
||||||
Whenever one or more Gateways are using a GatewayClass, implementations SHOULD
|
Whenever one or more Gateways are using a GatewayClass, implementations SHOULD
|
||||||
add the `gateway-exists-finalizer.gateway.networking.k8s.io` finalizer on the
|
add the `gateway-exists-finalizer.gateway.networking.k8s.io` finalizer on the
|
||||||
associated GatewayClass. This ensures that a GatewayClass associated with a
|
associated GatewayClass. This ensures that a GatewayClass associated with a
|
||||||
Gateway is not deleted while in use.
|
Gateway is not deleted while in use.
|
||||||
|
|
||||||
|
|
||||||
GatewayClass is a Cluster level resource.
|
GatewayClass is a Cluster level resource.
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
@ -321,10 +360,13 @@ spec:
|
|||||||
ControllerName is the name of the controller that is managing Gateways of
|
ControllerName is the name of the controller that is managing Gateways of
|
||||||
this class. The value of this field MUST be a domain prefixed path.
|
this class. The value of this field MUST be a domain prefixed path.
|
||||||
|
|
||||||
|
|
||||||
Example: "example.net/gateway-controller".
|
Example: "example.net/gateway-controller".
|
||||||
|
|
||||||
|
|
||||||
This field is not mutable and cannot be empty.
|
This field is not mutable and cannot be empty.
|
||||||
|
|
||||||
|
|
||||||
Support: Core
|
Support: Core
|
||||||
maxLength: 253
|
maxLength: 253
|
||||||
minLength: 1
|
minLength: 1
|
||||||
@ -343,19 +385,21 @@ spec:
|
|||||||
parameters corresponding to the GatewayClass. This is optional if the
|
parameters corresponding to the GatewayClass. This is optional if the
|
||||||
controller does not require any additional configuration.
|
controller does not require any additional configuration.
|
||||||
|
|
||||||
|
|
||||||
ParametersRef can reference a standard Kubernetes resource, i.e. ConfigMap,
|
ParametersRef can reference a standard Kubernetes resource, i.e. ConfigMap,
|
||||||
or an implementation-specific custom resource. The resource can be
|
or an implementation-specific custom resource. The resource can be
|
||||||
cluster-scoped or namespace-scoped.
|
cluster-scoped or namespace-scoped.
|
||||||
|
|
||||||
If the referent cannot be found, refers to an unsupported kind, or when
|
|
||||||
the data within that resource is malformed, the GatewayClass SHOULD be
|
If the referent cannot be found, the GatewayClass's "InvalidParameters"
|
||||||
rejected with the "Accepted" status condition set to "False" and an
|
status condition will be true.
|
||||||
"InvalidParameters" reason.
|
|
||||||
|
|
||||||
A Gateway for this GatewayClass may provide its own `parametersRef`. When both are specified,
|
A Gateway for this GatewayClass may provide its own `parametersRef`. When both are specified,
|
||||||
the merging behavior is implementation specific.
|
the merging behavior is implementation specific.
|
||||||
It is generally recommended that GatewayClass provides defaults that can be overridden by a Gateway.
|
It is generally recommended that GatewayClass provides defaults that can be overridden by a Gateway.
|
||||||
|
|
||||||
|
|
||||||
Support: Implementation-specific
|
Support: Implementation-specific
|
||||||
properties:
|
properties:
|
||||||
group:
|
group:
|
||||||
@ -396,12 +440,13 @@ spec:
|
|||||||
conditions:
|
conditions:
|
||||||
- lastTransitionTime: "1970-01-01T00:00:00Z"
|
- lastTransitionTime: "1970-01-01T00:00:00Z"
|
||||||
message: Waiting for controller
|
message: Waiting for controller
|
||||||
reason: Pending
|
reason: Waiting
|
||||||
status: Unknown
|
status: Unknown
|
||||||
type: Accepted
|
type: Accepted
|
||||||
description: |-
|
description: |-
|
||||||
Status defines the current state of GatewayClass.
|
Status defines the current state of GatewayClass.
|
||||||
|
|
||||||
|
|
||||||
Implementations MUST populate status on all GatewayClass resources which
|
Implementations MUST populate status on all GatewayClass resources which
|
||||||
specify their controller name.
|
specify their controller name.
|
||||||
properties:
|
properties:
|
||||||
@ -416,11 +461,20 @@ spec:
|
|||||||
Conditions is the current status from the controller for
|
Conditions is the current status from the controller for
|
||||||
this GatewayClass.
|
this GatewayClass.
|
||||||
|
|
||||||
|
|
||||||
Controllers should prefer to publish conditions using values
|
Controllers should prefer to publish conditions using values
|
||||||
of GatewayClassConditionType for the type of each Condition.
|
of GatewayClassConditionType for the type of each Condition.
|
||||||
items:
|
items:
|
||||||
description: Condition contains details for one aspect of the current
|
description: "Condition contains details for one aspect of the current
|
||||||
state of this API Resource.
|
state of this API Resource.\n---\nThis struct is intended for
|
||||||
|
direct use as an array at the field path .status.conditions. For
|
||||||
|
example,\n\n\n\ttype FooStatus struct{\n\t // Represents the
|
||||||
|
observations of a foo's current state.\n\t // Known .status.conditions.type
|
||||||
|
are: \"Available\", \"Progressing\", and \"Degraded\"\n\t //
|
||||||
|
+patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t
|
||||||
|
\ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\"
|
||||||
|
patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t
|
||||||
|
\ // other fields\n\t}"
|
||||||
properties:
|
properties:
|
||||||
lastTransitionTime:
|
lastTransitionTime:
|
||||||
description: |-
|
description: |-
|
||||||
@ -461,7 +515,12 @@ spec:
|
|||||||
- Unknown
|
- Unknown
|
||||||
type: string
|
type: string
|
||||||
type:
|
type:
|
||||||
description: type of condition in CamelCase or in foo.example.com/CamelCase.
|
description: |-
|
||||||
|
type of condition in CamelCase or in foo.example.com/CamelCase.
|
||||||
|
---
|
||||||
|
Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
|
||||||
|
useful (see .node.status.conditions), the ability to deconflict is important.
|
||||||
|
The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
|
||||||
maxLength: 316
|
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])$
|
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
|
type: string
|
||||||
@ -477,6 +536,18 @@ spec:
|
|||||||
x-kubernetes-list-map-keys:
|
x-kubernetes-list-map-keys:
|
||||||
- type
|
- type
|
||||||
x-kubernetes-list-type: map
|
x-kubernetes-list-type: map
|
||||||
|
supportedFeatures:
|
||||||
|
description: |
|
||||||
|
SupportedFeatures is the set of features the GatewayClass support.
|
||||||
|
It MUST be sorted in ascending alphabetical order.
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
SupportedFeature is used to describe distinct features that are covered by
|
||||||
|
conformance tests.
|
||||||
|
type: string
|
||||||
|
maxItems: 64
|
||||||
|
type: array
|
||||||
|
x-kubernetes-list-type: set
|
||||||
type: object
|
type: object
|
||||||
required:
|
required:
|
||||||
- spec
|
- spec
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
|||||||
{{/*
|
{{/*
|
||||||
Vendored from kubernetes-sigs/gateway-api {{ index .Chart.Annotations "catalyst.openova.io/upstream-gateway-api-version" }}
|
Vendored from kubernetes-sigs/gateway-api {{ index .Chart.Annotations "catalyst.openova.io/upstream-gateway-api-version" }}
|
||||||
standard-install.yaml. Do NOT hand-edit annotations / spec — re-vendor
|
experimental-install.yaml. Do NOT hand-edit annotations / spec — re-vendor
|
||||||
via the script in tests/regenerate.sh when bumping the upstream version
|
via the script in tests/regenerate.sh when bumping the upstream version
|
||||||
(also bump catalyst.openova.io/upstream-gateway-api-version in Chart.yaml).
|
(also bump catalyst.openova.io/upstream-gateway-api-version in Chart.yaml).
|
||||||
|
|
||||||
@ -9,17 +9,18 @@
|
|||||||
cluster-scoped infrastructure; deleting them on uninstall would break
|
cluster-scoped infrastructure; deleting them on uninstall would break
|
||||||
every HTTPRoute on the cluster simultaneously.
|
every HTTPRoute on the cluster simultaneously.
|
||||||
*/}}
|
*/}}
|
||||||
|
|
||||||
#
|
#
|
||||||
# config/crd/standard/gateway.networking.k8s.io_referencegrants.yaml
|
# config/crd/experimental/gateway.networking.k8s.io_referencegrants.yaml
|
||||||
#
|
#
|
||||||
apiVersion: apiextensions.k8s.io/v1
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
helm.sh/resource-policy: keep
|
helm.sh/resource-policy: keep
|
||||||
api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/3328
|
api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/2997
|
||||||
gateway.networking.k8s.io/bundle-version: v1.2.0
|
gateway.networking.k8s.io/bundle-version: v1.1.0
|
||||||
gateway.networking.k8s.io/channel: standard
|
gateway.networking.k8s.io/channel: experimental
|
||||||
creationTimestamp: null
|
creationTimestamp: null
|
||||||
name: referencegrants.gateway.networking.k8s.io
|
name: referencegrants.gateway.networking.k8s.io
|
||||||
spec:
|
spec:
|
||||||
@ -39,7 +40,10 @@ spec:
|
|||||||
- jsonPath: .metadata.creationTimestamp
|
- jsonPath: .metadata.creationTimestamp
|
||||||
name: Age
|
name: Age
|
||||||
type: date
|
type: date
|
||||||
name: v1beta1
|
deprecated: true
|
||||||
|
deprecationWarning: The v1alpha2 version of ReferenceGrant has been deprecated
|
||||||
|
and will be removed in a future release of the API. Please upgrade to v1beta1.
|
||||||
|
name: v1alpha2
|
||||||
schema:
|
schema:
|
||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: |-
|
description: |-
|
||||||
@ -47,12 +51,19 @@ spec:
|
|||||||
trusted to reference the specified kinds of resources in the same namespace
|
trusted to reference the specified kinds of resources in the same namespace
|
||||||
as the policy.
|
as the policy.
|
||||||
|
|
||||||
|
|
||||||
Each ReferenceGrant can be used to represent a unique trust relationship.
|
Each ReferenceGrant can be used to represent a unique trust relationship.
|
||||||
Additional Reference Grants can be used to add to the set of trusted
|
Additional Reference Grants can be used to add to the set of trusted
|
||||||
sources of inbound references for the namespace they are defined within.
|
sources of inbound references for the namespace they are defined within.
|
||||||
|
|
||||||
All cross-namespace references in Gateway API (with the exception of cross-namespace
|
|
||||||
Gateway-route attachment) require a ReferenceGrant.
|
A ReferenceGrant is required for all cross-namespace references in Gateway API
|
||||||
|
(with the exception of cross-namespace Route-Gateway attachment, which is
|
||||||
|
governed by the AllowedRoutes configuration on the Gateway, and cross-namespace
|
||||||
|
Service ParentRefs on a "consumer" mesh Route, which defines routing rules
|
||||||
|
applicable only to workloads in the Route namespace). ReferenceGrants allowing
|
||||||
|
a reference from a Route to a Service are only applicable to BackendRefs.
|
||||||
|
|
||||||
|
|
||||||
ReferenceGrant is a form of runtime verification allowing users to assert
|
ReferenceGrant is a form of runtime verification allowing users to assert
|
||||||
which cross-namespace object references are permitted. Implementations that
|
which cross-namespace object references are permitted. Implementations that
|
||||||
@ -87,6 +98,7 @@ spec:
|
|||||||
to be an additional place that references can be valid from, or to put
|
to be an additional place that references can be valid from, or to put
|
||||||
this another way, entries MUST be combined using OR.
|
this another way, entries MUST be combined using OR.
|
||||||
|
|
||||||
|
|
||||||
Support: Core
|
Support: Core
|
||||||
items:
|
items:
|
||||||
description: ReferenceGrantFrom describes trusted namespaces and
|
description: ReferenceGrantFrom describes trusted namespaces and
|
||||||
@ -97,6 +109,7 @@ spec:
|
|||||||
Group is the group of the referent.
|
Group is the group of the referent.
|
||||||
When empty, the Kubernetes core API group is inferred.
|
When empty, the Kubernetes core API group is inferred.
|
||||||
|
|
||||||
|
|
||||||
Support: Core
|
Support: Core
|
||||||
maxLength: 253
|
maxLength: 253
|
||||||
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
||||||
@ -107,12 +120,16 @@ spec:
|
|||||||
additional resources, the following types are part of the "Core"
|
additional resources, the following types are part of the "Core"
|
||||||
support level for this field.
|
support level for this field.
|
||||||
|
|
||||||
|
|
||||||
When used to permit a SecretObjectReference:
|
When used to permit a SecretObjectReference:
|
||||||
|
|
||||||
|
|
||||||
* Gateway
|
* Gateway
|
||||||
|
|
||||||
|
|
||||||
When used to permit a BackendObjectReference:
|
When used to permit a BackendObjectReference:
|
||||||
|
|
||||||
|
|
||||||
* GRPCRoute
|
* GRPCRoute
|
||||||
* HTTPRoute
|
* HTTPRoute
|
||||||
* TCPRoute
|
* TCPRoute
|
||||||
@ -126,6 +143,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Namespace is the namespace of the referent.
|
Namespace is the namespace of the referent.
|
||||||
|
|
||||||
|
|
||||||
Support: Core
|
Support: Core
|
||||||
maxLength: 63
|
maxLength: 63
|
||||||
minLength: 1
|
minLength: 1
|
||||||
@ -146,6 +164,7 @@ spec:
|
|||||||
additional place that references can be valid to, or to put this another
|
additional place that references can be valid to, or to put this another
|
||||||
way, entries MUST be combined using OR.
|
way, entries MUST be combined using OR.
|
||||||
|
|
||||||
|
|
||||||
Support: Core
|
Support: Core
|
||||||
items:
|
items:
|
||||||
description: |-
|
description: |-
|
||||||
@ -157,6 +176,7 @@ spec:
|
|||||||
Group is the group of the referent.
|
Group is the group of the referent.
|
||||||
When empty, the Kubernetes core API group is inferred.
|
When empty, the Kubernetes core API group is inferred.
|
||||||
|
|
||||||
|
|
||||||
Support: Core
|
Support: Core
|
||||||
maxLength: 253
|
maxLength: 253
|
||||||
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
||||||
@ -167,6 +187,181 @@ spec:
|
|||||||
additional resources, the following types are part of the "Core"
|
additional resources, the following types are part of the "Core"
|
||||||
support level for this field:
|
support level for this field:
|
||||||
|
|
||||||
|
|
||||||
|
* Secret when used to permit a SecretObjectReference
|
||||||
|
* Service when used to permit a BackendObjectReference
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name is the name of the referent. When unspecified, this policy
|
||||||
|
refers to all resources of the specified Group and Kind in the local
|
||||||
|
namespace.
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- group
|
||||||
|
- kind
|
||||||
|
type: object
|
||||||
|
maxItems: 16
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- from
|
||||||
|
- to
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: false
|
||||||
|
subresources: {}
|
||||||
|
- additionalPrinterColumns:
|
||||||
|
- jsonPath: .metadata.creationTimestamp
|
||||||
|
name: Age
|
||||||
|
type: date
|
||||||
|
name: v1beta1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
ReferenceGrant identifies kinds of resources in other namespaces that are
|
||||||
|
trusted to reference the specified kinds of resources in the same namespace
|
||||||
|
as the policy.
|
||||||
|
|
||||||
|
|
||||||
|
Each ReferenceGrant can be used to represent a unique trust relationship.
|
||||||
|
Additional Reference Grants can be used to add to the set of trusted
|
||||||
|
sources of inbound references for the namespace they are defined within.
|
||||||
|
|
||||||
|
|
||||||
|
All cross-namespace references in Gateway API (with the exception of cross-namespace
|
||||||
|
Gateway-route attachment) require a ReferenceGrant.
|
||||||
|
|
||||||
|
|
||||||
|
ReferenceGrant is a form of runtime verification allowing users to assert
|
||||||
|
which cross-namespace object references are permitted. Implementations that
|
||||||
|
support ReferenceGrant MUST NOT permit cross-namespace references which have
|
||||||
|
no grant, and MUST respond to the removal of a grant by revoking the access
|
||||||
|
that the grant allowed.
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: |-
|
||||||
|
APIVersion defines the versioned schema of this representation of an object.
|
||||||
|
Servers should convert recognized schemas to the latest internal value, and
|
||||||
|
may reject unrecognized values.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: |-
|
||||||
|
Kind is a string value representing the REST resource this object represents.
|
||||||
|
Servers may infer this from the endpoint the client submits requests to.
|
||||||
|
Cannot be updated.
|
||||||
|
In CamelCase.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||||
|
type: string
|
||||||
|
metadata:
|
||||||
|
type: object
|
||||||
|
spec:
|
||||||
|
description: Spec defines the desired state of ReferenceGrant.
|
||||||
|
properties:
|
||||||
|
from:
|
||||||
|
description: |-
|
||||||
|
From describes the trusted namespaces and kinds that can reference the
|
||||||
|
resources described in "To". Each entry in this list MUST be considered
|
||||||
|
to be an additional place that references can be valid from, or to put
|
||||||
|
this another way, entries MUST be combined using OR.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
items:
|
||||||
|
description: ReferenceGrantFrom describes trusted namespaces and
|
||||||
|
kinds.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
description: |-
|
||||||
|
Group is the group of the referent.
|
||||||
|
When empty, the Kubernetes core API group is inferred.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 253
|
||||||
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: |-
|
||||||
|
Kind is the kind of the referent. Although implementations may support
|
||||||
|
additional resources, the following types are part of the "Core"
|
||||||
|
support level for this field.
|
||||||
|
|
||||||
|
|
||||||
|
When used to permit a SecretObjectReference:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway
|
||||||
|
|
||||||
|
|
||||||
|
When used to permit a BackendObjectReference:
|
||||||
|
|
||||||
|
|
||||||
|
* GRPCRoute
|
||||||
|
* HTTPRoute
|
||||||
|
* TCPRoute
|
||||||
|
* TLSRoute
|
||||||
|
* UDPRoute
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace is the namespace of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- group
|
||||||
|
- kind
|
||||||
|
- namespace
|
||||||
|
type: object
|
||||||
|
maxItems: 16
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
to:
|
||||||
|
description: |-
|
||||||
|
To describes the resources that may be referenced by the resources
|
||||||
|
described in "From". Each entry in this list MUST be considered to be an
|
||||||
|
additional place that references can be valid to, or to put this another
|
||||||
|
way, entries MUST be combined using OR.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
ReferenceGrantTo describes what Kinds are allowed as targets of the
|
||||||
|
references.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
description: |-
|
||||||
|
Group is the group of the referent.
|
||||||
|
When empty, the Kubernetes core API group is inferred.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 253
|
||||||
|
pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: |-
|
||||||
|
Kind is the kind of the referent. Although implementations may support
|
||||||
|
additional resources, the following types are part of the "Core"
|
||||||
|
support level for this field:
|
||||||
|
|
||||||
|
|
||||||
* Secret when used to permit a SecretObjectReference
|
* Secret when used to permit a SecretObjectReference
|
||||||
* Service when used to permit a BackendObjectReference
|
* Service when used to permit a BackendObjectReference
|
||||||
maxLength: 63
|
maxLength: 63
|
||||||
|
|||||||
837
platform/gateway-api/chart/templates/tcproutes.yaml
Normal file
837
platform/gateway-api/chart/templates/tcproutes.yaml
Normal file
@ -0,0 +1,837 @@
|
|||||||
|
{{/*
|
||||||
|
Vendored from kubernetes-sigs/gateway-api {{ index .Chart.Annotations "catalyst.openova.io/upstream-gateway-api-version" }}
|
||||||
|
experimental-install.yaml. Do NOT hand-edit annotations / spec — re-vendor
|
||||||
|
via the script in tests/regenerate.sh when bumping the upstream version
|
||||||
|
(also bump catalyst.openova.io/upstream-gateway-api-version in Chart.yaml).
|
||||||
|
|
||||||
|
helm.sh/resource-policy: keep is added under metadata.annotations so a
|
||||||
|
Helm uninstall does NOT delete the CRD. Gateway API CRDs are foundational
|
||||||
|
cluster-scoped infrastructure; deleting them on uninstall would break
|
||||||
|
every HTTPRoute on the cluster simultaneously.
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
#
|
||||||
|
# config/crd/experimental/gateway.networking.k8s.io_tcproutes.yaml
|
||||||
|
#
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
helm.sh/resource-policy: keep
|
||||||
|
api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/2997
|
||||||
|
gateway.networking.k8s.io/bundle-version: v1.1.0
|
||||||
|
gateway.networking.k8s.io/channel: experimental
|
||||||
|
creationTimestamp: null
|
||||||
|
name: tcproutes.gateway.networking.k8s.io
|
||||||
|
spec:
|
||||||
|
group: gateway.networking.k8s.io
|
||||||
|
names:
|
||||||
|
categories:
|
||||||
|
- gateway-api
|
||||||
|
kind: TCPRoute
|
||||||
|
listKind: TCPRouteList
|
||||||
|
plural: tcproutes
|
||||||
|
singular: tcproute
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- additionalPrinterColumns:
|
||||||
|
- jsonPath: .metadata.creationTimestamp
|
||||||
|
name: Age
|
||||||
|
type: date
|
||||||
|
name: v1alpha2
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
TCPRoute provides a way to route TCP requests. When combined with a Gateway
|
||||||
|
listener, it can be used to forward connections on the port specified by the
|
||||||
|
listener to a set of backends specified by the TCPRoute.
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: |-
|
||||||
|
APIVersion defines the versioned schema of this representation of an object.
|
||||||
|
Servers should convert recognized schemas to the latest internal value, and
|
||||||
|
may reject unrecognized values.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: |-
|
||||||
|
Kind is a string value representing the REST resource this object represents.
|
||||||
|
Servers may infer this from the endpoint the client submits requests to.
|
||||||
|
Cannot be updated.
|
||||||
|
In CamelCase.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||||
|
type: string
|
||||||
|
metadata:
|
||||||
|
type: object
|
||||||
|
spec:
|
||||||
|
description: Spec defines the desired state of TCPRoute.
|
||||||
|
properties:
|
||||||
|
parentRefs:
|
||||||
|
description: |+
|
||||||
|
ParentRefs references the resources (usually Gateways) that a Route wants
|
||||||
|
to be attached to. Note that the referenced parent resource needs to
|
||||||
|
allow this for the attachment to be complete. For Gateways, that means
|
||||||
|
the Gateway needs to allow attachment from Routes of this kind and
|
||||||
|
namespace. For Services, that means the Service must either be in the same
|
||||||
|
namespace for a "producer" route, or the mesh implementation must support
|
||||||
|
and allow "consumer" routes for the referenced Service. ReferenceGrant is
|
||||||
|
not applicable for governing ParentRefs to Services - it is not possible to
|
||||||
|
create a "producer" route for a Service in a different namespace from the
|
||||||
|
Route.
|
||||||
|
|
||||||
|
|
||||||
|
There are two kinds of parent resources with "Core" support:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway (Gateway conformance profile)
|
||||||
|
* Service (Mesh conformance profile, ClusterIP Services only)
|
||||||
|
|
||||||
|
|
||||||
|
This API may be extended in the future to support additional kinds of parent
|
||||||
|
resources.
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs must be _distinct_. This means either that:
|
||||||
|
|
||||||
|
|
||||||
|
* They select different objects. If this is the case, then parentRef
|
||||||
|
entries are distinct. In terms of fields, this means that the
|
||||||
|
multi-part key defined by `group`, `kind`, `namespace`, and `name` must
|
||||||
|
be unique across all parentRef entries in the Route.
|
||||||
|
* They do not select different objects, but for each optional field used,
|
||||||
|
each ParentRef that selects the same object must set the same set of
|
||||||
|
optional fields to different values. If one ParentRef sets a
|
||||||
|
combination of optional fields, all must set the same combination.
|
||||||
|
|
||||||
|
|
||||||
|
Some examples:
|
||||||
|
|
||||||
|
|
||||||
|
* If one ParentRef sets `sectionName`, all ParentRefs referencing the
|
||||||
|
same object must also set `sectionName`.
|
||||||
|
* If one ParentRef sets `port`, all ParentRefs referencing the same
|
||||||
|
object must also set `port`.
|
||||||
|
* If one ParentRef sets `sectionName` and `port`, all ParentRefs
|
||||||
|
referencing the same object must also set `sectionName` and `port`.
|
||||||
|
|
||||||
|
|
||||||
|
It is possible to separately reference multiple distinct objects that may
|
||||||
|
be collapsed by an implementation. For example, some implementations may
|
||||||
|
choose to merge compatible Gateway Listeners together. If that is the
|
||||||
|
case, the list of routes attached to those resources should also be
|
||||||
|
merged.
|
||||||
|
|
||||||
|
|
||||||
|
Note that for ParentRefs that cross namespace boundaries, there are specific
|
||||||
|
rules. Cross-namespace references are only valid if they are explicitly
|
||||||
|
allowed by something in the namespace they are referring to. For example,
|
||||||
|
Gateway has the AllowedRoutes field, and ReferenceGrant provides a
|
||||||
|
generic way to enable other kinds of cross-namespace reference.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in the same namespace are "producer"
|
||||||
|
routes, which apply default routing rules to inbound connections from
|
||||||
|
any namespace to the Service.
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in a different namespace are
|
||||||
|
"consumer" routes, and these routing rules are only applied to outbound
|
||||||
|
connections originating from the same namespace as the Route, for which
|
||||||
|
the intended destination of the connections are a Service targeted as a
|
||||||
|
ParentRef of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
ParentReference identifies an API object (usually a Gateway) that can be considered
|
||||||
|
a parent of this resource (usually a route). There are two kinds of parent resources
|
||||||
|
with "Core" support:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway (Gateway conformance profile)
|
||||||
|
* Service (Mesh conformance profile, ClusterIP Services only)
|
||||||
|
|
||||||
|
|
||||||
|
This API may be extended in the future to support additional kinds of parent
|
||||||
|
resources.
|
||||||
|
|
||||||
|
|
||||||
|
The API object must be valid in the cluster; the Group and Kind must
|
||||||
|
be registered in the cluster for this reference to be valid.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
default: gateway.networking.k8s.io
|
||||||
|
description: |-
|
||||||
|
Group is the group of the referent.
|
||||||
|
When unspecified, "gateway.networking.k8s.io" is inferred.
|
||||||
|
To set the core API group (such as for a "Service" kind referent),
|
||||||
|
Group must be explicitly set to "" (empty string).
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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: Gateway
|
||||||
|
description: |-
|
||||||
|
Kind is kind of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
There are two kinds of parent resources with "Core" support:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway (Gateway conformance profile)
|
||||||
|
* Service (Mesh conformance profile, ClusterIP Services only)
|
||||||
|
|
||||||
|
|
||||||
|
Support for other resources is Implementation-Specific.
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name is the name of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace is the namespace of the referent. When unspecified, this refers
|
||||||
|
to the local namespace of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
Note that there are specific rules for ParentRefs which cross namespace
|
||||||
|
boundaries. Cross-namespace references are only valid if they are explicitly
|
||||||
|
allowed by something in the namespace they are referring to. For example:
|
||||||
|
Gateway has the AllowedRoutes field, and ReferenceGrant provides a
|
||||||
|
generic way to enable any other kind of cross-namespace reference.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in the same namespace are "producer"
|
||||||
|
routes, which apply default routing rules to inbound connections from
|
||||||
|
any namespace to the Service.
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in a different namespace are
|
||||||
|
"consumer" routes, and these routing rules are only applied to outbound
|
||||||
|
connections originating from the same namespace as the Route, for which
|
||||||
|
the intended destination of the connections are a Service targeted as a
|
||||||
|
ParentRef of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: |-
|
||||||
|
Port is the network port this Route targets. It can be interpreted
|
||||||
|
differently based on the type of parent resource.
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Gateway, this targets all listeners
|
||||||
|
listening on the specified port that also support this kind of Route(and
|
||||||
|
select this Route). It's not recommended to set `Port` unless the
|
||||||
|
networking behaviors specified in a Route must apply to a specific port
|
||||||
|
as opposed to a listener(s) whose port(s) may be changed. When both Port
|
||||||
|
and SectionName are specified, the name and port of the selected listener
|
||||||
|
must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Service, this targets a specific port in the
|
||||||
|
Service spec. When both Port (experimental) and SectionName are specified,
|
||||||
|
the name and port of the selected port must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support other parent resources.
|
||||||
|
Implementations supporting other types of parent resources MUST clearly
|
||||||
|
document how/if Port is interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
For the purpose of status, an attachment is considered successful as
|
||||||
|
long as the parent resource accepts it partially. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment
|
||||||
|
from the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route,
|
||||||
|
the Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended
|
||||||
|
format: int32
|
||||||
|
maximum: 65535
|
||||||
|
minimum: 1
|
||||||
|
type: integer
|
||||||
|
sectionName:
|
||||||
|
description: |-
|
||||||
|
SectionName is the name of a section within the target resource. In the
|
||||||
|
following resources, SectionName is interpreted as the following:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway: Listener name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
* Service: Port name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support attaching Routes to other resources.
|
||||||
|
If that is the case, they MUST clearly document how SectionName is
|
||||||
|
interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
When unspecified (empty string), this will reference the entire resource.
|
||||||
|
For the purpose of status, an attachment is considered successful if at
|
||||||
|
least one section in the parent resource accepts it. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment from
|
||||||
|
the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route, the
|
||||||
|
Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
maxItems: 32
|
||||||
|
type: array
|
||||||
|
x-kubernetes-validations:
|
||||||
|
- message: sectionName or port must be specified when parentRefs includes
|
||||||
|
2 or more references to the same parent
|
||||||
|
rule: 'self.all(p1, self.all(p2, p1.group == p2.group && p1.kind
|
||||||
|
== p2.kind && p1.name == p2.name && (((!has(p1.__namespace__)
|
||||||
|
|| p1.__namespace__ == '''') && (!has(p2.__namespace__) || p2.__namespace__
|
||||||
|
== '''')) || (has(p1.__namespace__) && has(p2.__namespace__) &&
|
||||||
|
p1.__namespace__ == p2.__namespace__)) ? ((!has(p1.sectionName)
|
||||||
|
|| p1.sectionName == '''') == (!has(p2.sectionName) || p2.sectionName
|
||||||
|
== '''') && (!has(p1.port) || p1.port == 0) == (!has(p2.port)
|
||||||
|
|| p2.port == 0)): true))'
|
||||||
|
- message: sectionName or port must be unique when parentRefs includes
|
||||||
|
2 or more references to the same parent
|
||||||
|
rule: self.all(p1, self.exists_one(p2, p1.group == p2.group && p1.kind
|
||||||
|
== p2.kind && p1.name == p2.name && (((!has(p1.__namespace__)
|
||||||
|
|| p1.__namespace__ == '') && (!has(p2.__namespace__) || p2.__namespace__
|
||||||
|
== '')) || (has(p1.__namespace__) && has(p2.__namespace__) &&
|
||||||
|
p1.__namespace__ == p2.__namespace__ )) && (((!has(p1.sectionName)
|
||||||
|
|| p1.sectionName == '') && (!has(p2.sectionName) || p2.sectionName
|
||||||
|
== '')) || ( has(p1.sectionName) && has(p2.sectionName) && p1.sectionName
|
||||||
|
== p2.sectionName)) && (((!has(p1.port) || p1.port == 0) && (!has(p2.port)
|
||||||
|
|| p2.port == 0)) || (has(p1.port) && has(p2.port) && p1.port
|
||||||
|
== p2.port))))
|
||||||
|
rules:
|
||||||
|
description: Rules are a list of TCP matchers and actions.
|
||||||
|
items:
|
||||||
|
description: TCPRouteRule is the configuration for a given rule.
|
||||||
|
properties:
|
||||||
|
backendRefs:
|
||||||
|
description: |-
|
||||||
|
BackendRefs defines the backend(s) where matching requests should be
|
||||||
|
sent. If unspecified or invalid (refers to a non-existent resource or a
|
||||||
|
Service with no endpoints), the underlying implementation MUST actively
|
||||||
|
reject connection attempts to this backend. Connection rejections must
|
||||||
|
respect weight; if an invalid backend is requested to have 80% of
|
||||||
|
connections, then 80% of connections must be rejected instead.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core for Kubernetes Service
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended for Kubernetes ServiceImport
|
||||||
|
|
||||||
|
|
||||||
|
Support: Implementation-specific for any other resource
|
||||||
|
|
||||||
|
|
||||||
|
Support for weight: Extended
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
BackendRef defines how a Route should forward a request to a Kubernetes
|
||||||
|
resource.
|
||||||
|
|
||||||
|
|
||||||
|
Note that when a namespace different than the local namespace is specified, a
|
||||||
|
ReferenceGrant object is required in the referent namespace to allow that
|
||||||
|
namespace's owner to accept the reference. See the ReferenceGrant
|
||||||
|
documentation for details.
|
||||||
|
|
||||||
|
|
||||||
|
<gateway:experimental:description>
|
||||||
|
|
||||||
|
|
||||||
|
When the BackendRef points to a Kubernetes Service, implementations SHOULD
|
||||||
|
honor the appProtocol field if it is set for the target Service Port.
|
||||||
|
|
||||||
|
|
||||||
|
Implementations supporting appProtocol SHOULD recognize the Kubernetes
|
||||||
|
Standard Application Protocols defined in KEP-3726.
|
||||||
|
|
||||||
|
|
||||||
|
If a Service appProtocol isn't specified, an implementation MAY infer the
|
||||||
|
backend protocol through its own means. Implementations MAY infer the
|
||||||
|
protocol from the Route type referring to the backend Service.
|
||||||
|
|
||||||
|
|
||||||
|
If a Route is not able to send traffic to the backend using the specified
|
||||||
|
protocol then the backend is considered invalid. Implementations MUST set the
|
||||||
|
"ResolvedRefs" condition to "False" with the "UnsupportedProtocol" reason.
|
||||||
|
|
||||||
|
|
||||||
|
</gateway:experimental:description>
|
||||||
|
|
||||||
|
|
||||||
|
Note that when the BackendTLSPolicy object is enabled by the implementation,
|
||||||
|
there are some extra rules about validity to consider here. See the fields
|
||||||
|
where this struct is used for more information about the exact behavior.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
default: ""
|
||||||
|
description: |-
|
||||||
|
Group is the group of the referent. For example, "gateway.networking.k8s.io".
|
||||||
|
When unspecified or empty string, core API group is inferred.
|
||||||
|
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: Service
|
||||||
|
description: |-
|
||||||
|
Kind is the Kubernetes resource kind of the referent. For example
|
||||||
|
"Service".
|
||||||
|
|
||||||
|
|
||||||
|
Defaults to "Service" when not specified.
|
||||||
|
|
||||||
|
|
||||||
|
ExternalName services can refer to CNAME DNS records that may live
|
||||||
|
outside of the cluster and as such are difficult to reason about in
|
||||||
|
terms of conformance. They also may not be safe to forward to (see
|
||||||
|
CVE-2021-25740 for more information). Implementations SHOULD NOT
|
||||||
|
support ExternalName Services.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core (Services with a type other than ExternalName)
|
||||||
|
|
||||||
|
|
||||||
|
Support: Implementation-specific (Services with type ExternalName)
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: Name is the name of the referent.
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace is the namespace of the backend. When unspecified, the local
|
||||||
|
namespace is inferred.
|
||||||
|
|
||||||
|
|
||||||
|
Note that when a namespace different than the local namespace is specified,
|
||||||
|
a ReferenceGrant object is required in the referent namespace to allow that
|
||||||
|
namespace's owner to accept the reference. See the ReferenceGrant
|
||||||
|
documentation for details.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: |-
|
||||||
|
Port specifies the destination port number to use for this resource.
|
||||||
|
Port is required when the referent is a Kubernetes Service. In this
|
||||||
|
case, the port number is the service port number, not the target port.
|
||||||
|
For other resources, destination port might be derived from the referent
|
||||||
|
resource or this field.
|
||||||
|
format: int32
|
||||||
|
maximum: 65535
|
||||||
|
minimum: 1
|
||||||
|
type: integer
|
||||||
|
weight:
|
||||||
|
default: 1
|
||||||
|
description: |-
|
||||||
|
Weight specifies the proportion of requests forwarded to the referenced
|
||||||
|
backend. This is computed as weight/(sum of all weights in this
|
||||||
|
BackendRefs list). For non-zero values, there may be some epsilon from
|
||||||
|
the exact proportion defined here depending on the precision an
|
||||||
|
implementation supports. Weight is not a percentage and the sum of
|
||||||
|
weights does not need to equal 100.
|
||||||
|
|
||||||
|
|
||||||
|
If only one backend is specified and it has a weight greater than 0, 100%
|
||||||
|
of the traffic is forwarded to that backend. If weight is set to 0, no
|
||||||
|
traffic should be forwarded for this entry. If unspecified, weight
|
||||||
|
defaults to 1.
|
||||||
|
|
||||||
|
|
||||||
|
Support for this field varies based on the context where used.
|
||||||
|
format: int32
|
||||||
|
maximum: 1000000
|
||||||
|
minimum: 0
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
x-kubernetes-validations:
|
||||||
|
- message: Must have port for Service reference
|
||||||
|
rule: '(size(self.group) == 0 && self.kind == ''Service'')
|
||||||
|
? has(self.port) : true'
|
||||||
|
maxItems: 16
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
maxItems: 16
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- rules
|
||||||
|
type: object
|
||||||
|
status:
|
||||||
|
description: Status defines the current state of TCPRoute.
|
||||||
|
properties:
|
||||||
|
parents:
|
||||||
|
description: |-
|
||||||
|
Parents is a list of parent resources (usually Gateways) that are
|
||||||
|
associated with the route, and the status of the route with respect to
|
||||||
|
each parent. When this route attaches to a parent, the controller that
|
||||||
|
manages the parent must add an entry to this list when the controller
|
||||||
|
first sees the route and should update the entry as appropriate when the
|
||||||
|
route or gateway is modified.
|
||||||
|
|
||||||
|
|
||||||
|
Note that parent references that cannot be resolved by an implementation
|
||||||
|
of this API will not be added to this list. Implementations of this API
|
||||||
|
can only populate Route status for the Gateways/parent resources they are
|
||||||
|
responsible for.
|
||||||
|
|
||||||
|
|
||||||
|
A maximum of 32 Gateways will be represented in this list. An empty list
|
||||||
|
means the route has not been attached to any Gateway.
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
RouteParentStatus describes the status of a route with respect to an
|
||||||
|
associated Parent.
|
||||||
|
properties:
|
||||||
|
conditions:
|
||||||
|
description: |-
|
||||||
|
Conditions describes the status of the route with respect to the Gateway.
|
||||||
|
Note that the route's availability is also subject to the Gateway's own
|
||||||
|
status conditions and listener status.
|
||||||
|
|
||||||
|
|
||||||
|
If the Route's ParentRef specifies an existing Gateway that supports
|
||||||
|
Routes of this kind AND that Gateway's controller has sufficient access,
|
||||||
|
then that Gateway's controller MUST set the "Accepted" condition on the
|
||||||
|
Route, to indicate whether the route has been accepted or rejected by the
|
||||||
|
Gateway, and why.
|
||||||
|
|
||||||
|
|
||||||
|
A Route MUST be considered "Accepted" if at least one of the Route's
|
||||||
|
rules is implemented by the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
There are a number of cases where the "Accepted" condition may not be set
|
||||||
|
due to lack of controller visibility, that includes when:
|
||||||
|
|
||||||
|
|
||||||
|
* The Route refers to a non-existent parent.
|
||||||
|
* The Route is of a type that the controller does not support.
|
||||||
|
* The Route is in a namespace the controller does not have access to.
|
||||||
|
items:
|
||||||
|
description: "Condition contains details for one aspect of
|
||||||
|
the current state of this API Resource.\n---\nThis struct
|
||||||
|
is intended for direct use as an array at the field path
|
||||||
|
.status.conditions. For example,\n\n\n\ttype FooStatus
|
||||||
|
struct{\n\t // Represents the observations of a foo's
|
||||||
|
current state.\n\t // Known .status.conditions.type are:
|
||||||
|
\"Available\", \"Progressing\", and \"Degraded\"\n\t //
|
||||||
|
+patchMergeKey=type\n\t // +patchStrategy=merge\n\t //
|
||||||
|
+listType=map\n\t // +listMapKey=type\n\t Conditions
|
||||||
|
[]metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\"
|
||||||
|
patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t
|
||||||
|
\ // other fields\n\t}"
|
||||||
|
properties:
|
||||||
|
lastTransitionTime:
|
||||||
|
description: |-
|
||||||
|
lastTransitionTime is the last time the condition transitioned from one status to another.
|
||||||
|
This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
|
||||||
|
format: date-time
|
||||||
|
type: string
|
||||||
|
message:
|
||||||
|
description: |-
|
||||||
|
message is a human readable message indicating details about the transition.
|
||||||
|
This may be an empty string.
|
||||||
|
maxLength: 32768
|
||||||
|
type: string
|
||||||
|
observedGeneration:
|
||||||
|
description: |-
|
||||||
|
observedGeneration represents the .metadata.generation that the condition was set based upon.
|
||||||
|
For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
|
||||||
|
with respect to the current state of the instance.
|
||||||
|
format: int64
|
||||||
|
minimum: 0
|
||||||
|
type: integer
|
||||||
|
reason:
|
||||||
|
description: |-
|
||||||
|
reason contains a programmatic identifier indicating the reason for the condition's last transition.
|
||||||
|
Producers of specific condition types may define expected values and meanings for this field,
|
||||||
|
and whether the values are considered a guaranteed API.
|
||||||
|
The value should be a CamelCase string.
|
||||||
|
This field may not be empty.
|
||||||
|
maxLength: 1024
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: status of the condition, one of True, False,
|
||||||
|
Unknown.
|
||||||
|
enum:
|
||||||
|
- "True"
|
||||||
|
- "False"
|
||||||
|
- Unknown
|
||||||
|
type: string
|
||||||
|
type:
|
||||||
|
description: |-
|
||||||
|
type of condition in CamelCase or in foo.example.com/CamelCase.
|
||||||
|
---
|
||||||
|
Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
|
||||||
|
useful (see .node.status.conditions), the ability to deconflict is important.
|
||||||
|
The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
|
||||||
|
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
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- type
|
||||||
|
x-kubernetes-list-type: map
|
||||||
|
controllerName:
|
||||||
|
description: |-
|
||||||
|
ControllerName is a domain/path string that indicates the name of the
|
||||||
|
controller that wrote this status. This corresponds with the
|
||||||
|
controllerName field on GatewayClass.
|
||||||
|
|
||||||
|
|
||||||
|
Example: "example.net/gateway-controller".
|
||||||
|
|
||||||
|
|
||||||
|
The format of this field is DOMAIN "/" PATH, where DOMAIN and PATH are
|
||||||
|
valid Kubernetes names
|
||||||
|
(https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
|
||||||
|
|
||||||
|
|
||||||
|
Controllers MUST populate this field when writing status. Controllers should ensure that
|
||||||
|
entries to status populated with their ControllerName are cleaned up when they are no
|
||||||
|
longer necessary.
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$
|
||||||
|
type: string
|
||||||
|
parentRef:
|
||||||
|
description: |-
|
||||||
|
ParentRef corresponds with a ParentRef in the spec that this
|
||||||
|
RouteParentStatus struct describes the status of.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
default: gateway.networking.k8s.io
|
||||||
|
description: |-
|
||||||
|
Group is the group of the referent.
|
||||||
|
When unspecified, "gateway.networking.k8s.io" is inferred.
|
||||||
|
To set the core API group (such as for a "Service" kind referent),
|
||||||
|
Group must be explicitly set to "" (empty string).
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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: Gateway
|
||||||
|
description: |-
|
||||||
|
Kind is kind of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
There are two kinds of parent resources with "Core" support:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway (Gateway conformance profile)
|
||||||
|
* Service (Mesh conformance profile, ClusterIP Services only)
|
||||||
|
|
||||||
|
|
||||||
|
Support for other resources is Implementation-Specific.
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name is the name of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace is the namespace of the referent. When unspecified, this refers
|
||||||
|
to the local namespace of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
Note that there are specific rules for ParentRefs which cross namespace
|
||||||
|
boundaries. Cross-namespace references are only valid if they are explicitly
|
||||||
|
allowed by something in the namespace they are referring to. For example:
|
||||||
|
Gateway has the AllowedRoutes field, and ReferenceGrant provides a
|
||||||
|
generic way to enable any other kind of cross-namespace reference.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in the same namespace are "producer"
|
||||||
|
routes, which apply default routing rules to inbound connections from
|
||||||
|
any namespace to the Service.
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in a different namespace are
|
||||||
|
"consumer" routes, and these routing rules are only applied to outbound
|
||||||
|
connections originating from the same namespace as the Route, for which
|
||||||
|
the intended destination of the connections are a Service targeted as a
|
||||||
|
ParentRef of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: |-
|
||||||
|
Port is the network port this Route targets. It can be interpreted
|
||||||
|
differently based on the type of parent resource.
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Gateway, this targets all listeners
|
||||||
|
listening on the specified port that also support this kind of Route(and
|
||||||
|
select this Route). It's not recommended to set `Port` unless the
|
||||||
|
networking behaviors specified in a Route must apply to a specific port
|
||||||
|
as opposed to a listener(s) whose port(s) may be changed. When both Port
|
||||||
|
and SectionName are specified, the name and port of the selected listener
|
||||||
|
must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Service, this targets a specific port in the
|
||||||
|
Service spec. When both Port (experimental) and SectionName are specified,
|
||||||
|
the name and port of the selected port must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support other parent resources.
|
||||||
|
Implementations supporting other types of parent resources MUST clearly
|
||||||
|
document how/if Port is interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
For the purpose of status, an attachment is considered successful as
|
||||||
|
long as the parent resource accepts it partially. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment
|
||||||
|
from the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route,
|
||||||
|
the Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended
|
||||||
|
format: int32
|
||||||
|
maximum: 65535
|
||||||
|
minimum: 1
|
||||||
|
type: integer
|
||||||
|
sectionName:
|
||||||
|
description: |-
|
||||||
|
SectionName is the name of a section within the target resource. In the
|
||||||
|
following resources, SectionName is interpreted as the following:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway: Listener name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
* Service: Port name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support attaching Routes to other resources.
|
||||||
|
If that is the case, they MUST clearly document how SectionName is
|
||||||
|
interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
When unspecified (empty string), this will reference the entire resource.
|
||||||
|
For the purpose of status, an attachment is considered successful if at
|
||||||
|
least one section in the parent resource accepts it. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment from
|
||||||
|
the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route, the
|
||||||
|
Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- controllerName
|
||||||
|
- parentRef
|
||||||
|
type: object
|
||||||
|
maxItems: 32
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- parents
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
subresources:
|
||||||
|
status: {}
|
||||||
|
status:
|
||||||
|
acceptedNames:
|
||||||
|
kind: ""
|
||||||
|
plural: ""
|
||||||
|
conditions: null
|
||||||
|
storedVersions: null
|
||||||
910
platform/gateway-api/chart/templates/tlsroutes.yaml
Normal file
910
platform/gateway-api/chart/templates/tlsroutes.yaml
Normal file
@ -0,0 +1,910 @@
|
|||||||
|
{{/*
|
||||||
|
Vendored from kubernetes-sigs/gateway-api {{ index .Chart.Annotations "catalyst.openova.io/upstream-gateway-api-version" }}
|
||||||
|
experimental-install.yaml. Do NOT hand-edit annotations / spec — re-vendor
|
||||||
|
via the script in tests/regenerate.sh when bumping the upstream version
|
||||||
|
(also bump catalyst.openova.io/upstream-gateway-api-version in Chart.yaml).
|
||||||
|
|
||||||
|
helm.sh/resource-policy: keep is added under metadata.annotations so a
|
||||||
|
Helm uninstall does NOT delete the CRD. Gateway API CRDs are foundational
|
||||||
|
cluster-scoped infrastructure; deleting them on uninstall would break
|
||||||
|
every HTTPRoute on the cluster simultaneously.
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
#
|
||||||
|
# config/crd/experimental/gateway.networking.k8s.io_tlsroutes.yaml
|
||||||
|
#
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
helm.sh/resource-policy: keep
|
||||||
|
api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/2997
|
||||||
|
gateway.networking.k8s.io/bundle-version: v1.1.0
|
||||||
|
gateway.networking.k8s.io/channel: experimental
|
||||||
|
creationTimestamp: null
|
||||||
|
name: tlsroutes.gateway.networking.k8s.io
|
||||||
|
spec:
|
||||||
|
group: gateway.networking.k8s.io
|
||||||
|
names:
|
||||||
|
categories:
|
||||||
|
- gateway-api
|
||||||
|
kind: TLSRoute
|
||||||
|
listKind: TLSRouteList
|
||||||
|
plural: tlsroutes
|
||||||
|
singular: tlsroute
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- additionalPrinterColumns:
|
||||||
|
- jsonPath: .metadata.creationTimestamp
|
||||||
|
name: Age
|
||||||
|
type: date
|
||||||
|
name: v1alpha2
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
The TLSRoute resource is similar to TCPRoute, but can be configured
|
||||||
|
to match against TLS-specific metadata. This allows more flexibility
|
||||||
|
in matching streams for a given TLS listener.
|
||||||
|
|
||||||
|
|
||||||
|
If you need to forward traffic to a single target for a TLS listener, you
|
||||||
|
could choose to use a TCPRoute with a TLS listener.
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: |-
|
||||||
|
APIVersion defines the versioned schema of this representation of an object.
|
||||||
|
Servers should convert recognized schemas to the latest internal value, and
|
||||||
|
may reject unrecognized values.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: |-
|
||||||
|
Kind is a string value representing the REST resource this object represents.
|
||||||
|
Servers may infer this from the endpoint the client submits requests to.
|
||||||
|
Cannot be updated.
|
||||||
|
In CamelCase.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||||
|
type: string
|
||||||
|
metadata:
|
||||||
|
type: object
|
||||||
|
spec:
|
||||||
|
description: Spec defines the desired state of TLSRoute.
|
||||||
|
properties:
|
||||||
|
hostnames:
|
||||||
|
description: |-
|
||||||
|
Hostnames defines a set of SNI names that should match against the
|
||||||
|
SNI attribute of TLS ClientHello message in TLS handshake. This matches
|
||||||
|
the RFC 1123 definition of a hostname with 2 notable exceptions:
|
||||||
|
|
||||||
|
|
||||||
|
1. IPs are not allowed in SNI names per RFC 6066.
|
||||||
|
2. A hostname may be prefixed with a wildcard label (`*.`). The wildcard
|
||||||
|
label must appear by itself as the first label.
|
||||||
|
|
||||||
|
|
||||||
|
If a hostname is specified by both the Listener and TLSRoute, there
|
||||||
|
must be at least one intersecting hostname for the TLSRoute to be
|
||||||
|
attached to the Listener. For example:
|
||||||
|
|
||||||
|
|
||||||
|
* A Listener with `test.example.com` as the hostname matches TLSRoutes
|
||||||
|
that have either not specified any hostnames, or have specified at
|
||||||
|
least one of `test.example.com` or `*.example.com`.
|
||||||
|
* A Listener with `*.example.com` as the hostname matches TLSRoutes
|
||||||
|
that have either not specified any hostnames or have specified at least
|
||||||
|
one hostname that matches the Listener hostname. For example,
|
||||||
|
`test.example.com` and `*.example.com` would both match. On the other
|
||||||
|
hand, `example.com` and `test.example.net` would not match.
|
||||||
|
|
||||||
|
|
||||||
|
If both the Listener and TLSRoute have specified hostnames, any
|
||||||
|
TLSRoute hostnames that do not match the Listener hostname MUST be
|
||||||
|
ignored. For example, if a Listener specified `*.example.com`, and the
|
||||||
|
TLSRoute specified `test.example.com` and `test.example.net`,
|
||||||
|
`test.example.net` must not be considered for a match.
|
||||||
|
|
||||||
|
|
||||||
|
If both the Listener and TLSRoute have specified hostnames, and none
|
||||||
|
match with the criteria above, then the TLSRoute is not accepted. The
|
||||||
|
implementation must raise an 'Accepted' Condition with a status of
|
||||||
|
`False` in the corresponding RouteParentStatus.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
Hostname is the fully qualified domain name of a network host. This matches
|
||||||
|
the RFC 1123 definition of a hostname with 2 notable exceptions:
|
||||||
|
|
||||||
|
|
||||||
|
1. IPs are not allowed.
|
||||||
|
2. A hostname may be prefixed with a wildcard label (`*.`). The wildcard
|
||||||
|
label must appear by itself as the first label.
|
||||||
|
|
||||||
|
|
||||||
|
Hostname can be "precise" which is a domain name without the terminating
|
||||||
|
dot of a network host (e.g. "foo.example.com") or "wildcard", which is a
|
||||||
|
domain name prefixed with a single wildcard label (e.g. `*.example.com`).
|
||||||
|
|
||||||
|
|
||||||
|
Note that as per RFC1035 and RFC1123, a *label* must consist of lower case
|
||||||
|
alphanumeric characters or '-', and must start and end with an alphanumeric
|
||||||
|
character. No other punctuation is allowed.
|
||||||
|
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
|
||||||
|
maxItems: 16
|
||||||
|
type: array
|
||||||
|
parentRefs:
|
||||||
|
description: |+
|
||||||
|
ParentRefs references the resources (usually Gateways) that a Route wants
|
||||||
|
to be attached to. Note that the referenced parent resource needs to
|
||||||
|
allow this for the attachment to be complete. For Gateways, that means
|
||||||
|
the Gateway needs to allow attachment from Routes of this kind and
|
||||||
|
namespace. For Services, that means the Service must either be in the same
|
||||||
|
namespace for a "producer" route, or the mesh implementation must support
|
||||||
|
and allow "consumer" routes for the referenced Service. ReferenceGrant is
|
||||||
|
not applicable for governing ParentRefs to Services - it is not possible to
|
||||||
|
create a "producer" route for a Service in a different namespace from the
|
||||||
|
Route.
|
||||||
|
|
||||||
|
|
||||||
|
There are two kinds of parent resources with "Core" support:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway (Gateway conformance profile)
|
||||||
|
* Service (Mesh conformance profile, ClusterIP Services only)
|
||||||
|
|
||||||
|
|
||||||
|
This API may be extended in the future to support additional kinds of parent
|
||||||
|
resources.
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs must be _distinct_. This means either that:
|
||||||
|
|
||||||
|
|
||||||
|
* They select different objects. If this is the case, then parentRef
|
||||||
|
entries are distinct. In terms of fields, this means that the
|
||||||
|
multi-part key defined by `group`, `kind`, `namespace`, and `name` must
|
||||||
|
be unique across all parentRef entries in the Route.
|
||||||
|
* They do not select different objects, but for each optional field used,
|
||||||
|
each ParentRef that selects the same object must set the same set of
|
||||||
|
optional fields to different values. If one ParentRef sets a
|
||||||
|
combination of optional fields, all must set the same combination.
|
||||||
|
|
||||||
|
|
||||||
|
Some examples:
|
||||||
|
|
||||||
|
|
||||||
|
* If one ParentRef sets `sectionName`, all ParentRefs referencing the
|
||||||
|
same object must also set `sectionName`.
|
||||||
|
* If one ParentRef sets `port`, all ParentRefs referencing the same
|
||||||
|
object must also set `port`.
|
||||||
|
* If one ParentRef sets `sectionName` and `port`, all ParentRefs
|
||||||
|
referencing the same object must also set `sectionName` and `port`.
|
||||||
|
|
||||||
|
|
||||||
|
It is possible to separately reference multiple distinct objects that may
|
||||||
|
be collapsed by an implementation. For example, some implementations may
|
||||||
|
choose to merge compatible Gateway Listeners together. If that is the
|
||||||
|
case, the list of routes attached to those resources should also be
|
||||||
|
merged.
|
||||||
|
|
||||||
|
|
||||||
|
Note that for ParentRefs that cross namespace boundaries, there are specific
|
||||||
|
rules. Cross-namespace references are only valid if they are explicitly
|
||||||
|
allowed by something in the namespace they are referring to. For example,
|
||||||
|
Gateway has the AllowedRoutes field, and ReferenceGrant provides a
|
||||||
|
generic way to enable other kinds of cross-namespace reference.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in the same namespace are "producer"
|
||||||
|
routes, which apply default routing rules to inbound connections from
|
||||||
|
any namespace to the Service.
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in a different namespace are
|
||||||
|
"consumer" routes, and these routing rules are only applied to outbound
|
||||||
|
connections originating from the same namespace as the Route, for which
|
||||||
|
the intended destination of the connections are a Service targeted as a
|
||||||
|
ParentRef of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
ParentReference identifies an API object (usually a Gateway) that can be considered
|
||||||
|
a parent of this resource (usually a route). There are two kinds of parent resources
|
||||||
|
with "Core" support:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway (Gateway conformance profile)
|
||||||
|
* Service (Mesh conformance profile, ClusterIP Services only)
|
||||||
|
|
||||||
|
|
||||||
|
This API may be extended in the future to support additional kinds of parent
|
||||||
|
resources.
|
||||||
|
|
||||||
|
|
||||||
|
The API object must be valid in the cluster; the Group and Kind must
|
||||||
|
be registered in the cluster for this reference to be valid.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
default: gateway.networking.k8s.io
|
||||||
|
description: |-
|
||||||
|
Group is the group of the referent.
|
||||||
|
When unspecified, "gateway.networking.k8s.io" is inferred.
|
||||||
|
To set the core API group (such as for a "Service" kind referent),
|
||||||
|
Group must be explicitly set to "" (empty string).
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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: Gateway
|
||||||
|
description: |-
|
||||||
|
Kind is kind of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
There are two kinds of parent resources with "Core" support:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway (Gateway conformance profile)
|
||||||
|
* Service (Mesh conformance profile, ClusterIP Services only)
|
||||||
|
|
||||||
|
|
||||||
|
Support for other resources is Implementation-Specific.
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name is the name of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace is the namespace of the referent. When unspecified, this refers
|
||||||
|
to the local namespace of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
Note that there are specific rules for ParentRefs which cross namespace
|
||||||
|
boundaries. Cross-namespace references are only valid if they are explicitly
|
||||||
|
allowed by something in the namespace they are referring to. For example:
|
||||||
|
Gateway has the AllowedRoutes field, and ReferenceGrant provides a
|
||||||
|
generic way to enable any other kind of cross-namespace reference.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in the same namespace are "producer"
|
||||||
|
routes, which apply default routing rules to inbound connections from
|
||||||
|
any namespace to the Service.
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in a different namespace are
|
||||||
|
"consumer" routes, and these routing rules are only applied to outbound
|
||||||
|
connections originating from the same namespace as the Route, for which
|
||||||
|
the intended destination of the connections are a Service targeted as a
|
||||||
|
ParentRef of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: |-
|
||||||
|
Port is the network port this Route targets. It can be interpreted
|
||||||
|
differently based on the type of parent resource.
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Gateway, this targets all listeners
|
||||||
|
listening on the specified port that also support this kind of Route(and
|
||||||
|
select this Route). It's not recommended to set `Port` unless the
|
||||||
|
networking behaviors specified in a Route must apply to a specific port
|
||||||
|
as opposed to a listener(s) whose port(s) may be changed. When both Port
|
||||||
|
and SectionName are specified, the name and port of the selected listener
|
||||||
|
must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Service, this targets a specific port in the
|
||||||
|
Service spec. When both Port (experimental) and SectionName are specified,
|
||||||
|
the name and port of the selected port must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support other parent resources.
|
||||||
|
Implementations supporting other types of parent resources MUST clearly
|
||||||
|
document how/if Port is interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
For the purpose of status, an attachment is considered successful as
|
||||||
|
long as the parent resource accepts it partially. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment
|
||||||
|
from the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route,
|
||||||
|
the Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended
|
||||||
|
format: int32
|
||||||
|
maximum: 65535
|
||||||
|
minimum: 1
|
||||||
|
type: integer
|
||||||
|
sectionName:
|
||||||
|
description: |-
|
||||||
|
SectionName is the name of a section within the target resource. In the
|
||||||
|
following resources, SectionName is interpreted as the following:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway: Listener name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
* Service: Port name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support attaching Routes to other resources.
|
||||||
|
If that is the case, they MUST clearly document how SectionName is
|
||||||
|
interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
When unspecified (empty string), this will reference the entire resource.
|
||||||
|
For the purpose of status, an attachment is considered successful if at
|
||||||
|
least one section in the parent resource accepts it. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment from
|
||||||
|
the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route, the
|
||||||
|
Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
maxItems: 32
|
||||||
|
type: array
|
||||||
|
x-kubernetes-validations:
|
||||||
|
- message: sectionName or port must be specified when parentRefs includes
|
||||||
|
2 or more references to the same parent
|
||||||
|
rule: 'self.all(p1, self.all(p2, p1.group == p2.group && p1.kind
|
||||||
|
== p2.kind && p1.name == p2.name && (((!has(p1.__namespace__)
|
||||||
|
|| p1.__namespace__ == '''') && (!has(p2.__namespace__) || p2.__namespace__
|
||||||
|
== '''')) || (has(p1.__namespace__) && has(p2.__namespace__) &&
|
||||||
|
p1.__namespace__ == p2.__namespace__)) ? ((!has(p1.sectionName)
|
||||||
|
|| p1.sectionName == '''') == (!has(p2.sectionName) || p2.sectionName
|
||||||
|
== '''') && (!has(p1.port) || p1.port == 0) == (!has(p2.port)
|
||||||
|
|| p2.port == 0)): true))'
|
||||||
|
- message: sectionName or port must be unique when parentRefs includes
|
||||||
|
2 or more references to the same parent
|
||||||
|
rule: self.all(p1, self.exists_one(p2, p1.group == p2.group && p1.kind
|
||||||
|
== p2.kind && p1.name == p2.name && (((!has(p1.__namespace__)
|
||||||
|
|| p1.__namespace__ == '') && (!has(p2.__namespace__) || p2.__namespace__
|
||||||
|
== '')) || (has(p1.__namespace__) && has(p2.__namespace__) &&
|
||||||
|
p1.__namespace__ == p2.__namespace__ )) && (((!has(p1.sectionName)
|
||||||
|
|| p1.sectionName == '') && (!has(p2.sectionName) || p2.sectionName
|
||||||
|
== '')) || ( has(p1.sectionName) && has(p2.sectionName) && p1.sectionName
|
||||||
|
== p2.sectionName)) && (((!has(p1.port) || p1.port == 0) && (!has(p2.port)
|
||||||
|
|| p2.port == 0)) || (has(p1.port) && has(p2.port) && p1.port
|
||||||
|
== p2.port))))
|
||||||
|
rules:
|
||||||
|
description: Rules are a list of TLS matchers and actions.
|
||||||
|
items:
|
||||||
|
description: TLSRouteRule is the configuration for a given rule.
|
||||||
|
properties:
|
||||||
|
backendRefs:
|
||||||
|
description: |-
|
||||||
|
BackendRefs defines the backend(s) where matching requests should be
|
||||||
|
sent. If unspecified or invalid (refers to a non-existent resource or
|
||||||
|
a Service with no endpoints), the rule performs no forwarding; if no
|
||||||
|
filters are specified that would result in a response being sent, the
|
||||||
|
underlying implementation must actively reject request attempts to this
|
||||||
|
backend, by rejecting the connection or returning a 500 status code.
|
||||||
|
Request rejections must respect weight; if an invalid backend is
|
||||||
|
requested to have 80% of requests, then 80% of requests must be rejected
|
||||||
|
instead.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core for Kubernetes Service
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended for Kubernetes ServiceImport
|
||||||
|
|
||||||
|
|
||||||
|
Support: Implementation-specific for any other resource
|
||||||
|
|
||||||
|
|
||||||
|
Support for weight: Extended
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
BackendRef defines how a Route should forward a request to a Kubernetes
|
||||||
|
resource.
|
||||||
|
|
||||||
|
|
||||||
|
Note that when a namespace different than the local namespace is specified, a
|
||||||
|
ReferenceGrant object is required in the referent namespace to allow that
|
||||||
|
namespace's owner to accept the reference. See the ReferenceGrant
|
||||||
|
documentation for details.
|
||||||
|
|
||||||
|
|
||||||
|
<gateway:experimental:description>
|
||||||
|
|
||||||
|
|
||||||
|
When the BackendRef points to a Kubernetes Service, implementations SHOULD
|
||||||
|
honor the appProtocol field if it is set for the target Service Port.
|
||||||
|
|
||||||
|
|
||||||
|
Implementations supporting appProtocol SHOULD recognize the Kubernetes
|
||||||
|
Standard Application Protocols defined in KEP-3726.
|
||||||
|
|
||||||
|
|
||||||
|
If a Service appProtocol isn't specified, an implementation MAY infer the
|
||||||
|
backend protocol through its own means. Implementations MAY infer the
|
||||||
|
protocol from the Route type referring to the backend Service.
|
||||||
|
|
||||||
|
|
||||||
|
If a Route is not able to send traffic to the backend using the specified
|
||||||
|
protocol then the backend is considered invalid. Implementations MUST set the
|
||||||
|
"ResolvedRefs" condition to "False" with the "UnsupportedProtocol" reason.
|
||||||
|
|
||||||
|
|
||||||
|
</gateway:experimental:description>
|
||||||
|
|
||||||
|
|
||||||
|
Note that when the BackendTLSPolicy object is enabled by the implementation,
|
||||||
|
there are some extra rules about validity to consider here. See the fields
|
||||||
|
where this struct is used for more information about the exact behavior.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
default: ""
|
||||||
|
description: |-
|
||||||
|
Group is the group of the referent. For example, "gateway.networking.k8s.io".
|
||||||
|
When unspecified or empty string, core API group is inferred.
|
||||||
|
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: Service
|
||||||
|
description: |-
|
||||||
|
Kind is the Kubernetes resource kind of the referent. For example
|
||||||
|
"Service".
|
||||||
|
|
||||||
|
|
||||||
|
Defaults to "Service" when not specified.
|
||||||
|
|
||||||
|
|
||||||
|
ExternalName services can refer to CNAME DNS records that may live
|
||||||
|
outside of the cluster and as such are difficult to reason about in
|
||||||
|
terms of conformance. They also may not be safe to forward to (see
|
||||||
|
CVE-2021-25740 for more information). Implementations SHOULD NOT
|
||||||
|
support ExternalName Services.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core (Services with a type other than ExternalName)
|
||||||
|
|
||||||
|
|
||||||
|
Support: Implementation-specific (Services with type ExternalName)
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: Name is the name of the referent.
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace is the namespace of the backend. When unspecified, the local
|
||||||
|
namespace is inferred.
|
||||||
|
|
||||||
|
|
||||||
|
Note that when a namespace different than the local namespace is specified,
|
||||||
|
a ReferenceGrant object is required in the referent namespace to allow that
|
||||||
|
namespace's owner to accept the reference. See the ReferenceGrant
|
||||||
|
documentation for details.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: |-
|
||||||
|
Port specifies the destination port number to use for this resource.
|
||||||
|
Port is required when the referent is a Kubernetes Service. In this
|
||||||
|
case, the port number is the service port number, not the target port.
|
||||||
|
For other resources, destination port might be derived from the referent
|
||||||
|
resource or this field.
|
||||||
|
format: int32
|
||||||
|
maximum: 65535
|
||||||
|
minimum: 1
|
||||||
|
type: integer
|
||||||
|
weight:
|
||||||
|
default: 1
|
||||||
|
description: |-
|
||||||
|
Weight specifies the proportion of requests forwarded to the referenced
|
||||||
|
backend. This is computed as weight/(sum of all weights in this
|
||||||
|
BackendRefs list). For non-zero values, there may be some epsilon from
|
||||||
|
the exact proportion defined here depending on the precision an
|
||||||
|
implementation supports. Weight is not a percentage and the sum of
|
||||||
|
weights does not need to equal 100.
|
||||||
|
|
||||||
|
|
||||||
|
If only one backend is specified and it has a weight greater than 0, 100%
|
||||||
|
of the traffic is forwarded to that backend. If weight is set to 0, no
|
||||||
|
traffic should be forwarded for this entry. If unspecified, weight
|
||||||
|
defaults to 1.
|
||||||
|
|
||||||
|
|
||||||
|
Support for this field varies based on the context where used.
|
||||||
|
format: int32
|
||||||
|
maximum: 1000000
|
||||||
|
minimum: 0
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
x-kubernetes-validations:
|
||||||
|
- message: Must have port for Service reference
|
||||||
|
rule: '(size(self.group) == 0 && self.kind == ''Service'')
|
||||||
|
? has(self.port) : true'
|
||||||
|
maxItems: 16
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
maxItems: 16
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- rules
|
||||||
|
type: object
|
||||||
|
status:
|
||||||
|
description: Status defines the current state of TLSRoute.
|
||||||
|
properties:
|
||||||
|
parents:
|
||||||
|
description: |-
|
||||||
|
Parents is a list of parent resources (usually Gateways) that are
|
||||||
|
associated with the route, and the status of the route with respect to
|
||||||
|
each parent. When this route attaches to a parent, the controller that
|
||||||
|
manages the parent must add an entry to this list when the controller
|
||||||
|
first sees the route and should update the entry as appropriate when the
|
||||||
|
route or gateway is modified.
|
||||||
|
|
||||||
|
|
||||||
|
Note that parent references that cannot be resolved by an implementation
|
||||||
|
of this API will not be added to this list. Implementations of this API
|
||||||
|
can only populate Route status for the Gateways/parent resources they are
|
||||||
|
responsible for.
|
||||||
|
|
||||||
|
|
||||||
|
A maximum of 32 Gateways will be represented in this list. An empty list
|
||||||
|
means the route has not been attached to any Gateway.
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
RouteParentStatus describes the status of a route with respect to an
|
||||||
|
associated Parent.
|
||||||
|
properties:
|
||||||
|
conditions:
|
||||||
|
description: |-
|
||||||
|
Conditions describes the status of the route with respect to the Gateway.
|
||||||
|
Note that the route's availability is also subject to the Gateway's own
|
||||||
|
status conditions and listener status.
|
||||||
|
|
||||||
|
|
||||||
|
If the Route's ParentRef specifies an existing Gateway that supports
|
||||||
|
Routes of this kind AND that Gateway's controller has sufficient access,
|
||||||
|
then that Gateway's controller MUST set the "Accepted" condition on the
|
||||||
|
Route, to indicate whether the route has been accepted or rejected by the
|
||||||
|
Gateway, and why.
|
||||||
|
|
||||||
|
|
||||||
|
A Route MUST be considered "Accepted" if at least one of the Route's
|
||||||
|
rules is implemented by the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
There are a number of cases where the "Accepted" condition may not be set
|
||||||
|
due to lack of controller visibility, that includes when:
|
||||||
|
|
||||||
|
|
||||||
|
* The Route refers to a non-existent parent.
|
||||||
|
* The Route is of a type that the controller does not support.
|
||||||
|
* The Route is in a namespace the controller does not have access to.
|
||||||
|
items:
|
||||||
|
description: "Condition contains details for one aspect of
|
||||||
|
the current state of this API Resource.\n---\nThis struct
|
||||||
|
is intended for direct use as an array at the field path
|
||||||
|
.status.conditions. For example,\n\n\n\ttype FooStatus
|
||||||
|
struct{\n\t // Represents the observations of a foo's
|
||||||
|
current state.\n\t // Known .status.conditions.type are:
|
||||||
|
\"Available\", \"Progressing\", and \"Degraded\"\n\t //
|
||||||
|
+patchMergeKey=type\n\t // +patchStrategy=merge\n\t //
|
||||||
|
+listType=map\n\t // +listMapKey=type\n\t Conditions
|
||||||
|
[]metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\"
|
||||||
|
patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t
|
||||||
|
\ // other fields\n\t}"
|
||||||
|
properties:
|
||||||
|
lastTransitionTime:
|
||||||
|
description: |-
|
||||||
|
lastTransitionTime is the last time the condition transitioned from one status to another.
|
||||||
|
This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
|
||||||
|
format: date-time
|
||||||
|
type: string
|
||||||
|
message:
|
||||||
|
description: |-
|
||||||
|
message is a human readable message indicating details about the transition.
|
||||||
|
This may be an empty string.
|
||||||
|
maxLength: 32768
|
||||||
|
type: string
|
||||||
|
observedGeneration:
|
||||||
|
description: |-
|
||||||
|
observedGeneration represents the .metadata.generation that the condition was set based upon.
|
||||||
|
For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
|
||||||
|
with respect to the current state of the instance.
|
||||||
|
format: int64
|
||||||
|
minimum: 0
|
||||||
|
type: integer
|
||||||
|
reason:
|
||||||
|
description: |-
|
||||||
|
reason contains a programmatic identifier indicating the reason for the condition's last transition.
|
||||||
|
Producers of specific condition types may define expected values and meanings for this field,
|
||||||
|
and whether the values are considered a guaranteed API.
|
||||||
|
The value should be a CamelCase string.
|
||||||
|
This field may not be empty.
|
||||||
|
maxLength: 1024
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: status of the condition, one of True, False,
|
||||||
|
Unknown.
|
||||||
|
enum:
|
||||||
|
- "True"
|
||||||
|
- "False"
|
||||||
|
- Unknown
|
||||||
|
type: string
|
||||||
|
type:
|
||||||
|
description: |-
|
||||||
|
type of condition in CamelCase or in foo.example.com/CamelCase.
|
||||||
|
---
|
||||||
|
Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
|
||||||
|
useful (see .node.status.conditions), the ability to deconflict is important.
|
||||||
|
The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
|
||||||
|
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
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- type
|
||||||
|
x-kubernetes-list-type: map
|
||||||
|
controllerName:
|
||||||
|
description: |-
|
||||||
|
ControllerName is a domain/path string that indicates the name of the
|
||||||
|
controller that wrote this status. This corresponds with the
|
||||||
|
controllerName field on GatewayClass.
|
||||||
|
|
||||||
|
|
||||||
|
Example: "example.net/gateway-controller".
|
||||||
|
|
||||||
|
|
||||||
|
The format of this field is DOMAIN "/" PATH, where DOMAIN and PATH are
|
||||||
|
valid Kubernetes names
|
||||||
|
(https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
|
||||||
|
|
||||||
|
|
||||||
|
Controllers MUST populate this field when writing status. Controllers should ensure that
|
||||||
|
entries to status populated with their ControllerName are cleaned up when they are no
|
||||||
|
longer necessary.
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$
|
||||||
|
type: string
|
||||||
|
parentRef:
|
||||||
|
description: |-
|
||||||
|
ParentRef corresponds with a ParentRef in the spec that this
|
||||||
|
RouteParentStatus struct describes the status of.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
default: gateway.networking.k8s.io
|
||||||
|
description: |-
|
||||||
|
Group is the group of the referent.
|
||||||
|
When unspecified, "gateway.networking.k8s.io" is inferred.
|
||||||
|
To set the core API group (such as for a "Service" kind referent),
|
||||||
|
Group must be explicitly set to "" (empty string).
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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: Gateway
|
||||||
|
description: |-
|
||||||
|
Kind is kind of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
There are two kinds of parent resources with "Core" support:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway (Gateway conformance profile)
|
||||||
|
* Service (Mesh conformance profile, ClusterIP Services only)
|
||||||
|
|
||||||
|
|
||||||
|
Support for other resources is Implementation-Specific.
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name is the name of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace is the namespace of the referent. When unspecified, this refers
|
||||||
|
to the local namespace of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
Note that there are specific rules for ParentRefs which cross namespace
|
||||||
|
boundaries. Cross-namespace references are only valid if they are explicitly
|
||||||
|
allowed by something in the namespace they are referring to. For example:
|
||||||
|
Gateway has the AllowedRoutes field, and ReferenceGrant provides a
|
||||||
|
generic way to enable any other kind of cross-namespace reference.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in the same namespace are "producer"
|
||||||
|
routes, which apply default routing rules to inbound connections from
|
||||||
|
any namespace to the Service.
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in a different namespace are
|
||||||
|
"consumer" routes, and these routing rules are only applied to outbound
|
||||||
|
connections originating from the same namespace as the Route, for which
|
||||||
|
the intended destination of the connections are a Service targeted as a
|
||||||
|
ParentRef of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: |-
|
||||||
|
Port is the network port this Route targets. It can be interpreted
|
||||||
|
differently based on the type of parent resource.
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Gateway, this targets all listeners
|
||||||
|
listening on the specified port that also support this kind of Route(and
|
||||||
|
select this Route). It's not recommended to set `Port` unless the
|
||||||
|
networking behaviors specified in a Route must apply to a specific port
|
||||||
|
as opposed to a listener(s) whose port(s) may be changed. When both Port
|
||||||
|
and SectionName are specified, the name and port of the selected listener
|
||||||
|
must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Service, this targets a specific port in the
|
||||||
|
Service spec. When both Port (experimental) and SectionName are specified,
|
||||||
|
the name and port of the selected port must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support other parent resources.
|
||||||
|
Implementations supporting other types of parent resources MUST clearly
|
||||||
|
document how/if Port is interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
For the purpose of status, an attachment is considered successful as
|
||||||
|
long as the parent resource accepts it partially. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment
|
||||||
|
from the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route,
|
||||||
|
the Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended
|
||||||
|
format: int32
|
||||||
|
maximum: 65535
|
||||||
|
minimum: 1
|
||||||
|
type: integer
|
||||||
|
sectionName:
|
||||||
|
description: |-
|
||||||
|
SectionName is the name of a section within the target resource. In the
|
||||||
|
following resources, SectionName is interpreted as the following:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway: Listener name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
* Service: Port name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support attaching Routes to other resources.
|
||||||
|
If that is the case, they MUST clearly document how SectionName is
|
||||||
|
interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
When unspecified (empty string), this will reference the entire resource.
|
||||||
|
For the purpose of status, an attachment is considered successful if at
|
||||||
|
least one section in the parent resource accepts it. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment from
|
||||||
|
the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route, the
|
||||||
|
Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- controllerName
|
||||||
|
- parentRef
|
||||||
|
type: object
|
||||||
|
maxItems: 32
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- parents
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
subresources:
|
||||||
|
status: {}
|
||||||
|
status:
|
||||||
|
acceptedNames:
|
||||||
|
kind: ""
|
||||||
|
plural: ""
|
||||||
|
conditions: null
|
||||||
|
storedVersions: null
|
||||||
837
platform/gateway-api/chart/templates/udproutes.yaml
Normal file
837
platform/gateway-api/chart/templates/udproutes.yaml
Normal file
@ -0,0 +1,837 @@
|
|||||||
|
{{/*
|
||||||
|
Vendored from kubernetes-sigs/gateway-api {{ index .Chart.Annotations "catalyst.openova.io/upstream-gateway-api-version" }}
|
||||||
|
experimental-install.yaml. Do NOT hand-edit annotations / spec — re-vendor
|
||||||
|
via the script in tests/regenerate.sh when bumping the upstream version
|
||||||
|
(also bump catalyst.openova.io/upstream-gateway-api-version in Chart.yaml).
|
||||||
|
|
||||||
|
helm.sh/resource-policy: keep is added under metadata.annotations so a
|
||||||
|
Helm uninstall does NOT delete the CRD. Gateway API CRDs are foundational
|
||||||
|
cluster-scoped infrastructure; deleting them on uninstall would break
|
||||||
|
every HTTPRoute on the cluster simultaneously.
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
#
|
||||||
|
# config/crd/experimental/gateway.networking.k8s.io_udproutes.yaml
|
||||||
|
#
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
helm.sh/resource-policy: keep
|
||||||
|
api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/2997
|
||||||
|
gateway.networking.k8s.io/bundle-version: v1.1.0
|
||||||
|
gateway.networking.k8s.io/channel: experimental
|
||||||
|
creationTimestamp: null
|
||||||
|
name: udproutes.gateway.networking.k8s.io
|
||||||
|
spec:
|
||||||
|
group: gateway.networking.k8s.io
|
||||||
|
names:
|
||||||
|
categories:
|
||||||
|
- gateway-api
|
||||||
|
kind: UDPRoute
|
||||||
|
listKind: UDPRouteList
|
||||||
|
plural: udproutes
|
||||||
|
singular: udproute
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- additionalPrinterColumns:
|
||||||
|
- jsonPath: .metadata.creationTimestamp
|
||||||
|
name: Age
|
||||||
|
type: date
|
||||||
|
name: v1alpha2
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
UDPRoute provides a way to route UDP traffic. When combined with a Gateway
|
||||||
|
listener, it can be used to forward traffic on the port specified by the
|
||||||
|
listener to a set of backends specified by the UDPRoute.
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: |-
|
||||||
|
APIVersion defines the versioned schema of this representation of an object.
|
||||||
|
Servers should convert recognized schemas to the latest internal value, and
|
||||||
|
may reject unrecognized values.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: |-
|
||||||
|
Kind is a string value representing the REST resource this object represents.
|
||||||
|
Servers may infer this from the endpoint the client submits requests to.
|
||||||
|
Cannot be updated.
|
||||||
|
In CamelCase.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||||
|
type: string
|
||||||
|
metadata:
|
||||||
|
type: object
|
||||||
|
spec:
|
||||||
|
description: Spec defines the desired state of UDPRoute.
|
||||||
|
properties:
|
||||||
|
parentRefs:
|
||||||
|
description: |+
|
||||||
|
ParentRefs references the resources (usually Gateways) that a Route wants
|
||||||
|
to be attached to. Note that the referenced parent resource needs to
|
||||||
|
allow this for the attachment to be complete. For Gateways, that means
|
||||||
|
the Gateway needs to allow attachment from Routes of this kind and
|
||||||
|
namespace. For Services, that means the Service must either be in the same
|
||||||
|
namespace for a "producer" route, or the mesh implementation must support
|
||||||
|
and allow "consumer" routes for the referenced Service. ReferenceGrant is
|
||||||
|
not applicable for governing ParentRefs to Services - it is not possible to
|
||||||
|
create a "producer" route for a Service in a different namespace from the
|
||||||
|
Route.
|
||||||
|
|
||||||
|
|
||||||
|
There are two kinds of parent resources with "Core" support:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway (Gateway conformance profile)
|
||||||
|
* Service (Mesh conformance profile, ClusterIP Services only)
|
||||||
|
|
||||||
|
|
||||||
|
This API may be extended in the future to support additional kinds of parent
|
||||||
|
resources.
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs must be _distinct_. This means either that:
|
||||||
|
|
||||||
|
|
||||||
|
* They select different objects. If this is the case, then parentRef
|
||||||
|
entries are distinct. In terms of fields, this means that the
|
||||||
|
multi-part key defined by `group`, `kind`, `namespace`, and `name` must
|
||||||
|
be unique across all parentRef entries in the Route.
|
||||||
|
* They do not select different objects, but for each optional field used,
|
||||||
|
each ParentRef that selects the same object must set the same set of
|
||||||
|
optional fields to different values. If one ParentRef sets a
|
||||||
|
combination of optional fields, all must set the same combination.
|
||||||
|
|
||||||
|
|
||||||
|
Some examples:
|
||||||
|
|
||||||
|
|
||||||
|
* If one ParentRef sets `sectionName`, all ParentRefs referencing the
|
||||||
|
same object must also set `sectionName`.
|
||||||
|
* If one ParentRef sets `port`, all ParentRefs referencing the same
|
||||||
|
object must also set `port`.
|
||||||
|
* If one ParentRef sets `sectionName` and `port`, all ParentRefs
|
||||||
|
referencing the same object must also set `sectionName` and `port`.
|
||||||
|
|
||||||
|
|
||||||
|
It is possible to separately reference multiple distinct objects that may
|
||||||
|
be collapsed by an implementation. For example, some implementations may
|
||||||
|
choose to merge compatible Gateway Listeners together. If that is the
|
||||||
|
case, the list of routes attached to those resources should also be
|
||||||
|
merged.
|
||||||
|
|
||||||
|
|
||||||
|
Note that for ParentRefs that cross namespace boundaries, there are specific
|
||||||
|
rules. Cross-namespace references are only valid if they are explicitly
|
||||||
|
allowed by something in the namespace they are referring to. For example,
|
||||||
|
Gateway has the AllowedRoutes field, and ReferenceGrant provides a
|
||||||
|
generic way to enable other kinds of cross-namespace reference.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in the same namespace are "producer"
|
||||||
|
routes, which apply default routing rules to inbound connections from
|
||||||
|
any namespace to the Service.
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in a different namespace are
|
||||||
|
"consumer" routes, and these routing rules are only applied to outbound
|
||||||
|
connections originating from the same namespace as the Route, for which
|
||||||
|
the intended destination of the connections are a Service targeted as a
|
||||||
|
ParentRef of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
ParentReference identifies an API object (usually a Gateway) that can be considered
|
||||||
|
a parent of this resource (usually a route). There are two kinds of parent resources
|
||||||
|
with "Core" support:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway (Gateway conformance profile)
|
||||||
|
* Service (Mesh conformance profile, ClusterIP Services only)
|
||||||
|
|
||||||
|
|
||||||
|
This API may be extended in the future to support additional kinds of parent
|
||||||
|
resources.
|
||||||
|
|
||||||
|
|
||||||
|
The API object must be valid in the cluster; the Group and Kind must
|
||||||
|
be registered in the cluster for this reference to be valid.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
default: gateway.networking.k8s.io
|
||||||
|
description: |-
|
||||||
|
Group is the group of the referent.
|
||||||
|
When unspecified, "gateway.networking.k8s.io" is inferred.
|
||||||
|
To set the core API group (such as for a "Service" kind referent),
|
||||||
|
Group must be explicitly set to "" (empty string).
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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: Gateway
|
||||||
|
description: |-
|
||||||
|
Kind is kind of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
There are two kinds of parent resources with "Core" support:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway (Gateway conformance profile)
|
||||||
|
* Service (Mesh conformance profile, ClusterIP Services only)
|
||||||
|
|
||||||
|
|
||||||
|
Support for other resources is Implementation-Specific.
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name is the name of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace is the namespace of the referent. When unspecified, this refers
|
||||||
|
to the local namespace of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
Note that there are specific rules for ParentRefs which cross namespace
|
||||||
|
boundaries. Cross-namespace references are only valid if they are explicitly
|
||||||
|
allowed by something in the namespace they are referring to. For example:
|
||||||
|
Gateway has the AllowedRoutes field, and ReferenceGrant provides a
|
||||||
|
generic way to enable any other kind of cross-namespace reference.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in the same namespace are "producer"
|
||||||
|
routes, which apply default routing rules to inbound connections from
|
||||||
|
any namespace to the Service.
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in a different namespace are
|
||||||
|
"consumer" routes, and these routing rules are only applied to outbound
|
||||||
|
connections originating from the same namespace as the Route, for which
|
||||||
|
the intended destination of the connections are a Service targeted as a
|
||||||
|
ParentRef of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: |-
|
||||||
|
Port is the network port this Route targets. It can be interpreted
|
||||||
|
differently based on the type of parent resource.
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Gateway, this targets all listeners
|
||||||
|
listening on the specified port that also support this kind of Route(and
|
||||||
|
select this Route). It's not recommended to set `Port` unless the
|
||||||
|
networking behaviors specified in a Route must apply to a specific port
|
||||||
|
as opposed to a listener(s) whose port(s) may be changed. When both Port
|
||||||
|
and SectionName are specified, the name and port of the selected listener
|
||||||
|
must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Service, this targets a specific port in the
|
||||||
|
Service spec. When both Port (experimental) and SectionName are specified,
|
||||||
|
the name and port of the selected port must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support other parent resources.
|
||||||
|
Implementations supporting other types of parent resources MUST clearly
|
||||||
|
document how/if Port is interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
For the purpose of status, an attachment is considered successful as
|
||||||
|
long as the parent resource accepts it partially. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment
|
||||||
|
from the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route,
|
||||||
|
the Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended
|
||||||
|
format: int32
|
||||||
|
maximum: 65535
|
||||||
|
minimum: 1
|
||||||
|
type: integer
|
||||||
|
sectionName:
|
||||||
|
description: |-
|
||||||
|
SectionName is the name of a section within the target resource. In the
|
||||||
|
following resources, SectionName is interpreted as the following:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway: Listener name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
* Service: Port name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support attaching Routes to other resources.
|
||||||
|
If that is the case, they MUST clearly document how SectionName is
|
||||||
|
interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
When unspecified (empty string), this will reference the entire resource.
|
||||||
|
For the purpose of status, an attachment is considered successful if at
|
||||||
|
least one section in the parent resource accepts it. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment from
|
||||||
|
the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route, the
|
||||||
|
Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
maxItems: 32
|
||||||
|
type: array
|
||||||
|
x-kubernetes-validations:
|
||||||
|
- message: sectionName or port must be specified when parentRefs includes
|
||||||
|
2 or more references to the same parent
|
||||||
|
rule: 'self.all(p1, self.all(p2, p1.group == p2.group && p1.kind
|
||||||
|
== p2.kind && p1.name == p2.name && (((!has(p1.__namespace__)
|
||||||
|
|| p1.__namespace__ == '''') && (!has(p2.__namespace__) || p2.__namespace__
|
||||||
|
== '''')) || (has(p1.__namespace__) && has(p2.__namespace__) &&
|
||||||
|
p1.__namespace__ == p2.__namespace__)) ? ((!has(p1.sectionName)
|
||||||
|
|| p1.sectionName == '''') == (!has(p2.sectionName) || p2.sectionName
|
||||||
|
== '''') && (!has(p1.port) || p1.port == 0) == (!has(p2.port)
|
||||||
|
|| p2.port == 0)): true))'
|
||||||
|
- message: sectionName or port must be unique when parentRefs includes
|
||||||
|
2 or more references to the same parent
|
||||||
|
rule: self.all(p1, self.exists_one(p2, p1.group == p2.group && p1.kind
|
||||||
|
== p2.kind && p1.name == p2.name && (((!has(p1.__namespace__)
|
||||||
|
|| p1.__namespace__ == '') && (!has(p2.__namespace__) || p2.__namespace__
|
||||||
|
== '')) || (has(p1.__namespace__) && has(p2.__namespace__) &&
|
||||||
|
p1.__namespace__ == p2.__namespace__ )) && (((!has(p1.sectionName)
|
||||||
|
|| p1.sectionName == '') && (!has(p2.sectionName) || p2.sectionName
|
||||||
|
== '')) || ( has(p1.sectionName) && has(p2.sectionName) && p1.sectionName
|
||||||
|
== p2.sectionName)) && (((!has(p1.port) || p1.port == 0) && (!has(p2.port)
|
||||||
|
|| p2.port == 0)) || (has(p1.port) && has(p2.port) && p1.port
|
||||||
|
== p2.port))))
|
||||||
|
rules:
|
||||||
|
description: Rules are a list of UDP matchers and actions.
|
||||||
|
items:
|
||||||
|
description: UDPRouteRule is the configuration for a given rule.
|
||||||
|
properties:
|
||||||
|
backendRefs:
|
||||||
|
description: |-
|
||||||
|
BackendRefs defines the backend(s) where matching requests should be
|
||||||
|
sent. If unspecified or invalid (refers to a non-existent resource or a
|
||||||
|
Service with no endpoints), the underlying implementation MUST actively
|
||||||
|
reject connection attempts to this backend. Packet drops must
|
||||||
|
respect weight; if an invalid backend is requested to have 80% of
|
||||||
|
the packets, then 80% of packets must be dropped instead.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core for Kubernetes Service
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended for Kubernetes ServiceImport
|
||||||
|
|
||||||
|
|
||||||
|
Support: Implementation-specific for any other resource
|
||||||
|
|
||||||
|
|
||||||
|
Support for weight: Extended
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
BackendRef defines how a Route should forward a request to a Kubernetes
|
||||||
|
resource.
|
||||||
|
|
||||||
|
|
||||||
|
Note that when a namespace different than the local namespace is specified, a
|
||||||
|
ReferenceGrant object is required in the referent namespace to allow that
|
||||||
|
namespace's owner to accept the reference. See the ReferenceGrant
|
||||||
|
documentation for details.
|
||||||
|
|
||||||
|
|
||||||
|
<gateway:experimental:description>
|
||||||
|
|
||||||
|
|
||||||
|
When the BackendRef points to a Kubernetes Service, implementations SHOULD
|
||||||
|
honor the appProtocol field if it is set for the target Service Port.
|
||||||
|
|
||||||
|
|
||||||
|
Implementations supporting appProtocol SHOULD recognize the Kubernetes
|
||||||
|
Standard Application Protocols defined in KEP-3726.
|
||||||
|
|
||||||
|
|
||||||
|
If a Service appProtocol isn't specified, an implementation MAY infer the
|
||||||
|
backend protocol through its own means. Implementations MAY infer the
|
||||||
|
protocol from the Route type referring to the backend Service.
|
||||||
|
|
||||||
|
|
||||||
|
If a Route is not able to send traffic to the backend using the specified
|
||||||
|
protocol then the backend is considered invalid. Implementations MUST set the
|
||||||
|
"ResolvedRefs" condition to "False" with the "UnsupportedProtocol" reason.
|
||||||
|
|
||||||
|
|
||||||
|
</gateway:experimental:description>
|
||||||
|
|
||||||
|
|
||||||
|
Note that when the BackendTLSPolicy object is enabled by the implementation,
|
||||||
|
there are some extra rules about validity to consider here. See the fields
|
||||||
|
where this struct is used for more information about the exact behavior.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
default: ""
|
||||||
|
description: |-
|
||||||
|
Group is the group of the referent. For example, "gateway.networking.k8s.io".
|
||||||
|
When unspecified or empty string, core API group is inferred.
|
||||||
|
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: Service
|
||||||
|
description: |-
|
||||||
|
Kind is the Kubernetes resource kind of the referent. For example
|
||||||
|
"Service".
|
||||||
|
|
||||||
|
|
||||||
|
Defaults to "Service" when not specified.
|
||||||
|
|
||||||
|
|
||||||
|
ExternalName services can refer to CNAME DNS records that may live
|
||||||
|
outside of the cluster and as such are difficult to reason about in
|
||||||
|
terms of conformance. They also may not be safe to forward to (see
|
||||||
|
CVE-2021-25740 for more information). Implementations SHOULD NOT
|
||||||
|
support ExternalName Services.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core (Services with a type other than ExternalName)
|
||||||
|
|
||||||
|
|
||||||
|
Support: Implementation-specific (Services with type ExternalName)
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: Name is the name of the referent.
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace is the namespace of the backend. When unspecified, the local
|
||||||
|
namespace is inferred.
|
||||||
|
|
||||||
|
|
||||||
|
Note that when a namespace different than the local namespace is specified,
|
||||||
|
a ReferenceGrant object is required in the referent namespace to allow that
|
||||||
|
namespace's owner to accept the reference. See the ReferenceGrant
|
||||||
|
documentation for details.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: |-
|
||||||
|
Port specifies the destination port number to use for this resource.
|
||||||
|
Port is required when the referent is a Kubernetes Service. In this
|
||||||
|
case, the port number is the service port number, not the target port.
|
||||||
|
For other resources, destination port might be derived from the referent
|
||||||
|
resource or this field.
|
||||||
|
format: int32
|
||||||
|
maximum: 65535
|
||||||
|
minimum: 1
|
||||||
|
type: integer
|
||||||
|
weight:
|
||||||
|
default: 1
|
||||||
|
description: |-
|
||||||
|
Weight specifies the proportion of requests forwarded to the referenced
|
||||||
|
backend. This is computed as weight/(sum of all weights in this
|
||||||
|
BackendRefs list). For non-zero values, there may be some epsilon from
|
||||||
|
the exact proportion defined here depending on the precision an
|
||||||
|
implementation supports. Weight is not a percentage and the sum of
|
||||||
|
weights does not need to equal 100.
|
||||||
|
|
||||||
|
|
||||||
|
If only one backend is specified and it has a weight greater than 0, 100%
|
||||||
|
of the traffic is forwarded to that backend. If weight is set to 0, no
|
||||||
|
traffic should be forwarded for this entry. If unspecified, weight
|
||||||
|
defaults to 1.
|
||||||
|
|
||||||
|
|
||||||
|
Support for this field varies based on the context where used.
|
||||||
|
format: int32
|
||||||
|
maximum: 1000000
|
||||||
|
minimum: 0
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
x-kubernetes-validations:
|
||||||
|
- message: Must have port for Service reference
|
||||||
|
rule: '(size(self.group) == 0 && self.kind == ''Service'')
|
||||||
|
? has(self.port) : true'
|
||||||
|
maxItems: 16
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
maxItems: 16
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- rules
|
||||||
|
type: object
|
||||||
|
status:
|
||||||
|
description: Status defines the current state of UDPRoute.
|
||||||
|
properties:
|
||||||
|
parents:
|
||||||
|
description: |-
|
||||||
|
Parents is a list of parent resources (usually Gateways) that are
|
||||||
|
associated with the route, and the status of the route with respect to
|
||||||
|
each parent. When this route attaches to a parent, the controller that
|
||||||
|
manages the parent must add an entry to this list when the controller
|
||||||
|
first sees the route and should update the entry as appropriate when the
|
||||||
|
route or gateway is modified.
|
||||||
|
|
||||||
|
|
||||||
|
Note that parent references that cannot be resolved by an implementation
|
||||||
|
of this API will not be added to this list. Implementations of this API
|
||||||
|
can only populate Route status for the Gateways/parent resources they are
|
||||||
|
responsible for.
|
||||||
|
|
||||||
|
|
||||||
|
A maximum of 32 Gateways will be represented in this list. An empty list
|
||||||
|
means the route has not been attached to any Gateway.
|
||||||
|
items:
|
||||||
|
description: |-
|
||||||
|
RouteParentStatus describes the status of a route with respect to an
|
||||||
|
associated Parent.
|
||||||
|
properties:
|
||||||
|
conditions:
|
||||||
|
description: |-
|
||||||
|
Conditions describes the status of the route with respect to the Gateway.
|
||||||
|
Note that the route's availability is also subject to the Gateway's own
|
||||||
|
status conditions and listener status.
|
||||||
|
|
||||||
|
|
||||||
|
If the Route's ParentRef specifies an existing Gateway that supports
|
||||||
|
Routes of this kind AND that Gateway's controller has sufficient access,
|
||||||
|
then that Gateway's controller MUST set the "Accepted" condition on the
|
||||||
|
Route, to indicate whether the route has been accepted or rejected by the
|
||||||
|
Gateway, and why.
|
||||||
|
|
||||||
|
|
||||||
|
A Route MUST be considered "Accepted" if at least one of the Route's
|
||||||
|
rules is implemented by the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
There are a number of cases where the "Accepted" condition may not be set
|
||||||
|
due to lack of controller visibility, that includes when:
|
||||||
|
|
||||||
|
|
||||||
|
* The Route refers to a non-existent parent.
|
||||||
|
* The Route is of a type that the controller does not support.
|
||||||
|
* The Route is in a namespace the controller does not have access to.
|
||||||
|
items:
|
||||||
|
description: "Condition contains details for one aspect of
|
||||||
|
the current state of this API Resource.\n---\nThis struct
|
||||||
|
is intended for direct use as an array at the field path
|
||||||
|
.status.conditions. For example,\n\n\n\ttype FooStatus
|
||||||
|
struct{\n\t // Represents the observations of a foo's
|
||||||
|
current state.\n\t // Known .status.conditions.type are:
|
||||||
|
\"Available\", \"Progressing\", and \"Degraded\"\n\t //
|
||||||
|
+patchMergeKey=type\n\t // +patchStrategy=merge\n\t //
|
||||||
|
+listType=map\n\t // +listMapKey=type\n\t Conditions
|
||||||
|
[]metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\"
|
||||||
|
patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t
|
||||||
|
\ // other fields\n\t}"
|
||||||
|
properties:
|
||||||
|
lastTransitionTime:
|
||||||
|
description: |-
|
||||||
|
lastTransitionTime is the last time the condition transitioned from one status to another.
|
||||||
|
This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
|
||||||
|
format: date-time
|
||||||
|
type: string
|
||||||
|
message:
|
||||||
|
description: |-
|
||||||
|
message is a human readable message indicating details about the transition.
|
||||||
|
This may be an empty string.
|
||||||
|
maxLength: 32768
|
||||||
|
type: string
|
||||||
|
observedGeneration:
|
||||||
|
description: |-
|
||||||
|
observedGeneration represents the .metadata.generation that the condition was set based upon.
|
||||||
|
For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
|
||||||
|
with respect to the current state of the instance.
|
||||||
|
format: int64
|
||||||
|
minimum: 0
|
||||||
|
type: integer
|
||||||
|
reason:
|
||||||
|
description: |-
|
||||||
|
reason contains a programmatic identifier indicating the reason for the condition's last transition.
|
||||||
|
Producers of specific condition types may define expected values and meanings for this field,
|
||||||
|
and whether the values are considered a guaranteed API.
|
||||||
|
The value should be a CamelCase string.
|
||||||
|
This field may not be empty.
|
||||||
|
maxLength: 1024
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: status of the condition, one of True, False,
|
||||||
|
Unknown.
|
||||||
|
enum:
|
||||||
|
- "True"
|
||||||
|
- "False"
|
||||||
|
- Unknown
|
||||||
|
type: string
|
||||||
|
type:
|
||||||
|
description: |-
|
||||||
|
type of condition in CamelCase or in foo.example.com/CamelCase.
|
||||||
|
---
|
||||||
|
Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
|
||||||
|
useful (see .node.status.conditions), the ability to deconflict is important.
|
||||||
|
The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
|
||||||
|
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
|
||||||
|
minItems: 1
|
||||||
|
type: array
|
||||||
|
x-kubernetes-list-map-keys:
|
||||||
|
- type
|
||||||
|
x-kubernetes-list-type: map
|
||||||
|
controllerName:
|
||||||
|
description: |-
|
||||||
|
ControllerName is a domain/path string that indicates the name of the
|
||||||
|
controller that wrote this status. This corresponds with the
|
||||||
|
controllerName field on GatewayClass.
|
||||||
|
|
||||||
|
|
||||||
|
Example: "example.net/gateway-controller".
|
||||||
|
|
||||||
|
|
||||||
|
The format of this field is DOMAIN "/" PATH, where DOMAIN and PATH are
|
||||||
|
valid Kubernetes names
|
||||||
|
(https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
|
||||||
|
|
||||||
|
|
||||||
|
Controllers MUST populate this field when writing status. Controllers should ensure that
|
||||||
|
entries to status populated with their ControllerName are cleaned up when they are no
|
||||||
|
longer necessary.
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$
|
||||||
|
type: string
|
||||||
|
parentRef:
|
||||||
|
description: |-
|
||||||
|
ParentRef corresponds with a ParentRef in the spec that this
|
||||||
|
RouteParentStatus struct describes the status of.
|
||||||
|
properties:
|
||||||
|
group:
|
||||||
|
default: gateway.networking.k8s.io
|
||||||
|
description: |-
|
||||||
|
Group is the group of the referent.
|
||||||
|
When unspecified, "gateway.networking.k8s.io" is inferred.
|
||||||
|
To set the core API group (such as for a "Service" kind referent),
|
||||||
|
Group must be explicitly set to "" (empty string).
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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: Gateway
|
||||||
|
description: |-
|
||||||
|
Kind is kind of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
There are two kinds of parent resources with "Core" support:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway (Gateway conformance profile)
|
||||||
|
* Service (Mesh conformance profile, ClusterIP Services only)
|
||||||
|
|
||||||
|
|
||||||
|
Support for other resources is Implementation-Specific.
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name is the name of the referent.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 253
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace is the namespace of the referent. When unspecified, this refers
|
||||||
|
to the local namespace of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
Note that there are specific rules for ParentRefs which cross namespace
|
||||||
|
boundaries. Cross-namespace references are only valid if they are explicitly
|
||||||
|
allowed by something in the namespace they are referring to. For example:
|
||||||
|
Gateway has the AllowedRoutes field, and ReferenceGrant provides a
|
||||||
|
generic way to enable any other kind of cross-namespace reference.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in the same namespace are "producer"
|
||||||
|
routes, which apply default routing rules to inbound connections from
|
||||||
|
any namespace to the Service.
|
||||||
|
|
||||||
|
|
||||||
|
ParentRefs from a Route to a Service in a different namespace are
|
||||||
|
"consumer" routes, and these routing rules are only applied to outbound
|
||||||
|
connections originating from the same namespace as the Route, for which
|
||||||
|
the intended destination of the connections are a Service targeted as a
|
||||||
|
ParentRef of the Route.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
maxLength: 63
|
||||||
|
minLength: 1
|
||||||
|
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: |-
|
||||||
|
Port is the network port this Route targets. It can be interpreted
|
||||||
|
differently based on the type of parent resource.
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Gateway, this targets all listeners
|
||||||
|
listening on the specified port that also support this kind of Route(and
|
||||||
|
select this Route). It's not recommended to set `Port` unless the
|
||||||
|
networking behaviors specified in a Route must apply to a specific port
|
||||||
|
as opposed to a listener(s) whose port(s) may be changed. When both Port
|
||||||
|
and SectionName are specified, the name and port of the selected listener
|
||||||
|
must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
When the parent resource is a Service, this targets a specific port in the
|
||||||
|
Service spec. When both Port (experimental) and SectionName are specified,
|
||||||
|
the name and port of the selected port must match both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support other parent resources.
|
||||||
|
Implementations supporting other types of parent resources MUST clearly
|
||||||
|
document how/if Port is interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
For the purpose of status, an attachment is considered successful as
|
||||||
|
long as the parent resource accepts it partially. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment
|
||||||
|
from the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route,
|
||||||
|
the Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Extended
|
||||||
|
format: int32
|
||||||
|
maximum: 65535
|
||||||
|
minimum: 1
|
||||||
|
type: integer
|
||||||
|
sectionName:
|
||||||
|
description: |-
|
||||||
|
SectionName is the name of a section within the target resource. In the
|
||||||
|
following resources, SectionName is interpreted as the following:
|
||||||
|
|
||||||
|
|
||||||
|
* Gateway: Listener name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
* Service: Port name. When both Port (experimental) and SectionName
|
||||||
|
are specified, the name and port of the selected listener must match
|
||||||
|
both specified values.
|
||||||
|
|
||||||
|
|
||||||
|
Implementations MAY choose to support attaching Routes to other resources.
|
||||||
|
If that is the case, they MUST clearly document how SectionName is
|
||||||
|
interpreted.
|
||||||
|
|
||||||
|
|
||||||
|
When unspecified (empty string), this will reference the entire resource.
|
||||||
|
For the purpose of status, an attachment is considered successful if at
|
||||||
|
least one section in the parent resource accepts it. For example, Gateway
|
||||||
|
listeners can restrict which Routes can attach to them by Route kind,
|
||||||
|
namespace, or hostname. If 1 of 2 Gateway listeners accept attachment from
|
||||||
|
the referencing Route, the Route MUST be considered successfully
|
||||||
|
attached. If no Gateway listeners accept attachment from this Route, the
|
||||||
|
Route MUST be considered detached from the Gateway.
|
||||||
|
|
||||||
|
|
||||||
|
Support: Core
|
||||||
|
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
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- controllerName
|
||||||
|
- parentRef
|
||||||
|
type: object
|
||||||
|
maxItems: 32
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- parents
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
subresources:
|
||||||
|
status: {}
|
||||||
|
status:
|
||||||
|
acceptedNames:
|
||||||
|
kind: ""
|
||||||
|
plural: ""
|
||||||
|
conditions: null
|
||||||
|
storedVersions: null
|
||||||
Loading…
Reference in New Issue
Block a user