Package v1alpha1 contains API Schema definitions for the kubelb.k8c.io v1alpha1 API group
Addresses is the Schema for the addresses API
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | Addresses | ||
metadata ObjectMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
spec AddressesSpec | |||
status AddressesStatus |
AddressesList contains a list of Addresses
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | AddressesList | ||
metadata ListMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
items Addresses array |
AddressesSpec defines the desired state of Addresses
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
addresses EndpointAddress array | Addresses contains a list of addresses. | MinItems: 1 |
AddressesStatus defines the observed state of Addresses
Appears in:
Underlying type: string
Validation:
Appears in:
| Field | Description |
|---|---|
all | |
service | |
ingress | |
gateway | |
httproute | |
grpcroute | |
tcproute | |
udproute | |
tlsroute |
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
propagatedAnnotations map[string]string | PropagatedAnnotations defines the set of annotation key patterns that will be propagated to load balancing resources. Keys support shell-style glob patterns (e.g. “nginx.ingress.kubernetes.io/*”). Keep the value empty to allow any value; otherwise the value is a comma-separated list of permitted values for exact match. Tenant configuration has higher precedence than the annotations specified at the Config level. | Optional: {} | |
propagateAllAnnotations boolean | PropagateAllAnnotations defines whether all annotations will be propagated to load balancing resources. If set to true, PropagatedAnnotations is ignored. DeniedAnnotations still applies on top of this flag. Tenant configuration has higher precedence than the value specified at the Config level. | Optional: {} | |
deniedAnnotations string array | DeniedAnnotations is a list of annotation key patterns that are excluded from propagation, regardless of PropagateAllAnnotations or PropagatedAnnotations. Patterns support shell-style globbing (e.g. “nginx.ingress.kubernetes.io/*”). Tenant configuration has higher precedence than the value specified at the Config level. | Optional: {} | |
defaultAnnotations object (keys:AnnotatedResource, values:Annotations) | DefaultAnnotations defines the list of annotations(key-value pairs) that will be set on the load balancing resources if not already present. A special key all can be used to apply the sameset of annotations to all resources. Tenant configuration has higher precedence than the annotations specified at the Config level. | Optional: {} |
Underlying type: object
Appears in:
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
mode BackendTransportMode | Mode controls how management Envoy connects to tenant backends. Direct preserves the existing node-address plus workload NodePort topology. MTLS routes L7 and L4 TCP traffic through a KubeLB-managed tenant Envoy proxy. MTLS is a Beta / Technical Preview feature: safe to enable and supported, but its configuration surface may still change between releases with migration instructions. See https://docs.kubermatic.com/kubermatic/main/architecture/feature-stages/ | Direct | Enum: [Direct MTLS] Optional: {} |
udp BackendTransportUDP | UDP configures how UDP traffic reaches tenant backends when Mode is MTLS. It has no effect in Direct mode. | Optional: {} | |
tenantProxy TenantProxy | TenantProxy tunes the KubeLB-managed tenant Envoy proxy used in the MTLS topology. It has no effect in Direct mode. | Optional: {} |
Underlying type: string
Appears in:
| Field | Description |
|---|---|
Direct | |
MTLS |
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
mode BackendTransportUDPMode | Mode selects the UDP transport in the MTLS topology. Tunnel wraps each UDP session in CONNECT-UDP over the encrypted mTLS tenant proxy port. Direct is an escape hatch that keeps UDP on plain per-service NodePorts (unencrypted) for workloads sensitive to the tunnel’s MTU overhead or Envoy’s upstream CONNECT-UDP maturity. | Tunnel | Enum: [Tunnel Direct] Optional: {} |
Underlying type: string
Appears in:
| Field | Description |
|---|---|
Tunnel | |
Direct |
CertificatesSettings defines the settings for the certificates.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
disable boolean | Disable is a flag that can be used to disable certificate automation for a tenant. | ||
defaultClusterIssuer string | DefaultClusterIssuer is the Cluster Issuer to use for the certificates by default. This is applied when the cluster issuer is not specified in the annotations on the resource itself. | ||
allowedDomains string array | AllowedDomains is a list of allowed domains for automated Certificate management. Has a higher precedence than the value specified in the Config. If empty, the value specified in tenant.spec.allowedDomains will be used.Examples: - [".example.com"] -> this allows subdomains at the root level such as example.com and test.example.com but won’t allow domains at one level above like test.test.example.com - [".example.com"] -> this allows all subdomains of example.com such as test.dns.example.com and dns.example.com - [“example.com”] -> this allows only example.com - [""] or [""] -> this allows all domains Note: “**” was added as a special case to allow any levels of subdomains that come before it. “*” works for only 1 level. |
CircuitBreaker defines the Circuit Breaker configuration for Envoy clusters. Circuit breakers prevent cascading failures by limiting connections/requests to upstream clusters. For more info: https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/circuit_breaking
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
maxConnections integer | MaxConnections is the maximum number of connections that Envoy will establish to all endpoints in the cluster. If not specified, the default is 1024. | Maximum: 4.294967295e+09 Minimum: 0 Optional: {} | |
maxPendingRequests integer | MaxPendingRequests is the maximum number of pending requests that Envoy will queue to the cluster. If not specified, the default is 1024. | Maximum: 4.294967295e+09 Minimum: 0 Optional: {} | |
maxParallelRequests integer | MaxParallelRequests is the maximum number of parallel requests that Envoy will make to the cluster. This is applicable to HTTP/2 and gRPC connections. If not specified, the default is 1024. | Maximum: 4.294967295e+09 Minimum: 0 Optional: {} | |
maxParallelRetries integer | MaxParallelRetries is the maximum number of parallel retries that Envoy will make to the cluster. If not specified, the default is 3. | Maximum: 4.294967295e+09 Minimum: 0 Optional: {} | |
maxRequestsPerConnection integer | MaxRequestsPerConnection is the maximum number of requests that Envoy will make over a single connection to the cluster. If not specified, there is no limit. | Maximum: 4.294967295e+09 Minimum: 0 Optional: {} | |
perEndpoint PerEndpointCircuitBreaker | PerEndpoint configures circuit breaker thresholds that apply to individual endpoints rather than the whole cluster. | Optional: {} |
Config is the object that represents the Config for the KubeLB management controller.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | Config | ||
metadata ObjectMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
spec ConfigSpec | |||
status ConfigStatus |
ConfigCertificatesSettings defines the global settings for the certificates.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
disable boolean | Disable is a flag that can be used to disable certificate automation globally for all the tenants. | ||
defaultClusterIssuer string | DefaultClusterIssuer is the Cluster Issuer to use for the certificates by default. This is applied when the cluster issuer is not specified in the annotations on the resource itself. |
ConfigDNSSettings defines the global settings for DNS management and automation.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
disable boolean | Disable is a flag that can be used to disable DNS automation globally for all the tenants. | ||
wildcardDomain string | WildcardDomain is the domain that will be used as the base domain to create wildcard DNS records for DNS resources. This is only used for determining the hostname for LoadBalancer and Tunnel resources. | Optional: {} | |
allowExplicitHostnames boolean | AllowExplicitHostnames is a flag that can be used to allow explicit hostnames to be used for DNS resources. This is only used when LoadBalancer.Spec.Hostname or Tunnel.Spec.Hostname is set. | Optional: {} | |
useDNSAnnotations boolean | UseDNSAnnotations is a flag that can be used to add DNS annotations to DNS resources. This is only used when LoadBalancer.Spec.Hostname or Tunnel.Spec.Hostname is set. | Optional: {} | |
useCertificateAnnotations boolean | UseCertificateAnnotations is a flag that can be used to add Certificate annotations to Certificate resources. This is only used when LoadBalancer.Spec.Hostname or Tunnel.Spec.Hostname is set. | Optional: {} |
ConfigList contains a list of Config
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | ConfigList | ||
metadata ListMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
items Config array |
ConfigSpec defines the desired state of the Config
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
propagatedAnnotations map[string]string | PropagatedAnnotations defines the set of annotation key patterns that will be propagated to load balancing resources. Keys support shell-style glob patterns (e.g. “nginx.ingress.kubernetes.io/*”). Keep the value empty to allow any value; otherwise the value is a comma-separated list of permitted values for exact match. Tenant configuration has higher precedence than the annotations specified at the Config level. | Optional: {} | |
propagateAllAnnotations boolean | PropagateAllAnnotations defines whether all annotations will be propagated to load balancing resources. If set to true, PropagatedAnnotations is ignored. DeniedAnnotations still applies on top of this flag. Tenant configuration has higher precedence than the value specified at the Config level. | Optional: {} | |
deniedAnnotations string array | DeniedAnnotations is a list of annotation key patterns that are excluded from propagation, regardless of PropagateAllAnnotations or PropagatedAnnotations. Patterns support shell-style globbing (e.g. “nginx.ingress.kubernetes.io/*”). Tenant configuration has higher precedence than the value specified at the Config level. | Optional: {} | |
defaultAnnotations object (keys:AnnotatedResource, values:Annotations) | DefaultAnnotations defines the list of annotations(key-value pairs) that will be set on the load balancing resources if not already present. A special key all can be used to apply the sameset of annotations to all resources. Tenant configuration has higher precedence than the annotations specified at the Config level. | Optional: {} | |
envoyProxy EnvoyProxy | EnvoyProxy defines the desired state of the Envoy Proxy | ||
backendTransport BackendTransport | BackendTransport controls how management Envoy connects to tenant backends. Defaults to Direct for backward compatibility. | Optional: {} | |
loadBalancer LoadBalancerSettings | |||
ingress IngressSettings | |||
gatewayAPI GatewayAPISettings | |||
dns ConfigDNSSettings | |||
certificates ConfigCertificatesSettings | |||
tunnel TunnelSettings | |||
circuitBreaker CircuitBreaker | CircuitBreaker defines the default circuit breaker configuration for all Envoy clusters. These settings can be overridden at the Tenant level. | Optional: {} | |
timeouts EnvoyTimeouts | Timeouts defines default Envoy timeouts applied to all routes and load balancers in this cluster. Tenant and Route/LoadBalancer settings override these defaults per-field. | Optional: {} | |
loadBalancerPolicy LoadBalancerPolicy | LoadBalancerPolicy defines the default load balancing policy for all Envoy clusters. These settings can be overridden at the Tenant and LoadBalancer/Route level. | Enum: [RoundRobin LeastRequest Random] Optional: {} | |
healthCheck HealthCheck | HealthCheck defines the default active health check for all Envoy clusters. Whole-struct override: Tenant and LoadBalancer/Route settings replace this entirely rather than merging per-field. | Optional: {} | |
waf WAFSettings | WAF defines WAF-related settings. | Optional: {} | |
prometheus PrometheusSettings | Prometheus, when set, gives the manager a Prometheus query endpoint to read metrics from. Optional and bring-your-own: KubeLB does not run a Prometheus. | Optional: {} | |
networkPolicy NetworkPolicySettings | NetworkPolicy defines the default network policy settings for all tenant namespaces. Tenant has higher precedence than the settings specified at the Config level. | Optional: {} | |
insights InsightsSettings | Insights defines settings for the KubeLB insights engine. It only takes effect when the manager runs with –enable-insights. | Optional: {} |
ConfigStatus defines the observed state of the Config.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
version Version |
DNSSettings defines the tenant specific settings for DNS management and automation.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
disable boolean | Disable is a flag that can be used to disable DNS automation for a tenant. | ||
allowedDomains string array | AllowedDomains is a list of allowed domains for automated DNS management. Has a higher precedence than the value specified in the Config. If empty, the value specified in tenant.spec.allowedDomains will be used.Examples: - [".example.com"] -> this allows subdomains at the root level such as example.com and test.example.com but won’t allow domains at one level above like test.test.example.com - [".example.com"] -> this allows all subdomains of example.com such as test.dns.example.com and dns.example.com - [“example.com”] -> this allows only example.com - [""] or [""] -> this allows all domains Note: “**” was added as a special case to allow any levels of subdomains that come before it. “*” works for only 1 level. | ||
wildcardDomain string | WildcardDomain is the domain that will be used as the base domain to create wildcard DNS records for DNS resources. This is only used for determining the hostname for LoadBalancer and Tunnel resources. | Optional: {} | |
allowExplicitHostnames boolean | AllowExplicitHostnames is a flag that can be used to allow explicit hostnames to be used for DNS resources. This is only used when LoadBalancer.Spec.Hostname or Tunnel.Spec.Hostname is set. | Optional: {} | |
useDNSAnnotations boolean | UseDNSAnnotations is a flag that can be used to add DNS annotations to DNS resources. This is only used when LoadBalancer.Spec.Hostname or Tunnel.Spec.Hostname is set. | Optional: {} | |
useCertificateAnnotations boolean | UseCertificateAnnotations is a flag that can be used to add Certificate annotations to Certificate resources. This is only used when LoadBalancer.Spec.Hostname or Tunnel.Spec.Hostname is set. | Optional: {} |
EndpointAddress is a tuple that describes a single endpoint address. At least one of IP or Hostname must be set.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
ip string | The IP of the endpoint. This can be an IPv4 or IPv6 address. The IP address must not be IP CIDR, Loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24) addresses. | Optional: {} | |
hostname string | The Hostname of this endpoint. Used when the backend has no stable IP and must be resolved by DNS. If both ip and hostname are set, ip wins. | Optional: {} |
EndpointPort is a tuple that describes a single port.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
name string | The name of this port. This must match the ’name’ field in the corresponding ServicePort. Must be a DNS_LABEL. Optional only if one port is defined. | Optional: {} | |
port integer | The port number of the endpoint. | ||
protocol Protocol | The IP protocol for this port. Defaults to “TCP”. | Enum: [TCP UDP] |
EnvoyProxy defines the desired state of the EnvoyProxy
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
topology EnvoyProxyTopology | Topology defines the deployment topology for Envoy Proxy. The only supported value is: shared. DEPRECATION NOTICE: The values “dedicated” and “global” are deprecated and will be removed in a future release. They will now default to shared topology. | shared | Enum: [shared dedicated global] Optional: {} |
useDaemonset boolean | UseDaemonset defines whether Envoy Proxy will run as daemonset. By default, Envoy Proxy will run as deployment. If set to true, Replicas will be ignored. | Optional: {} | |
replicas integer | Replicas defines the number of replicas for Envoy Proxy. This field is ignored if UseDaemonset is set to true. | 3 | Minimum: 1 Optional: {} |
singlePodPerNode boolean | SinglePodPerNode defines whether Envoy Proxy pods will be spread across nodes. This ensures that multiple replicas are not running on the same node. | Optional: {} | |
nodeSelector object (keys:string, values:string) | NodeSelector is used to select nodes to run Envoy Proxy. If specified, the node must have all the indicated labels. | Optional: {} | |
tolerations Toleration array | Tolerations is used to schedule Envoy Proxy pods on nodes with matching taints. | Optional: {} | |
resources ResourceRequirements | Resources defines the resource requirements for Envoy Proxy. | Optional: {} | |
affinity Affinity | Affinity is used to schedule Envoy Proxy pods on nodes with matching affinity. | Optional: {} | |
image string | Image defines the Envoy Proxy image to use. | Optional: {} | |
gracefulShutdown EnvoyProxyGracefulShutdown | GracefulShutdown defines the graceful shutdown configuration for Envoy Proxy. | Optional: {} | |
overloadManager EnvoyProxyOverloadManager | OverloadManager defines the overload manager configuration for Envoy XDS bootstrap. | Optional: {} | |
maxEndpointsPerCluster integer | MaxEndpointsPerCluster limits the number of upstream endpoint addresses per Envoy cluster. When set to a positive value, only the first N endpoints are included in the xDS as upstream addresses. Defaults to 0, which means no limit. | Optional: {} | |
imagePullSecrets LocalObjectReference array | ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling the Envoy Proxy image. If not set, imagePullSecrets are auto-detected from the manager pod. | Optional: {} | |
podMonitor EnvoyProxyPodMonitor | PodMonitor enables creation of PodMonitor resources for Envoy Proxy pods to enable metrics scraping by Prometheus Operator. | Optional: {} | |
headerLimits EnvoyProxyHeaderLimits | HeaderLimits configures the client header size and count limits for the KubeLB-managed Envoy Proxy. Unset fields default to Envoy’s maximum so the managed proxy never rejects headers that the edge proxy already accepted. | Optional: {} |
EnvoyProxyGracefulShutdown defines the graceful shutdown configuration for Envoy Proxy
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
disabled boolean | Disabled controls whether graceful shutdown is disabled | Optional: {} | |
drainTimeout Duration | DrainTimeout is the maximum time to wait for connections to drain. Defaults to 60s. Must be less than TerminationGracePeriodSeconds. | 60s | Optional: {} |
minDrainDuration Duration | MinDrainDuration is the minimum time to wait before checking connection count. This prevents premature termination. Defaults to 5s. | 5s | Optional: {} |
terminationGracePeriodSeconds integer | TerminationGracePeriodSeconds is the grace period for pod termination. Must be greater than DrainTimeout. Defaults to 300s. | 300 | Minimum: 30 Optional: {} |
shutdownManagerImage string | ShutdownManagerImage is the Docker image for the shutdown-manager sidecar. Defaults to “docker.io/envoyproxy/gateway:v1.8.3” | Optional: {} |
EnvoyProxyHeaderLimits configures the client header size and count limits for the KubeLB-managed Envoy Proxy. Envoy rejects requests whose headers exceed its 60 KiB default with HTTP 431; these fields raise that ceiling.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
maxRequestHeadersKb integer | MaxRequestHeadersKb is the maximum request header block size in KiB. Envoy’s default is 60; defaults to 8192 (Envoy’s maximum) when unset. | Maximum: 8192 Minimum: 1 Optional: {} | |
maxRequestHeadersCount integer | MaxRequestHeadersCount is the maximum number of request headers. Envoy’s default is 100; defaults to 4096 when unset. | Minimum: 1 Optional: {} | |
maxResponseHeadersKb integer | MaxResponseHeadersKb is the maximum upstream response header block size in KiB. Envoy’s default is 60; defaults to 8192 (Envoy’s maximum) when unset. | Maximum: 8192 Minimum: 1 Optional: {} |
EnvoyProxyOverloadManager defines the overload manager configuration for Envoy XDS
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
enabled boolean | Enabled controls whether overload manager is enabled | Optional: {} | |
maxActiveDownstreamConnections integer | MaxActiveDownstreamConnections is the maximum number of active downstream connections for the Envoy. | Optional: {} | |
maxHeapSizeBytes integer | MaxHeapSizeBytes is the maximum heap size for the Envoy in bytes. On reaching the limit, the Envoy will start to reject new connections. | Optional: {} |
EnvoyProxyPodMonitor defines the PodMonitor configuration for Envoy Proxy
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
enabled boolean | Enabled controls whether a PodMonitor is created for Envoy Proxy pods. | Optional: {} |
Underlying type: string
Appears in:
| Field | Description |
|---|---|
shared | |
dedicated | |
global |
EnvoyTimeouts configures upstream and connection timeouts on the KubeLB-managed Envoy proxy. Nil duration fields inherit from the next tier (Route/LB → Tenant → Config → built-in default). A value of 0s explicitly disables that timeout (Envoy semantics).
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
request Duration | Request is the total upstream request timeout for HTTP routes (Envoy route.timeout). Built-in default: 0 (disabled). Applies to: Ingress, HTTPRoute, GRPCRoute. | Optional: {} | |
streamIdle Duration | StreamIdle is the maximum time an HTTP stream can be idle without any bytes flowing in either direction (Envoy stream_idle_timeout). Built-in default: 1h. Applies to: Ingress, HTTPRoute, GRPCRoute. | Optional: {} | |
requestHeaders Duration | RequestHeaders is the maximum time to receive complete request headers (Envoy request_headers_timeout). Built-in default: 0 (disabled). Applies to: Ingress, HTTPRoute, GRPCRoute. | Optional: {} | |
idleConnection Duration | IdleConnection is the maximum HTTP connection idle time (Envoy common_http_protocol_options.idle_timeout). Built-in default: 1h. Applies to: Ingress, HTTPRoute, GRPCRoute. | Optional: {} | |
tcpIdle Duration | TCPIdle is the TCP proxy idle timeout (Envoy tcp_proxy.idle_timeout). Built-in default: 1h. Applies to: TCPRoute, TLSRoute, L4 LoadBalancer. | Optional: {} | |
connect Duration | Connect is the upstream cluster TCP connect timeout (Envoy cluster.connect_timeout). Built-in default: 5s. Applies to: all routes and L4 LoadBalancer. | Optional: {} | |
udpIdle Duration | UDPIdle is the UDP session idle timeout. When set, it applies to the management Envoy UDP proxy sessions (Envoy udp_proxy idle_timeout) and, in the MTLS topology, to the CONNECT-UDP tunnel streams on both hops. When unset, the per-hop Envoy defaults apply (60s udp_proxy session idle, 5m tunnel stream idle). Applies to: UDPRoute and L4 LoadBalancer UDP ports. | Optional: {} |
GRPCHealthCheck configures a gRPC active health check (grpc.health.v1.Health).
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
serviceName string | ServiceName is the value passed as the service name in the gRPC health check request. Empty checks overall server health. Optional. | Optional: {} | |
authority string | Authority is the value of the :authority header on the gRPC health check request. Defaults to the cluster name (Envoy default) when unset. Optional. | Optional: {} |
GatewayAPISettings defines the settings for the gateway API.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
class string | Class is the class of the gateway API to use. This can be used to specify a specific gateway API implementation. This has higher precedence than the value specified in the Config. | Optional: {} | |
classMappings GatewayClassMapping array | ClassMappings defines gateway class name mappings from tenant clusters to the management cluster. Config mappings are defaults. Tenant mappings override Config mappings with the same source class. | MaxItems: 32 Optional: {} | |
disable boolean | Disable is a flag that can be used to disable Gateway API for a tenant. | ||
enforceReferenceGrants boolean | EnforceReferenceGrants requires a ReferenceGrant in the target namespace for any cross-namespace backendRef (route -> Service) or Gateway TLS certificateRef (Gateway -> Secret) in the tenant cluster. References without a matching grant are dropped and reported via the ResolvedRefs=False/RefNotPermitted condition. The Tenant value overrides the Config value; unset means inherit (Tenant) or disabled (Config). | Optional: {} | |
defaultGateway ObjectReference | DefaultGateway is the default gateway reference to use for the tenant. This is only used for load balancer hostname and tunneling. | Optional: {} | |
gateway GatewaySettings | |||
disableHTTPRoute boolean | |||
disableGRPCRoute boolean | |||
disableTCPRoute boolean | |||
disableUDPRoute boolean | |||
disableTLSRoute boolean | |||
disableBackendTrafficPolicy boolean | |||
disableClientTrafficPolicy boolean |
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
classMappings GatewayClassMapping array | ClassMappings defines effective gateway class name mappings from tenant clusters to the management cluster. | MaxItems: 32 Optional: {} | |
enforceReferenceGrants boolean | EnforceReferenceGrants is the effective (Config default, Tenant override) value of spec.gatewayAPI.enforceReferenceGrants for this tenant. | Optional: {} |
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
disableHTTPRoute boolean | |||
disableGRPCRoute boolean | |||
disableTCPRoute boolean | |||
disableUDPRoute boolean | |||
disableTLSRoute boolean | |||
disableBackendTrafficPolicy boolean | |||
disableClientTrafficPolicy boolean |
GatewayClassMapping defines a gateway class mapping from tenant clusters to the management cluster.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
source string | Source is the gateway class name in the tenant cluster. | MaxLength: 253 MinLength: 1 | |
target string | Target is the gateway class name in the management cluster. | MaxLength: 253 MinLength: 1 |
GatewaySettings defines the settings for the gateway resource.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
limit integer | Limit is the maximum number of gateways to create. If a lower limit is set than the number of reources that exist, the limit will be disallow creation of new resources but will not delete existing resources. The reason behind this is that it is not possible for KubeLB to know which resources are safe to remove. |
HTTPHealthCheck configures an HTTP/1.1 active health check.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
path string | Path is the HTTP request path used for the health check. Defaults to “/”. | Optional: {} | |
host string | Host is the value of the Host/authority header on the health check request. Defaults to the cluster name (Envoy default) when unset. | Optional: {} | |
expectedStatuses integer array | ExpectedStatuses is the list of HTTP status codes considered healthy. Defaults to [200] when unset. Each value must be in the range 100-599. | items:Maximum: 599 items:Minimum: 100 Optional: {} |
HealthCheck configures Envoy active health checking for the upstream clusters backing this resource. When unset, KubeLB applies a default TCP connect-only check. This is a whole-struct override: the effective check is taken from the first tier that sets it (Route/LoadBalancer > Tenant > Config > built-in default), never merged field-by-field across tiers. Fields left unset within the chosen tier fall back to the built-in defaults documented below. For more info: https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/health_checking
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
type HealthCheckType | Type of health check to perform. Defaults to TCP (connect-only) when unset. | Enum: [TCP HTTP GRPC] Optional: {} | |
interval Duration | Interval between health checks. Defaults to 5s. | Optional: {} | |
timeout Duration | Timeout for each health check attempt. Defaults to 5s. | Optional: {} | |
healthyThreshold integer | HealthyThreshold is the number of consecutive successful checks before an unhealthy endpoint is marked healthy. Defaults to 2. | Minimum: 1 Optional: {} | |
unhealthyThreshold integer | UnhealthyThreshold is the number of consecutive failed checks before a healthy endpoint is marked unhealthy. Defaults to 3. | Minimum: 1 Optional: {} | |
http HTTPHealthCheck | HTTP configures an HTTP health check. Used only when Type is HTTP. | Optional: {} | |
grpc GRPCHealthCheck | GRPC configures a gRPC health check. Used only when Type is GRPC. | Optional: {} |
Underlying type: string
Validation:
Appears in:
| Field | Description |
|---|---|
TCP | |
HTTP | |
GRPC |
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
hostname string | Hostname contains the hostname of the load-balancer. | Optional: {} | |
tlsEnabled boolean | TLSEnabled is true if certificate is created for the hostname. | Optional: {} | |
dnsRecordCreated boolean | DNSRecordCreated is true if DNS record is created for the hostname. | Optional: {} |
IngressSettings defines the settings for the ingress.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
class string | Class is the class of the ingress to use. This has higher precedence than the value specified in the Config. | Optional: {} | |
disable boolean | Disable is a flag that can be used to disable Ingress for a tenant. |
Insight is a single finding produced by the KubeLB insights engine: a configuration or posture problem the management cluster can see and the operator can act on. Insights are operator-facing; they are not synced to tenant clusters.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | Insight | ||
metadata ObjectMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
spec InsightSpec | |||
status InsightStatus |
Underlying type: string
InsightCategory groups findings by the kind of problem they describe.
Validation:
Appears in:
| Field | Description |
|---|---|
security | |
reliability | |
cost | |
hygiene | |
migration |
Underlying type: string
InsightDismissalReason explains why a finding was dismissed. It is required on dismissal so the fleet-wide dismissal mix stays analysable.
Validation:
Appears in:
| Field | Description |
|---|---|
working_as_intended | |
accepted_risk | |
false_positive | |
low_priority | |
other |
InsightEvidence is a pointer into live cluster state that supports the finding. Evidence is always a reference, never a copy, so an Insight cannot go stale against the object it describes.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
type InsightEvidenceType | Type of reference. | Enum: [FieldRef Condition ObjectRef] | |
ref string | Ref is the reference itself, in “ | MaxLength: 512 MinLength: 1 | |
note string | Note explains what the reference shows. | MaxLength: 512 Optional: {} |
Underlying type: string
InsightEvidenceType describes what an evidence entry points at.
Validation:
Appears in:
| Field | Description |
|---|---|
FieldRef | InsightEvidenceFieldRef points at a field on an object, e.g. “Config/default#spec.waf.skipValidation”. |
Condition | InsightEvidenceCondition points at a status condition, e.g. “TenantState/default#BackendTransportChangePending”. |
ObjectRef | InsightEvidenceObjectRef points at a whole object. |
InsightList contains a list of Insight.
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | InsightList | ||
metadata ListMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
items Insight array |
InsightRemediation describes how to resolve a finding. KubeLB never applies it: the snippet is documentation, not an action.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
summary string | Summary is the one-line fix. | MaxLength: 1024 Optional: {} | |
snippet string | Snippet is an optional YAML example of the fix. It is text only and is never applied by KubeLB. | MaxLength: 8192 Optional: {} |
Underlying type: string
InsightSeverity is how much the finding matters. The values match the OpenReports severity enum so findings can be mirrored into Report objects without a translation table.
Validation:
Appears in:
| Field | Description |
|---|---|
critical | |
high | |
medium | |
low | |
info |
InsightSpec is the finding. Everything except triage is written by the insights engine and is overwritten on every sweep.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
check string | Check is the registry ID of the check that produced this finding, e.g. KLB001. It is immutable: a check ID is a permanent contract that docs, dashboards and suppression lists reference. | Pattern: ^KLB[0-9]\{3\}$ | |
slug string | Slug is the human-readable name of the check, e.g. waf-detection-only. | MaxLength: 63 | |
category InsightCategory | Category groups the finding. | Enum: [security reliability cost hygiene migration] | |
severity InsightSeverity | Severity is how much the finding matters. | Enum: [critical high medium low info] | |
message string | Message describes this specific finding, including any fleet-relative context (“4 of 6 tenants with public routes enforce WAF”). | MaxLength: 1024 | |
targetRefs InsightTargetRef array | TargetRefs are the objects the finding is about. | MaxItems: 32 MinItems: 1 | |
evidence InsightEvidence array | Evidence points at the live state that produced the finding. | MaxItems: 16 Optional: {} | |
remediation InsightRemediation | Remediation describes how to fix the finding. | Optional: {} | |
docsURL string | DocsURL links to the check’s documentation. | MaxLength: 512 Optional: {} | |
triage InsightTriage | Triage is the operator’s verdict. It is the only user-owned field on this object: the engine reads it and never writes it. | Optional: {} |
Underlying type: string
InsightState is the effective state of a finding, computed by the engine from the detection result and the operator’s triage.
Validation:
Appears in:
| Field | Description |
|---|---|
Open | |
Acknowledged | |
Snoozed | |
Dismissed | |
Fixed | InsightStateFixed means the engine no longer detects the finding. It is machine-observed, never set by an operator. |
InsightStatus is the engine-computed effective state of a finding.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
state InsightState | State combines the detection result with the operator’s triage. | Enum: [Open Acknowledged Snoozed Dismissed Fixed] Optional: {} | |
firstSeen Time | FirstSeen is when the finding was first detected. It survives a fix-and-reappear cycle so flapping stays visible. | Optional: {} | |
lastEvaluated Time | LastEvaluated is the last sweep that considered this finding. | Optional: {} | |
fixedAt Time | FixedAt is when the engine stopped detecting the finding. Fixed insights are deleted after a retention period. | Optional: {} |
InsightTargetRef identifies an object the finding is about.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | APIVersion of the target. | MaxLength: 253 MinLength: 1 | |
name string | Name of the target. | MaxLength: 253 MinLength: 1 | |
namespace string | Namespace of the target. Empty for cluster-scoped objects. | MaxLength: 253 Optional: {} |
InsightTriage is the operator’s verdict on a finding. It is the only part of an Insight that users write; the engine preserves it verbatim across sweeps.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
state InsightTriageState | State is the verdict. | Enum: [Acknowledged Snoozed Dismissed] | |
reason InsightDismissalReason | Reason explains a dismissal. Required when state is Dismissed, forbidden otherwise. | Enum: [working_as_intended accepted_risk false_positive low_priority other] Optional: {} | |
snoozeUntil Time | SnoozeUntil is when the finding reopens. Required when state is Snoozed, forbidden otherwise. | Optional: {} |
Underlying type: string
InsightTriageState is the operator’s verdict on a finding.
Validation:
Appears in:
| Field | Description |
|---|---|
Acknowledged | InsightTriageAcknowledged means the finding is seen and accepted as work to do. It keeps counting towards the posture score. |
Snoozed | InsightTriageSnoozed hides the finding until snoozeUntil passes, after which it reopens on its own. |
Dismissed | InsightTriageDismissed closes the finding for good. A dismissed finding that is detected again stays dismissed. |
InsightsSettings defines the global settings for the insights engine.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
disabledChecks string array | DisabledChecks lists check IDs the engine must not run, for example [“KLB010”]. Existing findings for a disabled check are removed on the next sweep. | MaxItems: 64 items:Pattern: ^KLB[0-9]\{3\}$Optional: {} |
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
resource Unstructured | EmbeddedResource: {} Optional: {} | ||
services UpstreamService array | Services contains the list of services that are used as the source for the Route. |
LoadBalancer is the Schema for the loadbalancers API
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | LoadBalancer | ||
metadata ObjectMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
spec LoadBalancerSpec | |||
status LoadBalancerStatus |
LoadBalancerEndpoints is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given:
{
Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],
Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}]
}
The resulting set of endpoints can be viewed as:
a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],
b: [ 10.10.1.1:309, 10.10.2.2:309 ]
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
name string | Name is the name of the endpoints. | ||
addresses EndpointAddress array | IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize. | MinItems: 1 | |
addressesReference ObjectReference | AddressesReference is a reference to the Addresses object that contains the IP addresses. If this field is set, the Addresses field will be ignored. | Optional: {} | |
ports EndpointPort array | Port numbers available on the related IP addresses. This field is ignored for routes that are using kubernetes resources as the source. | MinItems: 1 Optional: {} |
LoadBalancerList contains a list of LoadBalancer
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | LoadBalancerList | ||
metadata ListMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
items LoadBalancer array |
LoadBalancerPersistence configures backend persistence for a LoadBalancer.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
type LoadBalancerPersistenceType | Type selects the persistence strategy. SourceIP uses the downstream source IP as observed by KubeLB Envoy. | Enum: [SourceIP] |
Underlying type: string
LoadBalancerPersistenceType defines the supported backend persistence modes.
Validation:
Appears in:
| Field | Description |
|---|---|
SourceIP | LoadBalancerPersistenceTypeSourceIP routes connections from the same observed source IP to the same healthy backend endpoint when possible. |
Underlying type: string
Validation:
Appears in:
| Field | Description |
|---|---|
RoundRobin | |
LeastRequest | |
Random |
LoadBalancerPort contains information on service’s port.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
name string | The name of this port within the service. This must be a DNS_LABEL. All ports within a Spec must have unique names. When considering the endpoints for a Service, this must match the ’name’ field in the EndpointPort. Optional if only one ServicePort is defined on this service. | Optional: {} | |
protocol Protocol | The IP protocol for this port. Defaults to “TCP”. | Enum: [TCP UDP] | |
port integer | The port that will be exposed by the LoadBalancer. |
LoadBalancerSettings defines the settings for the load balancers.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
class string | Class is the class of the load balancer to use. This has higher precedence than the value specified in the Config. | Optional: {} | |
limit integer | Limit is the maximum number of load balancers to create. If a lower limit is set than the number of reources that exist, the limit will be disallow creation of new resources but will not delete existing resources. The reason behind this is that it is not possible for KubeLB to know which resources are safe to remove. | ||
disable boolean | Disable is a flag that can be used to disable L4 load balancing for a tenant. |
LoadBalancerSpec defines the desired state of LoadBalancer
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
endpoints LoadBalancerEndpoints array | Sets of addresses and ports that comprise an exposed user service on a cluster. | MinItems: 1 Required: {} | |
ports LoadBalancerPort array | The list of ports that are exposed by the load balancer service. only needed for layer 4 | Optional: {} | |
hostname string | Hostname is the domain name at which the load balancer service will be accessible. When hostname is set, KubeLB will create a route(ingress or httproute) for the service, and expose it with TLS on the given hostname. | Optional: {} | |
type ServiceType | type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. “ExternalName” maps to the specified externalName. “ClusterIP” allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is “None”, no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. “NodePort” builds on ClusterIP and allocates a port on every node which routes to the clusterIP. “LoadBalancer” builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types | ClusterIP | Optional: {} |
externalTrafficPolicy ServiceExternalTrafficPolicy | externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. “Local” preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. “Cluster” obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading. | Optional: {} | |
persistence LoadBalancerPersistence | Persistence configures backend endpoint persistence. When omitted, KubeLB keeps the default non-sticky load balancing behavior. SourceIP persistence is based on the source IP observed by KubeLB Envoy for TCP and UDP traffic, which may be a gateway, node, or NAT address in proxied topologies. Takes precedence over LoadBalancerPolicy, which cannot be honoured at the same time: persistence is a correctness requirement the workload states, a distribution policy is a preference. | Optional: {} | |
loadBalancerPolicy LoadBalancerPolicy | LoadBalancerPolicy defines the load balancing policy for this LoadBalancer’s Envoy cluster. Overrides Tenant and Config-level settings. | Enum: [RoundRobin LeastRequest Random] Optional: {} | |
timeouts EnvoyTimeouts | Timeouts defines per-LoadBalancer Envoy timeouts. Overrides Tenant and Config timeouts per-field. | Optional: {} | |
healthCheck HealthCheck | HealthCheck defines the active health check for this LoadBalancer’s Envoy cluster. Whole-struct override: replaces Tenant and Config-level checks entirely. | Optional: {} | |
upstreamTLS UpstreamTLSConfig | UpstreamTLS configures TLS for connections from KubeLB’s Envoy proxy to backend endpoints. When not set, Envoy connects using plain TCP. | Optional: {} |
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
disable boolean | |||
limit integer |
LoadBalancerStatus defines the observed state of LoadBalancer
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
loadBalancer LoadBalancerStatus | LoadBalancer contains the current status of the load-balancer, if one is present. | Optional: {} | |
service ServiceStatus | Service contains the current status of the LB service. | Optional: {} | |
hostname HostnameStatus | Hostname contains the status for hostname resources. | Optional: {} | |
conditions Condition array | Conditions describe the LoadBalancer as observed by the KubeLB manager. | Optional: {} |
NamedNetworkPolicy is a NetworkPolicySpec with an explicit name.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
name string | Name of the network policy. | MinLength: 1 | |
spec NetworkPolicySpec | Spec is the NetworkPolicySpec for this policy. |
NetworkPolicySettings defines the network policy configuration for tenants. Default policies:
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
enable boolean | Enable to install network policies by default for all tenants. By default(null/false), network policy automation is disabled. This will be enabled by default in a future release. | Optional: {} | |
disabledPolicies string array | DisabledPolicies is a list of default policy names to skip (e.g. [“kubelb-deny-all-ingress”]). | Optional: {} | |
additionalPolicies NamedNetworkPolicy array | AdditionalPolicies are extra named network policies created alongside remaining defaults. | Optional: {} |
PerEndpointCircuitBreaker defines circuit breaker thresholds that apply to individual endpoints.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
maxConnections integer | MaxConnections is the maximum number of connections that Envoy will establish to a single endpoint. If not specified, the default is 1024. | Maximum: 4.294967295e+09 Minimum: 0 Optional: {} |
PrometheusSecretKeyReference selects one key from a Secret in the KubeLB manager namespace.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
name string | Name of the Secret. | ||
key string | Key within the Secret’s data. |
PrometheusSettings configures the Prometheus query endpoint the manager reads metrics from.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
url string | URL is the base URL of the Prometheus query API, for example http://prometheus-operated.monitoring.svc:9090. | Pattern: ^https?://.+ | |
bearerTokenSecretRef PrometheusSecretKeyReference | BearerTokenSecretRef reads a bearer token used to authenticate to Prometheus. | Optional: {} | |
caCertSecretRef PrometheusSecretKeyReference | CACertSecretRef reads a PEM CA bundle used to verify a TLS Prometheus endpoint. | Optional: {} | |
insecureSkipVerify boolean | InsecureSkipVerify disables TLS certificate verification for the endpoint. | Optional: {} |
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | APIVersion is the API version of the resource. | ||
name string | Name is the name of the resource. | ||
namespace string | Namespace is the namespace of the resource. | ||
generatedName string | GeneratedName is the generated name of the resource. | ||
status RawExtension | Status is the actual status of the resource. | ||
conditions Condition array |
Route is the object that represents a route in the cluster.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | Route | ||
metadata ObjectMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
spec RouteSpec | |||
status RouteStatus |
RouteList contains a list of Routes
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | RouteList | ||
metadata ListMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
items Route array |
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
source string | |||
services object (keys:string, values:RouteServiceStatus) | |||
route ResourceState |
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | APIVersion is the API version of the resource. | ||
name string | Name is the name of the resource. | ||
namespace string | Namespace is the namespace of the resource. | ||
generatedName string | GeneratedName is the generated name of the resource. | ||
status RawExtension | Status is the actual status of the resource. | ||
conditions Condition array | |||
ports ServicePort array |
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
kubernetes KubernetesSource | Kubernetes contains the information about the Kubernetes source. This field is automatically populated by the KubeLB CCM and in most cases, users should not set this field manually. |
RouteSpec defines the desired state of the Route.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
endpoints LoadBalancerEndpoints array | Sets of addresses and ports that comprise an exposed user service on a cluster. This field is required for Routes that represent traffic-forwarding resources (Ingress, Gateway routes). It is optional for policy resources like BackendTrafficPolicy. | Optional: {} | |
source RouteSource | Source contains the information about the source of the route. This is used when the route is created from external sources. | Optional: {} | |
loadBalancerPolicy LoadBalancerPolicy | LoadBalancerPolicy defines the load balancing policy for this Route’s Envoy clusters. Overrides Tenant and Config-level settings. | Enum: [RoundRobin LeastRequest Random] Optional: {} | |
timeouts EnvoyTimeouts | Timeouts defines per-Route Envoy timeouts. Overrides Tenant and Config timeouts per-field. | Optional: {} | |
healthCheck HealthCheck | HealthCheck defines the active health check for this Route’s Envoy clusters. Whole-struct override: replaces Tenant and Config-level checks entirely. | Optional: {} |
RouteStatus defines the observed state of the Route.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
resources RouteResourcesStatus | Resources contains the list of resources that are created/processed as a result of the Route. |
ServicePort contains information on service’s port.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
name string | The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. When considering the endpoints for a Service, this must match the ’name’ field in the EndpointPort. Optional if only one ServicePort is defined on this service. | Optional: {} | |
protocol Protocol | The IP protocol for this port. Supports “TCP”, “UDP”, and “SCTP”. Default is TCP. | TCP | Optional: {} |
appProtocol string | The application protocol for this port. This is used as a hint for implementations to offer richer behavior for protocols that they understand. This field follows standard Kubernetes label syntax. Valid values are either: * Un-prefixed protocol names - reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names). * Kubernetes-defined prefixed names: * ‘kubernetes.io/h2c’ - HTTP/2 prior knowledge over cleartext as described in https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior- * ‘kubernetes.io/ws’ - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455 * ‘kubernetes.io/wss’ - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455 * Other protocols should use implementation-defined prefixed names such as mycompany.com/my-custom-protocol. | Optional: {} | |
port integer | The port that will be exposed by this service. | ||
targetPort IntOrString | Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod’s container ports. If this is not specified, the value of the ‘port’ field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the ‘port’ field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service | Optional: {} | |
nodePort integer | The port on each node on which this service is exposed when type is NodePort or LoadBalancer. Usually assigned by the system. If a value is specified, in-range, and not in use it will be used, otherwise the operation will fail. If not specified, a port will be allocated if this Service requires one. If this field is specified when creating a Service which does not need it, creation will fail. This field will be wiped when updating a Service to no longer need it (e.g. changing type from NodePort to ClusterIP). More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport | Optional: {} | |
upstreamTargetPort integer |
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
ports ServicePort array |
SyncSecret is a wrapper over Kubernetes Secret object. This is used to sync secrets from tenants to the LB cluster in a controlled and secure way.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | SyncSecret | ||
metadata ObjectMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
immutable boolean | Optional: {} | ||
data object (keys:string, values:integer array) | Optional: {} | ||
stringData object (keys:string, values:string) | Optional: {} | ||
type SecretType | Optional: {} | ||
status SyncSecretStatus | Optional: {} |
SyncSecretList contains a list of SyncSecrets
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | SyncSecretList | ||
metadata ListMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
items SyncSecret array |
Underlying type: string
SyncSecretPhase represents the lifecycle phase of a SyncSecret.
Appears in:
| Field | Description |
|---|---|
Pending | SyncSecretPhasePending means the SyncSecret has not yet been synced. |
Synced | SyncSecretPhaseSynced means the SyncSecret has been successfully synced to a Secret. |
Failed | SyncSecretPhaseFailed means the SyncSecret sync failed. |
Terminating | SyncSecretPhaseTerminating means the SyncSecret is being deleted. |
SyncSecretStatus defines the observed state of SyncSecret.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
observedGeneration integer | ObservedGeneration is the most recent generation observed for this SyncSecret by the controller. | Optional: {} | |
phase SyncSecretPhase | Phase is the current lifecycle phase of the SyncSecret. | Optional: {} | |
conditions Condition array | Conditions represents the latest available observations of the SyncSecret’s state. | Optional: {} |
Tenant is the Schema for the tenants API
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | Tenant | ||
metadata ObjectMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
spec TenantSpec | |||
status TenantStatus |
TenantEnvoyProxy defines tenant-level overrides for Envoy Proxy configuration.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
replicas integer | Replicas is the number of Envoy Proxy replicas for this tenant. This field is ignored if Config.Spec.EnvoyProxy.UseDaemonset is true. | Minimum: 1 Optional: {} | |
resources ResourceRequirements | Resources defines the resource requirements for the Envoy Proxy container. | Optional: {} |
TenantList contains a list of Tenant
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | TenantList | ||
metadata ListMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
items Tenant array |
Underlying type: string
TenantPhase represents the lifecycle phase of a Tenant.
Appears in:
| Field | Description |
|---|---|
Pending | TenantPhasePending means the Tenant is being provisioned. |
Ready | TenantPhaseReady means the Tenant has been successfully reconciled. |
Failed | TenantPhaseFailed means the Tenant reconciliation failed. |
Terminating | TenantPhaseTerminating means the Tenant is being deleted. |
TenantProxy configures the tenant-cluster Envoy proxy for the MTLS backend transport.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
serviceType TenantProxyServiceType | ServiceType selects the Service type used to expose the tenant proxy to the management Envoy. With NodePort (default), the CCM publishes node addresses plus the allocated NodePort. With LoadBalancer, the CCM publishes the Service’s load balancer ingress IPs/hostnames and the management Envoy dials the fixed tenant proxy port (15443). | NodePort | Enum: [NodePort LoadBalancer] Optional: {} |
workload TenantProxyWorkload | Workload selects how the tenant proxy pods are scheduled. DaemonSet (default) runs one proxy per node. Deployment runs a fixed number of replicas spread across nodes; the CCM then publishes only the node addresses that host proxy pods so the management Envoy never dials a node without a local proxy. | DaemonSet | Enum: [DaemonSet Deployment] Optional: {} |
replicas integer | Replicas is the number of tenant proxy pods when Workload is Deployment. Ignored for DaemonSet. | 2 | Minimum: 1 Optional: {} |
Underlying type: string
Appears in:
| Field | Description |
|---|---|
NodePort | |
LoadBalancer |
Underlying type: string
Appears in:
| Field | Description |
|---|---|
DaemonSet | |
Deployment |
TenantSpec defines the desired state of Tenant
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
propagatedAnnotations map[string]string | PropagatedAnnotations defines the set of annotation key patterns that will be propagated to load balancing resources. Keys support shell-style glob patterns (e.g. “nginx.ingress.kubernetes.io/*”). Keep the value empty to allow any value; otherwise the value is a comma-separated list of permitted values for exact match. Tenant configuration has higher precedence than the annotations specified at the Config level. | Optional: {} | |
propagateAllAnnotations boolean | PropagateAllAnnotations defines whether all annotations will be propagated to load balancing resources. If set to true, PropagatedAnnotations is ignored. DeniedAnnotations still applies on top of this flag. Tenant configuration has higher precedence than the value specified at the Config level. | Optional: {} | |
deniedAnnotations string array | DeniedAnnotations is a list of annotation key patterns that are excluded from propagation, regardless of PropagateAllAnnotations or PropagatedAnnotations. Patterns support shell-style globbing (e.g. “nginx.ingress.kubernetes.io/*”). Tenant configuration has higher precedence than the value specified at the Config level. | Optional: {} | |
defaultAnnotations object (keys:AnnotatedResource, values:Annotations) | DefaultAnnotations defines the list of annotations(key-value pairs) that will be set on the load balancing resources if not already present. A special key all can be used to apply the sameset of annotations to all resources. Tenant configuration has higher precedence than the annotations specified at the Config level. | Optional: {} | |
loadBalancer LoadBalancerSettings | |||
ingress IngressSettings | |||
gatewayAPI GatewayAPISettings | |||
dns DNSSettings | |||
certificates CertificatesSettings | |||
tunnel TenantTunnelSettings | |||
waf TenantWAFSettings | |||
envoyProxy TenantEnvoyProxy | EnvoyProxy defines tenant-level overrides for Envoy Proxy configuration. Fields set here take precedence over Config.Spec.EnvoyProxy. | Optional: {} | |
circuitBreaker CircuitBreaker | CircuitBreaker defines the circuit breaker configuration for this tenant’s Envoy clusters. Overrides Config-level settings. | Optional: {} | |
timeouts EnvoyTimeouts | Timeouts defines tenant-level Envoy timeouts. Overrides Config timeouts per-field. Route/LoadBalancer-level timeouts override these. | Optional: {} | |
networkPolicy NetworkPolicySettings | NetworkPolicy defines network policy settings for this tenant’s namespace. Tenant has higher precedence than the settings specified at the Config level. | Optional: {} | |
loadBalancerPolicy LoadBalancerPolicy | LoadBalancerPolicy defines the load balancing policy for this tenant’s Envoy clusters. Overrides Config-level settings. | Enum: [RoundRobin LeastRequest Random] Optional: {} | |
healthCheck HealthCheck | HealthCheck defines the active health check for this tenant’s Envoy clusters. Whole-struct override: replaces the Config-level check entirely. LoadBalancer/Route settings override this. | Optional: {} | |
allowedDomains string array | List of allowed domains for the tenant. This is used to restrict the domains that can be used for the tenant. If specified, applies on all the components such as Ingress, GatewayAPI, DNS, certificates, etc. Examples: - [".example.com"] -> this allows subdomains at the root level such as example.com and test.example.com but won’t allow domains at one level above like test.test.example.com - [".example.com"] -> this allows all subdomains of example.com such as test.dns.example.com and dns.example.com - [“example.com”] -> this allows only example.com - [""] or [""] -> this allows all domains Note: “” was added as a special case to allow any levels of subdomains that come before it. “*” works for only 1 level. Default: value is [""] and all domains are allowed. | [**] | Optional: {} |
TenantState is the Schema for the tenants API
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | TenantState | ||
metadata ObjectMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
spec TenantStateSpec | |||
status TenantStateStatus |
TenantStateList contains a list of TenantState
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | TenantStateList | ||
metadata ListMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
items TenantState array |
TenantStateSpec defines the desired state of TenantState.
Appears in:
TenantStateStatus defines the observed state of TenantState
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
version Version | |||
lastUpdated Time | |||
conditions Condition array | |||
tunnel TunnelState | |||
loadBalancer LoadBalancerState | |||
gatewayAPI GatewayAPIState | |||
backendTransport BackendTransport | |||
allowedDomains string array | |||
timeouts EnvoyTimeouts | Timeouts is the tenant-effective Envoy timeout configuration (Tenant overrides merged over Config, per field). Consumed by the tenant-side proxy render, which cannot read Config or Tenant. | Optional: {} |
TenantStatus defines the observed state of Tenant
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
observedGeneration integer | ObservedGeneration is the most recent generation observed for this Tenant by the controller. | Optional: {} | |
phase TenantPhase | Phase is the current lifecycle phase of the Tenant. | Optional: {} | |
conditions Condition array | Conditions represents the latest available observations of the Tenant’s state. | Optional: {} |
TenantTunnelSettings defines the settings for the tunnel.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
limit integer | Limit is the maximum number of tunnels to create. If a lower limit is set than the number of reources that exist, the limit will be disallow creation of new resources but will not delete existing resources. The reason behind this is that it is not possible for KubeLB to know which resources are safe to remove. | ||
disable boolean | Disable is a flag that can be used to disable tunneling for a tenant. |
TenantWAFPolicy defines a tenant-authored Web Application Firewall policy for L7 routes. Unlike the cluster-scoped WAFPolicy, it is namespaced and created by tenants in their own tenant cluster. It applies to HTTPRoute and GRPCRoute resources owned by that tenant only.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | TenantWAFPolicy | ||
metadata ObjectMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
spec TenantWAFPolicySpec | |||
status TenantWAFPolicyStatus |
TenantWAFPolicyList contains a list of TenantWAFPolicy.
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | TenantWAFPolicyList | ||
metadata ListMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
items TenantWAFPolicy array |
TenantWAFPolicySpec defines the desired state of TenantWAFPolicy. Exactly one targeting method must be used: targetRef, targetSelector, or default. Setting multiple targeting methods is invalid. Policies without any targeting are ignored. Feature stage: Beta
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
default boolean | Default when set to true applies this policy to all of this tenant’s routes. It is the tenant-scoped analogue of WAFPolicy.global and never affects other tenants or global config. Mutually exclusive with TargetRef and TargetSelector. Policies without default, targetRef, or targetSelector are ignored. | Optional: {} | |
targetRef WAFTargetRef | TargetRef identifies a specific route by name and optionally namespace. For tenant policies, Kind is HTTPRoute or GRPCRoute and namespace/originNamespace refer to the tenant-cluster namespace. Mutually exclusive with Default and TargetSelector. | Optional: {} | |
targetSelector LabelSelector | TargetSelector selects routes or HTTPRoute/GRPCRoute resources by label. It checks whether the route has the labels or the labels of the HTTPRoute/GRPCRoute resource. In case of a conflict, the labels of the Route resource takes precedence. Mutually exclusive with Default and TargetRef. | Optional: {} | |
directives string array | Directives contains SecLang/ModSecurity directives passed to Coraza. Reference: https://coraza.io/docs/seclang/directives/ Tenant directives are untrusted. They are validated at sync time by SanitizeTenantDirectives, a default-deny allowlist: dangerous directives (SecRemoteRules, filesystem Include, log/path directives, exec/setenv, and ctl actions targeting admin rule IDs) are rejected. The MaxItems/MaxLength caps below are structural CRD limits; an admin can tighten them further at runtime via Config.spec.waf.maxDirectivesPerPolicy and maxDirectiveLength. | MaxItems: 64 items:MaxLength: 1024 Optional: {} | |
failureMode WAFFailureMode | FailureMode defines behavior when WAF filter creation fails. - Closed: Block traffic if WAF cannot be applied (default) - Open: Allow traffic without WAF protection Tenants may set this, but an admin enforceFailureMode on Config or Tenant overrides the tenant-chosen value. | Closed | Enum: [Open Closed] Optional: {} |
TenantWAFPolicyStatus defines the observed state of TenantWAFPolicy.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
conditions Condition array | Conditions describe the current state of the TenantWAFPolicy. | Optional: {} |
TenantWAFSettings defines the tenant-scoped settings for tenant-authored WAF policies.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
disableTenantPolicies boolean | DisableTenantPolicies disables tenant-authored WAF policies (TenantWAFPolicy) for this tenant. Admin-authored WAF (WAFPolicy) still applies. | Optional: {} | |
limit integer | Limit is the maximum number of TenantWAFPolicies for this tenant. If a lower limit is set than the number of reources that exist, the limit will be disallow creation of new resources but will not delete existing resources. The reason behind this is that it is not possible for KubeLB to know which resources are safe to remove. Overrides Config.spec.waf.tenantPolicyLimit; Tenant has higher precedence than Config. | Optional: {} | |
enforceFailureMode WAFFailureMode | EnforceFailureMode, when set, overrides the tenant-chosen failureMode on this tenant’s TenantWAFPolicies. Takes precedence over the Config-level value. | Enum: [Open Closed] Optional: {} |
Tunnel is the Schema for the tunnels API
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | Tunnel | ||
metadata ObjectMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
spec TunnelSpec | |||
status TunnelStatus |
TunnelList contains a list of Tunnel
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | TunnelList | ||
metadata ListMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
items Tunnel array |
Underlying type: string
TunnelPhase represents the phase of tunnel
Appears in:
| Field | Description |
|---|---|
Pending | TunnelPhasePending means the tunnel is being provisioned |
Ready | TunnelPhaseReady means the tunnel is ready to accept connections |
Failed | TunnelPhaseFailed means the tunnel provisioning failed |
Terminating | TunnelPhaseTerminating means the tunnel is being terminated |
TunnelResources contains references to resources created for the tunnel
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
serviceName string | ServiceName is the name of the service created for this tunnel | Optional: {} | |
routeRef ObjectReference | RouteRef is a reference to the route (HTTPRoute or Ingress) created for this tunnel | Optional: {} |
TunnelSettings defines the global settings for Tunnel resources.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
limit integer | Limit is the maximum number of tunnels to create. If a lower limit is set than the number of reources that exist, the limit will be disallow creation of new resources but will not delete existing resources. The reason behind this is that it is not possible for KubeLB to know which resources are safe to remove. | ||
connectionManagerURL string | ConnectionManagerURL is the URL of the connection manager service that handles tunnel connections. This is required if tunneling is enabled. For example: “https://con.example.com” | Optional: {} | |
disable boolean | Disable indicates whether tunneling feature should be disabled. | Optional: {} |
TunnelSpec defines the desired state of Tunnel
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
hostname string | Hostname is the hostname of the tunnel. If not specified, the hostname will be generated by KubeLB. | Optional: {} |
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
disable boolean | |||
limit integer | |||
connectionManagerURL string |
TunnelStatus defines the observed state of Tunnel
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
hostname string | Hostname contains the actual hostname assigned to the tunnel | Optional: {} | |
url string | URL contains the full URL to access the tunnel | Optional: {} | |
connectionManagerURL string | ConnectionManagerURL contains the URL that clients should use to establish tunnel connections | Optional: {} | |
phase TunnelPhase | Phase represents the current phase of the tunnel | Optional: {} | |
resources TunnelResources | Resources contains references to the resources created for this tunnel | Optional: {} | |
conditions Condition array | Conditions represents the current conditions of the tunnel | Optional: {} |
UpstreamService is a wrapper over the corev1.Service object. This is required as kubebuilder:validation:EmbeddedResource marker adds the x-kubernetes-embedded-resource to the array instead of the elements within it. Which results in a broken CRD; validation error. Without this marker, the embedded resource is not properly serialized to the CRD.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
metadata ObjectMeta | Refer to Kubernetes API documentation for fields of metadata. | Optional: {} | |
spec ServiceSpec | Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status | Optional: {} | |
status ServiceStatus | Most recently observed status of the service. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status | Optional: {} |
UpstreamTLSConfig configures TLS for connections from KubeLB’s Envoy proxy to backend endpoints. When not set, Envoy connects using plain TCP (no TLS).
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
policy UpstreamTLSPolicy | Policy defines the upstream TLS verification mode. | Enum: [Insecure Verify] Required: {} | |
caSecretRef LocalObjectReference | CASecretRef references a Secret containing the CA certificate for backend verification. The Secret must contain a “ca.crt” key. Required when policy is “Verify”. | Optional: {} |
Underlying type: string
UpstreamTLSPolicy defines how KubeLB’s Envoy proxy handles TLS to backends.
Validation:
Appears in:
| Field | Description |
|---|---|
Insecure | UpstreamTLSPolicyInsecure enables TLS but skips certificate verification (ACCEPT_UNTRUSTED). Use for self-signed certs, certs without SANs, or expired certs. |
Verify | UpstreamTLSPolicyVerify enables TLS and verifies the backend certificate against a provided CA. |
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
gitVersion string | |||
gitCommit string | |||
buildDate string | |||
edition string |
Underlying type: string
WAFFailureMode defines how routes behave when WAF filter creation fails.
Validation:
Appears in:
| Field | Description |
|---|---|
Open | WAFFailureModeOpen allows traffic through without WAF protection if filter fails. |
Closed | WAFFailureModeClosed blocks traffic if WAF filter cannot be applied. |
WAFPolicy defines Web Application Firewall policy for L7 routes. Applies to HTTPRoute and GRPCRoute resources.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | WAFPolicy | ||
metadata ObjectMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
spec WAFPolicySpec | |||
status WAFPolicyStatus |
WAFPolicyList contains a list of WAFPolicy.
| Field | Description | Default | Validation |
|---|---|---|---|
apiVersion string | kubelb.k8c.io/v1alpha1 | ||
kind string | WAFPolicyList | ||
metadata ListMeta | Refer to Kubernetes API documentation for fields of metadata. | ||
items WAFPolicy array |
WAFPolicySpec defines the desired state of WAFPolicy. Exactly one targeting method must be used: targetRef, targetSelector, or global. Setting multiple targeting methods is invalid. Policies without any targeting are ignored. Feature stage: Beta
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
global boolean | Global when set to true applies this policy to all routes for all tenants within a KubeLB installation. Mutually exclusive with TargetRef and TargetSelector. Policies without global, targetRef, or targetSelector are ignored. | Optional: {} | |
targetRef WAFTargetRef | TargetRef identifies a specific route by name and optionally namespace. Mutually exclusive with Global and TargetSelector. | Optional: {} | |
targetSelector LabelSelector | TargetSelector selects routes or HTTPRoute/GRPCRoute resources by label. It checks whether the route has the labels or the labels of the HTTPRoute/GRPCRoute resource. In case of a conflict, the labels of the Route resource takes precedence. Mutually exclusive with Global and TargetRef. | Optional: {} | |
directives string array | Directives contains SecLang/ModSecurity directives passed to Coraza. Reference: https://coraza.io/docs/seclang/directives/ If empty, the following OWASP CRS defaults are applied: - SecRuleEngine On - SecRequestBodyAccess On - SecRequestBodyLimit 13107200 - Include @crs-setup-conf - Include @owasp_crs/*.conf The MaxItems/MaxLength caps below are structural CRD limits mirroring TenantWAFPolicy. They bound a single policy’s blast radius; the CRS ruleset itself lives in the WASM binary, not the directive list, so these caps do not limit the protections in effect. | MaxItems: 64 items:MaxLength: 1024 Optional: {} | |
failureMode WAFFailureMode | FailureMode defines behavior when WAF filter creation fails. - Closed: Block traffic if WAF cannot be applied (default) - Open: Allow traffic without WAF protection | Closed | Enum: [Open Closed] Optional: {} |
WAFPolicyStatus defines the observed state of WAFPolicy.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
conditions Condition array | Conditions describe the current state of the WAFPolicy. | Optional: {} |
WAFSettings defines settings for the WAF (Web Application Firewall).
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
wasmInitContainerImage string | WASMInitContainerImage overrides the image used for the WASM init container. If empty, defaults to the kubelb-manager image detected at runtime. | Optional: {} | |
skipValidation boolean | SkipValidation skips directive validation for WAFPolicies. When true, all WAFPolicies are marked as valid without parsing. | Optional: {} | |
enableTenantPolicies boolean | EnableTenantPolicies is the global opt-in for tenant-authored WAF policies (TenantWAFPolicy). Defaults to false: when unset, TenantWAFPolicies are ignored and their CRD/controller stay inert, so upgrades see zero behavior change until an admin enables the feature. | Optional: {} | |
enforceFailureMode WAFFailureMode | EnforceFailureMode, when set, overrides the tenant-chosen failureMode on every TenantWAFPolicy cluster-wide. A per-Tenant EnforceFailureMode takes precedence over this value. | Enum: [Open Closed] Optional: {} | |
tenantPolicyLimit integer | TenantPolicyLimit is the maximum number of TenantWAFPolicies allowed per tenant. If a lower limit is set than the number of reources that exist, the limit will be disallow creation of new resources but will not delete existing resources. The reason behind this is that it is not possible for KubeLB to know which resources are safe to remove. If nil, the number of TenantWAFPolicies per tenant is unlimited. | Optional: {} | |
maxDirectivesPerPolicy integer | MaxDirectivesPerPolicy is the runtime cap on the number of directive lines per TenantWAFPolicy enforced by the sanitizer (multi-line directive items are counted per line). Defaults to 64, matching the TenantWAFPolicy CRD item cap. Set to 0 for unlimited. | 64 | Optional: {} |
maxDirectiveLength integer | MaxDirectiveLength is the runtime cap on the length of a single tenant directive line enforced by the sanitizer. Defaults to 1024, matching the TenantWAFPolicy CRD per-item length cap. Set to 0 for unlimited. | 1024 | Optional: {} |
WAFTargetRef identifies a route by name.
Appears in:
| Field | Description | Default | Validation |
|---|---|---|---|
group string | Group is the API group of the target resource. | gateway.networking.k8s.io | |
namespace string | Namespace is the management cluster namespace (e.g., tenant-primary). If omitted, matches across all namespaces. | Optional: {} | |
originNamespace string | OriginNamespace is the namespace of the original resource in the tenant cluster (the kubelb.k8c.io/origin-ns). Two routes synced into the samemanagement namespace from different tenant-cluster namespaces can share an origin name; set OriginNamespace to disambiguate them. If omitted, origin namespace is not considered during matching. | Optional: {} | |
name string | Name is the name of the target resource which could either be the name of the resource in management cluster that is generated by KubeLB or the kubelb.k8c.io/origin-name that is the original name of the resource in the tenant cluster. | MinLength: 1 |