From 341f3f6d46265eeabf26b64e57c8ff6c40b40765 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Thu, 9 Oct 2025 09:46:10 +0200 Subject: [PATCH 1/8] chore!: Default ListenerClass externalTrafficPolicy to null --- .../crds/ListenerClass.yaml | 37 ++++++++++++++----- .../src/crd/listener/class/mod.rs | 20 +++++++--- .../src/crd/listener/class/v1alpha1_impl.rs | 6 +-- .../src/crd/listener/core/mod.rs | 2 + 4 files changed, 45 insertions(+), 20 deletions(-) diff --git a/crates/stackable-operator/crds/ListenerClass.yaml b/crates/stackable-operator/crds/ListenerClass.yaml index 11710b1dc..6b2c4b818 100644 --- a/crates/stackable-operator/crds/ListenerClass.yaml +++ b/crates/stackable-operator/crds/ListenerClass.yaml @@ -62,17 +62,36 @@ spec: description: Annotations that should be added to the Service object. type: object serviceExternalTrafficPolicy: - default: Local + anyOf: + - description: |- + Service Internal Traffic Policy enables internal traffic restrictions to only route internal + traffic to endpoints within the node the traffic originated from. The "internal" traffic + here refers to traffic originated from Pods in the current cluster. This can help to reduce + costs and improve performance. See [Kubernetes docs][k8s-docs]. + + [k8s-docs]: https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/ + enum: + - Cluster + - Local + type: string + - enum: + - null + nullable: true description: |- - `externalTrafficPolicy` that should be set on the created [`Service`] objects. + `externalTrafficPolicy` that should be set on the created Service objects. - The default is `Local` (in contrast to `Cluster`), as we aim to direct traffic to a node running the workload - and we should keep testing that as the primary configuration. Cluster is a fallback option for providers that - break Local mode (IONOS so far). - enum: - - Cluster - - Local - type: string + It is a Kubernetes feature that controls how external traffic is routed to a Kubernetes + Service. + + * `Cluster`: Kubernetes defaults to `Cluster`, which means that traffic is routed to any + node in the Kubernetes cluster that has a pod running the service. + * `Local`: Means that traffic is only routed to pods running on the same node as the + Service. + + `Local` has a better performance as it avoids a network hop, but requires a "clever" + LoadBalancer, that respects what Pods run on which nodes and routes traffic only to that + nodes accordingly. Some cloud providers (such as IONOS) or bare metal installations + don't have such features, so the default is `Cluster` to work everywhere. serviceType: description: The method used to access the services. enum: diff --git a/crates/stackable-operator/src/crd/listener/class/mod.rs b/crates/stackable-operator/src/crd/listener/class/mod.rs index 25054e26f..076fd8117 100644 --- a/crates/stackable-operator/src/crd/listener/class/mod.rs +++ b/crates/stackable-operator/src/crd/listener/class/mod.rs @@ -50,13 +50,21 @@ pub mod versioned { #[serde(default)] pub service_annotations: BTreeMap, - /// `externalTrafficPolicy` that should be set on the created [`Service`] objects. + /// `externalTrafficPolicy` that should be set on the created Service objects. /// - /// The default is `Local` (in contrast to `Cluster`), as we aim to direct traffic to a node running the workload - /// and we should keep testing that as the primary configuration. Cluster is a fallback option for providers that - /// break Local mode (IONOS so far). - #[serde(default = "ListenerClassSpec::default_service_external_traffic_policy")] - pub service_external_traffic_policy: core_v1alpha1::KubernetesTrafficPolicy, + /// It is a Kubernetes feature that controls how external traffic is routed to a Kubernetes + /// Service. + /// + /// * `Cluster`: Kubernetes defaults to `Cluster`, which means that traffic is routed to any + /// node in the Kubernetes cluster that has a pod running the service. + /// * `Local`: Means that traffic is only routed to pods running on the same node as the + /// Service. + /// + /// `Local` has a better performance as it avoids a network hop, but requires a "clever" + /// LoadBalancer, that respects what Pods run on which nodes and routes traffic only to that + /// nodes accordingly. Some cloud providers (such as IONOS) or bare metal installations + /// don't have such features, so the default is `Cluster` to work everywhere. + pub service_external_traffic_policy: Option, /// Whether addresses should prefer using the IP address (`IP`) or the hostname (`Hostname`). /// Can also be set to `HostnameConservative`, which will use `IP` for `NodePort` service types, but `Hostname` for everything else. diff --git a/crates/stackable-operator/src/crd/listener/class/v1alpha1_impl.rs b/crates/stackable-operator/src/crd/listener/class/v1alpha1_impl.rs index 1913994d2..548f7823b 100644 --- a/crates/stackable-operator/src/crd/listener/class/v1alpha1_impl.rs +++ b/crates/stackable-operator/src/crd/listener/class/v1alpha1_impl.rs @@ -1,13 +1,9 @@ use crate::crd::listener::{ class::v1alpha1::ListenerClassSpec, - core::v1alpha1::{AddressType, KubernetesTrafficPolicy, PreferredAddressType}, + core::v1alpha1::{AddressType, PreferredAddressType}, }; impl ListenerClassSpec { - pub(super) const fn default_service_external_traffic_policy() -> KubernetesTrafficPolicy { - KubernetesTrafficPolicy::Local - } - pub(super) const fn default_preferred_address_type() -> PreferredAddressType { PreferredAddressType::HostnameConservative } diff --git a/crates/stackable-operator/src/crd/listener/core/mod.rs b/crates/stackable-operator/src/crd/listener/core/mod.rs index 394aae48d..7016d39e5 100644 --- a/crates/stackable-operator/src/crd/listener/core/mod.rs +++ b/crates/stackable-operator/src/crd/listener/core/mod.rs @@ -45,6 +45,8 @@ pub mod versioned { /// Preserves the client source IP and avoid a second hop for LoadBalancer and NodePort type /// Services, but makes clients responsible for spreading the load. + /// + /// Does not work everywhere, e.g. not on IONOS! Local, } From 40329fb233b18913f514d511c0e4abd13be5a4f9 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Thu, 9 Oct 2025 09:51:00 +0200 Subject: [PATCH 2/8] changelog --- crates/stackable-operator/CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index 05b18d722..35976ec2f 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Changed + +- BREAKING: Default ListenerClass `.spec.externalTrafficPolicy` to `null` so that LoadBalancers work everywhere ([#1107]). + +[#1107]: https://github.com/stackabletech/operator-rs/pull/1107 + ## [0.99.0] - 2025-10-06 ### Added From 7a33db255b06136c1034da84654275098bd6a3c4 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Thu, 23 Oct 2025 10:35:09 +0200 Subject: [PATCH 3/8] Update crates/stackable-operator/src/crd/listener/class/mod.rs Co-authored-by: Techassi --- .../src/crd/listener/class/mod.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/crates/stackable-operator/src/crd/listener/class/mod.rs b/crates/stackable-operator/src/crd/listener/class/mod.rs index 3bfa923e6..7c3970026 100644 --- a/crates/stackable-operator/src/crd/listener/class/mod.rs +++ b/crates/stackable-operator/src/crd/listener/class/mod.rs @@ -55,15 +55,14 @@ pub mod versioned { /// It is a Kubernetes feature that controls how external traffic is routed to a Kubernetes /// Service. /// - /// * `Cluster`: Kubernetes defaults to `Cluster`, which means that traffic is routed to any - /// node in the Kubernetes cluster that has a pod running the service. - /// * `Local`: Means that traffic is only routed to pods running on the same node as the - /// Service. + /// * `Cluster`: Kubernetes default. Traffic is routed to any node in the Kubernetes cluster that + /// has a pod running the service. + /// * `Local`: Traffic is only routed to pods running on the same node as the Service. /// - /// `Local` has a better performance as it avoids a network hop, but requires a "clever" - /// LoadBalancer, that respects what Pods run on which nodes and routes traffic only to that - /// nodes accordingly. Some cloud providers (such as IONOS) or bare metal installations - /// don't have such features, so the default is `Cluster` to work everywhere. + /// The `Local` mode has better performance as it avoids a network hop, but requires a more + /// sophisticated LoadBalancer, that respects what Pods run on which nodes and routes traffic only + /// to these nodes accordingly. Some cloud providers or bare metal installations do not implement + /// some of the required features. pub service_external_traffic_policy: Option, /// Whether addresses should prefer using the IP address (`IP`) or the hostname (`Hostname`). From 31374cf4dcbdfeb52ed539a43f438f98e8d896f6 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Thu, 23 Oct 2025 11:22:08 +0200 Subject: [PATCH 4/8] Update crates/stackable-operator/src/crd/listener/core/mod.rs --- crates/stackable-operator/src/crd/listener/core/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/stackable-operator/src/crd/listener/core/mod.rs b/crates/stackable-operator/src/crd/listener/core/mod.rs index 7016d39e5..545b19afd 100644 --- a/crates/stackable-operator/src/crd/listener/core/mod.rs +++ b/crates/stackable-operator/src/crd/listener/core/mod.rs @@ -46,7 +46,7 @@ pub mod versioned { /// Preserves the client source IP and avoid a second hop for LoadBalancer and NodePort type /// Services, but makes clients responsible for spreading the load. /// - /// Does not work everywhere, e.g. not on IONOS! + /// Does not work on all Kubernetes installations. Local, } From fbad861ac915987bdd82f41b31ef9cf2d6cd7771 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Thu, 23 Oct 2025 11:24:52 +0200 Subject: [PATCH 5/8] Add dec comment of defaults --- crates/stackable-operator/crds/ListenerClass.yaml | 15 +++++++-------- .../src/crd/listener/class/mod.rs | 4 ++++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/crates/stackable-operator/crds/ListenerClass.yaml b/crates/stackable-operator/crds/ListenerClass.yaml index dbb5365c9..abab0c2e7 100644 --- a/crates/stackable-operator/crds/ListenerClass.yaml +++ b/crates/stackable-operator/crds/ListenerClass.yaml @@ -98,15 +98,14 @@ spec: It is a Kubernetes feature that controls how external traffic is routed to a Kubernetes Service. - * `Cluster`: Kubernetes defaults to `Cluster`, which means that traffic is routed to any - node in the Kubernetes cluster that has a pod running the service. - * `Local`: Means that traffic is only routed to pods running on the same node as the - Service. + * `Cluster`: Kubernetes default. Traffic is routed to any node in the Kubernetes cluster that + has a pod running the service. + * `Local`: Traffic is only routed to pods running on the same node as the Service. - `Local` has a better performance as it avoids a network hop, but requires a "clever" - LoadBalancer, that respects what Pods run on which nodes and routes traffic only to that - nodes accordingly. Some cloud providers (such as IONOS) or bare metal installations - don't have such features, so the default is `Cluster` to work everywhere. + The `Local` mode has better performance as it avoids a network hop, but requires a more + sophisticated LoadBalancer, that respects what Pods run on which nodes and routes traffic only + to these nodes accordingly. Some cloud providers or bare metal installations do not implement + some of the required features. serviceType: description: The method used to access the services. enum: diff --git a/crates/stackable-operator/src/crd/listener/class/mod.rs b/crates/stackable-operator/src/crd/listener/class/mod.rs index 7c3970026..f47d2e810 100644 --- a/crates/stackable-operator/src/crd/listener/class/mod.rs +++ b/crates/stackable-operator/src/crd/listener/class/mod.rs @@ -63,6 +63,10 @@ pub mod versioned { /// sophisticated LoadBalancer, that respects what Pods run on which nodes and routes traffic only /// to these nodes accordingly. Some cloud providers or bare metal installations do not implement /// some of the required features. + // + // Pls note that we shouldn't mandate the default, but just let Kubernetes choose what to do + // (currently this means defaulting to Cluster), as this sound the most future-proof to me. + // Maybe in the future k8s defaults to Local if the LoadBalancer supports it pub service_external_traffic_policy: Option, /// Whether addresses should prefer using the IP address (`IP`) or the hostname (`Hostname`). From 294b64f2d859b932fcf83317856fdd4c6129c33c Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Tue, 28 Oct 2025 11:58:32 +0100 Subject: [PATCH 6/8] Use patched kube --- Cargo.lock | 33 ++++++----------- Cargo.toml | 3 ++ .../crds/AuthenticationClass.yaml | 1 - .../stackable-operator/crds/DummyCluster.yaml | 10 +---- .../crds/ListenerClass.yaml | 37 +++++-------------- 5 files changed, 26 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 74d75cc59..039707bec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -855,9 +855,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.5" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "form_urlencoded" @@ -1066,21 +1066,15 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" dependencies = [ "allocator-api2", "equivalent", "foldhash", ] -[[package]] -name = "hashbrown" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" - [[package]] name = "heck" version = "0.5.0" @@ -1360,7 +1354,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.16.0", + "hashbrown", ] [[package]] @@ -1518,8 +1512,7 @@ dependencies = [ [[package]] name = "kube" version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e7bb0b6a46502cc20e4575b6ff401af45cfea150b34ba272a3410b78aa014e" +source = "git+https://github.com/stackabletech/kube-rs?branch=test%2Fadd-enum-tests#9eaedbb01d24ce171608a8006051a5c646e59f2c" dependencies = [ "k8s-openapi", "kube-client", @@ -1531,8 +1524,7 @@ dependencies = [ [[package]] name = "kube-client" version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4987d57a184d2b5294fdad3d7fc7f278899469d21a4da39a8f6ca16426567a36" +source = "git+https://github.com/stackabletech/kube-rs?branch=test%2Fadd-enum-tests#9eaedbb01d24ce171608a8006051a5c646e59f2c" dependencies = [ "base64", "bytes", @@ -1567,8 +1559,7 @@ dependencies = [ [[package]] name = "kube-core" version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914bbb770e7bb721a06e3538c0edd2babed46447d128f7c21caa68747060ee73" +source = "git+https://github.com/stackabletech/kube-rs?branch=test%2Fadd-enum-tests#9eaedbb01d24ce171608a8006051a5c646e59f2c" dependencies = [ "chrono", "derive_more", @@ -1586,8 +1577,7 @@ dependencies = [ [[package]] name = "kube-derive" version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03dee8252be137772a6ab3508b81cd797dee62ee771112a2453bc85cbbe150d2" +source = "git+https://github.com/stackabletech/kube-rs?branch=test%2Fadd-enum-tests#9eaedbb01d24ce171608a8006051a5c646e59f2c" dependencies = [ "darling", "proc-macro2", @@ -1600,8 +1590,7 @@ dependencies = [ [[package]] name = "kube-runtime" version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aea4de4b562c5cc89ab10300bb63474ae1fa57ff5a19275f2e26401a323e3fd" +source = "git+https://github.com/stackabletech/kube-rs?branch=test%2Fadd-enum-tests#9eaedbb01d24ce171608a8006051a5c646e59f2c" dependencies = [ "ahash", "async-broadcast", @@ -1609,7 +1598,7 @@ dependencies = [ "backon", "educe", "futures", - "hashbrown 0.15.5", + "hashbrown", "hostname", "json-patch", "k8s-openapi", diff --git a/Cargo.toml b/Cargo.toml index bceb6c9b0..dc8b7102d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -93,3 +93,6 @@ rsa.opt-level = 3 [profile.dev.package] insta.opt-level = 3 similar.opt-level = 3 + +[patch.crates-io] +kube = { git = "https://github.com/stackabletech/kube-rs", branch = "test/add-enum-tests" } diff --git a/crates/stackable-operator/crds/AuthenticationClass.yaml b/crates/stackable-operator/crds/AuthenticationClass.yaml index 8d2c5de7c..a4cb0dfb9 100644 --- a/crates/stackable-operator/crds/AuthenticationClass.yaml +++ b/crates/stackable-operator/crds/AuthenticationClass.yaml @@ -246,7 +246,6 @@ spec: intended to be used (via the `.well-known` discovery). enum: - Keycloak - - null nullable: true type: string rootPath: diff --git a/crates/stackable-operator/crds/DummyCluster.yaml b/crates/stackable-operator/crds/DummyCluster.yaml index 401b7b6c8..80ae1c35c 100644 --- a/crates/stackable-operator/crds/DummyCluster.yaml +++ b/crates/stackable-operator/crds/DummyCluster.yaml @@ -129,12 +129,11 @@ spec: - ERROR - FATAL - NONE - - null nullable: true type: string type: object custom: - description: Custom log configuration provided in a ConfigMap + description: Log configuration provided in a ConfigMap properties: configMap: description: ConfigMap containing the log configuration files @@ -157,7 +156,6 @@ spec: - ERROR - FATAL - NONE - - null nullable: true type: string type: object @@ -177,7 +175,6 @@ spec: - ERROR - FATAL - NONE - - null nullable: true type: string type: object @@ -419,12 +416,11 @@ spec: - ERROR - FATAL - NONE - - null nullable: true type: string type: object custom: - description: Custom log configuration provided in a ConfigMap + description: Log configuration provided in a ConfigMap properties: configMap: description: ConfigMap containing the log configuration files @@ -447,7 +443,6 @@ spec: - ERROR - FATAL - NONE - - null nullable: true type: string type: object @@ -467,7 +462,6 @@ spec: - ERROR - FATAL - NONE - - null nullable: true type: string type: object diff --git a/crates/stackable-operator/crds/ListenerClass.yaml b/crates/stackable-operator/crds/ListenerClass.yaml index abab0c2e7..0e87e2b65 100644 --- a/crates/stackable-operator/crds/ListenerClass.yaml +++ b/crates/stackable-operator/crds/ListenerClass.yaml @@ -77,35 +77,18 @@ spec: description: Annotations that should be added to the Service object. type: object serviceExternalTrafficPolicy: - anyOf: - - description: |- - Service Internal Traffic Policy enables internal traffic restrictions to only route internal - traffic to endpoints within the node the traffic originated from. The "internal" traffic - here refers to traffic originated from Pods in the current cluster. This can help to reduce - costs and improve performance. See [Kubernetes docs][k8s-docs]. - - [k8s-docs]: https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/ - enum: - - Cluster - - Local - type: string - - enum: - - null - nullable: true description: |- - `externalTrafficPolicy` that should be set on the created Service objects. - - It is a Kubernetes feature that controls how external traffic is routed to a Kubernetes - Service. - - * `Cluster`: Kubernetes default. Traffic is routed to any node in the Kubernetes cluster that - has a pod running the service. - * `Local`: Traffic is only routed to pods running on the same node as the Service. + Service Internal Traffic Policy enables internal traffic restrictions to only route internal + traffic to endpoints within the node the traffic originated from. The "internal" traffic + here refers to traffic originated from Pods in the current cluster. This can help to reduce + costs and improve performance. See [Kubernetes docs][k8s-docs]. - The `Local` mode has better performance as it avoids a network hop, but requires a more - sophisticated LoadBalancer, that respects what Pods run on which nodes and routes traffic only - to these nodes accordingly. Some cloud providers or bare metal installations do not implement - some of the required features. + [k8s-docs]: https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/ + enum: + - Cluster + - Local + nullable: true + type: string serviceType: description: The method used to access the services. enum: From fbeccd45094110e3d63c8d1b444cccfda869ee2e Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Wed, 29 Oct 2025 08:53:13 +0100 Subject: [PATCH 7/8] Update kube branch --- Cargo.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index acd3dbc57..ba5ebdc4b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1480,7 +1480,7 @@ dependencies = [ [[package]] name = "kube" version = "2.0.1" -source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#f7f8a9c95b4f7b80e2eaec9094058306367ccda3" +source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#26543e85dc7daaf82d8f7dbd902b26775798879e" dependencies = [ "k8s-openapi", "kube-client", @@ -1492,7 +1492,7 @@ dependencies = [ [[package]] name = "kube-client" version = "2.0.1" -source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#f7f8a9c95b4f7b80e2eaec9094058306367ccda3" +source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#26543e85dc7daaf82d8f7dbd902b26775798879e" dependencies = [ "base64", "bytes", @@ -1527,7 +1527,7 @@ dependencies = [ [[package]] name = "kube-core" version = "2.0.1" -source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#f7f8a9c95b4f7b80e2eaec9094058306367ccda3" +source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#26543e85dc7daaf82d8f7dbd902b26775798879e" dependencies = [ "chrono", "derive_more", @@ -1545,7 +1545,7 @@ dependencies = [ [[package]] name = "kube-derive" version = "2.0.1" -source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#f7f8a9c95b4f7b80e2eaec9094058306367ccda3" +source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#26543e85dc7daaf82d8f7dbd902b26775798879e" dependencies = [ "darling", "proc-macro2", @@ -1558,7 +1558,7 @@ dependencies = [ [[package]] name = "kube-runtime" version = "2.0.1" -source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#f7f8a9c95b4f7b80e2eaec9094058306367ccda3" +source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#26543e85dc7daaf82d8f7dbd902b26775798879e" dependencies = [ "ahash", "async-broadcast", From 6ccec940c6aed9cfdf8333e6b1a95c7cc8220047 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Wed, 29 Oct 2025 10:46:08 +0100 Subject: [PATCH 8/8] Update crates/stackable-operator/src/crd/listener/class/mod.rs Co-authored-by: Techassi --- crates/stackable-operator/src/crd/listener/class/mod.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/crates/stackable-operator/src/crd/listener/class/mod.rs b/crates/stackable-operator/src/crd/listener/class/mod.rs index f47d2e810..dd4e9e550 100644 --- a/crates/stackable-operator/src/crd/listener/class/mod.rs +++ b/crates/stackable-operator/src/crd/listener/class/mod.rs @@ -64,9 +64,11 @@ pub mod versioned { /// to these nodes accordingly. Some cloud providers or bare metal installations do not implement /// some of the required features. // - // Pls note that we shouldn't mandate the default, but just let Kubernetes choose what to do - // (currently this means defaulting to Cluster), as this sound the most future-proof to me. - // Maybe in the future k8s defaults to Local if the LoadBalancer supports it + // Please note that Option is used here instead of a different default traffic policy. This will be + // deserialized as `None` and will thus forward the selection of the traffic policy to Kubernetes + // (which currently defaults to `Cluster`). This should be the most sensible option in most cases. + // There is the possibility Kubernetes will automatically choose `Local` if support for it on the + // LoadBalancer has been detected. pub service_external_traffic_policy: Option, /// Whether addresses should prefer using the IP address (`IP`) or the hostname (`Hostname`).