Skip to content

Conversation

brb
Copy link
Member

@brb brb commented May 28, 2025

See commit msgs. TL;DR the following flag support has been added to the pkg/lb:

  • EnableHostPort (to-be removed in v1.19)
  • EnableSessionAffinity (to-be removed in v1.19)
  • EnableSVCSourceRangeCheck (to-be removed in v1.19)
  • EnableInternalTrafficPolicy (to-be removed in v1.19)
  • EnableHealthCheckLoadBalancerIP (need to ping Google folks whether their external LB HC can do HC using a node IP instead of LB IP. if yes, then we can remove the flag and the code)

Blocked by #40026.

@brb brb added release-note/minor This PR changes functionality that users may find relevant to operating Cilium. area/loadbalancing Impacts load-balancing and Kubernetes service implementations release-blocker/1.18 This issue will prevent the release of the next version of Cilium. labels May 28, 2025
@brb brb force-pushed the pr/brb/exp-lb-kpr-subflags branch 7 times, most recently from 59c3c89 to b1cd8c2 Compare June 3, 2025 09:51
@brb
Copy link
Member Author

brb commented Jun 3, 2025

/test

brb added a commit that referenced this pull request Jun 13, 2025
This commit introduces kpr.Cell which provides kpr.KPRConfig. The latter
is derived from KPR flags such as --kube-proxy-replacement,
--enable-node-port and so on.

The new cell allows pkg/loadbalancer to *not* depend on the
DaemonConfigPromise when implementing the flags support (will be done in
a separate PR). The promise dependence comes from the fact that
previously initKubeProxyReplacement() could modify some of the flags
(for example, if --kpr=true, then --enable-node-port will be set to
true). The invocation of the helper function happened after the
DaemonConfig has been constructed. Thus, any pkg must consume the
DaemonConfig in a form of the promise to avoid the races.

For now the cell contains only a few flags (required for
#39767). In v1.19 we will move the
rest of the flags. Afterwards, we can re-consider whether having the
dedicated cell for the KPR config makes sense (for example, we could
move it to pkg/loadbalancer).

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
brb added a commit that referenced this pull request Jun 13, 2025
This commit introduces kpr.Cell which provides kpr.KPRConfig. The latter
is derived from KPR flags such as --kube-proxy-replacement,
--enable-node-port and so on.

The new cell allows pkg/loadbalancer to *not* depend on the
DaemonConfigPromise when implementing the flags support (will be done in
a separate PR). The promise dependence comes from the fact that
previously initKubeProxyReplacement() could modify some of the flags
(for example, if --kpr=true, then --enable-node-port will be set to
true). The invocation of the helper function happened after the
DaemonConfig has been constructed. Thus, any pkg must consume the
DaemonConfig in a form of the promise to avoid the races.

For now the cell contains only a few flags (required for
#39767). In v1.19 we will move the
rest of the flags. Afterwards, we can re-consider whether having the
dedicated cell for the KPR config makes sense (for example, we could
move it to pkg/loadbalancer).

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
@brb brb mentioned this pull request Jun 13, 2025
brb added a commit that referenced this pull request Jun 13, 2025
This commit introduces kpr.Cell which provides kpr.KPRConfig. The latter
is derived from KPR flags such as --kube-proxy-replacement,
--enable-node-port and so on.

The new cell allows pkg/loadbalancer to *not* depend on the
DaemonConfigPromise when implementing the flags support (will be done in
a separate PR). The promise dependence comes from the fact that
previously initKubeProxyReplacement() could modify some of the flags
(for example, if --kpr=true, then --enable-node-port will be set to
true). The invocation of the helper function happened after the
DaemonConfig has been constructed. Thus, any pkg must consume the
DaemonConfig in a form of the promise to avoid the races.

For now the cell contains only a few flags (required for
#39767). In v1.19 we will move the
rest of the flags. Afterwards, we can re-consider whether having the
dedicated cell for the KPR config makes sense (for example, we could
move it to pkg/loadbalancer).

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
brb added a commit that referenced this pull request Jun 13, 2025
This commit introduces kpr.Cell which provides kpr.KPRConfig. The latter
is derived from KPR flags such as --kube-proxy-replacement,
--enable-node-port and so on.

The new cell allows pkg/loadbalancer to *not* depend on the
DaemonConfigPromise when implementing the flags support (will be done in
a separate PR). The promise dependence comes from the fact that
previously initKubeProxyReplacement() could modify some of the flags
(for example, if --kpr=true, then --enable-node-port will be set to
true). The invocation of the helper function happened after the
DaemonConfig has been constructed. Thus, any pkg must consume the
DaemonConfig in a form of the promise to avoid the races.

For now the cell contains only a few flags (required for
#39767). In v1.19 we will move the
rest of the flags. Afterwards, we can re-consider whether having the
dedicated cell for the KPR config makes sense (for example, we could
move it to pkg/loadbalancer).

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
brb added a commit that referenced this pull request Jun 13, 2025
This commit introduces kpr.Cell which provides kpr.KPRConfig. The latter
is derived from KPR flags such as --kube-proxy-replacement,
--enable-node-port and so on.

The new cell allows pkg/loadbalancer to *not* depend on the
DaemonConfigPromise when implementing the flags support (will be done in
a separate PR). The promise dependence comes from the fact that
previously initKubeProxyReplacement() could modify some of the flags
(for example, if --kpr=true, then --enable-node-port will be set to
true). The invocation of the helper function happened after the
DaemonConfig has been constructed. Thus, any pkg must consume the
DaemonConfig in a form of the promise to avoid the races.

For now the cell contains only a few flags (required for
#39767). In v1.19 we will move the
rest of the flags. Afterwards, we can re-consider whether having the
dedicated cell for the KPR config makes sense (for example, we could
move it to pkg/loadbalancer).

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
@brb brb force-pushed the pr/brb/exp-lb-kpr-subflags branch from b1cd8c2 to b942256 Compare June 13, 2025 12:03
brb added a commit that referenced this pull request Jun 13, 2025
This commit introduces kpr.Cell which provides kpr.KPRConfig. The latter
is derived from KPR flags such as --kube-proxy-replacement,
--enable-node-port and so on.

The new cell allows pkg/loadbalancer to *not* depend on the
DaemonConfigPromise when implementing the flags support (will be done in
a separate PR). The promise dependence comes from the fact that
previously initKubeProxyReplacement() could modify some of the flags
(for example, if --kpr=true, then --enable-node-port will be set to
true). The invocation of the helper function happened after the
DaemonConfig has been constructed. Thus, any pkg must consume the
DaemonConfig in a form of the promise to avoid the races.

For now the cell contains only a few flags (required for
#39767). In v1.19 we will move the
rest of the flags. Afterwards, we can re-consider whether having the
dedicated cell for the KPR config makes sense (for example, we could
move it to pkg/loadbalancer).

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
@brb
Copy link
Member Author

brb commented Jun 13, 2025

/test

brb added a commit that referenced this pull request Jun 13, 2025
This commit introduces kpr.Cell which provides kpr.KPRConfig. The latter
is derived from KPR flags such as --kube-proxy-replacement,
--enable-node-port and so on.

The new cell allows pkg/loadbalancer to *not* depend on the
DaemonConfigPromise when implementing the flags support (will be done in
a separate PR). The promise dependence comes from the fact that
previously initKubeProxyReplacement() could modify some of the flags
(for example, if --kpr=true, then --enable-node-port will be set to
true). The invocation of the helper function happened after the
DaemonConfig has been constructed. Thus, any pkg must consume the
DaemonConfig in a form of the promise to avoid the races.

For now the cell contains only a few flags (required for
#39767). In v1.19 we will move the
rest of the flags. Afterwards, we can re-consider whether having the
dedicated cell for the KPR config makes sense (for example, we could
move it to pkg/loadbalancer).

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
brb added a commit that referenced this pull request Jun 13, 2025
This commit introduces kpr.Cell which provides kpr.KPRConfig. The latter
is derived from KPR flags such as --kube-proxy-replacement,
--enable-node-port and so on.

The new cell allows pkg/loadbalancer to *not* depend on the
DaemonConfigPromise when implementing the flags support (will be done in
a separate PR). The promise dependence comes from the fact that
previously initKubeProxyReplacement() could modify some of the flags
(for example, if --kpr=true, then --enable-node-port will be set to
true). The invocation of the helper function happened after the
DaemonConfig has been constructed. Thus, any pkg must consume the
DaemonConfig in a form of the promise to avoid the races.

For now the cell contains only a few flags (required for
#39767). In v1.19 we will move the
rest of the flags. Afterwards, we can re-consider whether having the
dedicated cell for the KPR config makes sense (for example, we could
move it to pkg/loadbalancer).

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
brb added a commit that referenced this pull request Jun 13, 2025
This commit introduces kpr.Cell which provides kpr.KPRConfig. The latter
is derived from KPR flags such as --kube-proxy-replacement,
--enable-node-port and so on.

The new cell allows pkg/loadbalancer to *not* depend on the
DaemonConfigPromise when implementing the flags support (will be done in
a separate PR). The promise dependence comes from the fact that
previously initKubeProxyReplacement() could modify some of the flags
(for example, if --kpr=true, then --enable-node-port will be set to
true). The invocation of the helper function happened after the
DaemonConfig has been constructed. Thus, any pkg must consume the
DaemonConfig in a form of the promise to avoid the races.

For now the cell contains only a few flags (required for
#39767). In v1.19 we will move the
rest of the flags. Afterwards, we can re-consider whether having the
dedicated cell for the KPR config makes sense (for example, we could
move it to pkg/loadbalancer).

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
@joestringer
Copy link
Member

What's the goal for this PR and rationale for exception to feature freeze?

@brb
Copy link
Member Author

brb commented Jun 16, 2025

What's the goal for this PR and rationale for exception to feature freeze?

@joestringer Unfortunately, this is needed by the new pkg/loadbalancer. Without this PR, it won't be possible to selectively enable some of the KPR sub-features (the selective enablement will be removed in v1.19 though).

brb added a commit that referenced this pull request Jun 16, 2025
This commit introduces kpr.Cell which provides kpr.KPRConfig. The latter
is derived from KPR flags such as --kube-proxy-replacement,
--enable-node-port and so on.

The new cell allows pkg/loadbalancer to *not* depend on the
DaemonConfigPromise when implementing the flags support (will be done in
a separate PR). The promise dependence comes from the fact that
previously initKubeProxyReplacement() could modify some of the flags
(for example, if --kpr=true, then --enable-node-port will be set to
true). The invocation of the helper function happened after the
DaemonConfig has been constructed. Thus, any pkg must consume the
DaemonConfig in a form of the promise to avoid the races.

For now the cell contains only a few flags (required for
#39767). In v1.19 we will move the
rest of the flags. Afterwards, we can re-consider whether having the
dedicated cell for the KPR config makes sense (for example, we could
move it to pkg/loadbalancer).

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
github-merge-queue bot pushed a commit that referenced this pull request Jun 16, 2025
This commit introduces kpr.Cell which provides kpr.KPRConfig. The latter
is derived from KPR flags such as --kube-proxy-replacement,
--enable-node-port and so on.

The new cell allows pkg/loadbalancer to *not* depend on the
DaemonConfigPromise when implementing the flags support (will be done in
a separate PR). The promise dependence comes from the fact that
previously initKubeProxyReplacement() could modify some of the flags
(for example, if --kpr=true, then --enable-node-port will be set to
true). The invocation of the helper function happened after the
DaemonConfig has been constructed. Thus, any pkg must consume the
DaemonConfig in a form of the promise to avoid the races.

For now the cell contains only a few flags (required for
#39767). In v1.19 we will move the
rest of the flags. Afterwards, we can re-consider whether having the
dedicated cell for the KPR config makes sense (for example, we could
move it to pkg/loadbalancer).

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
@brb brb force-pushed the pr/brb/exp-lb-kpr-subflags branch from b942256 to 8416a4e Compare June 16, 2025 15:35
@brb brb requested a review from joamaki June 16, 2025 15:36
@brb
Copy link
Member Author

brb commented Jun 16, 2025

/test

@brb brb marked this pull request as ready for review June 16, 2025 15:50
@brb brb requested a review from a team as a code owner June 16, 2025 15:50
@brb brb force-pushed the pr/brb/exp-lb-kpr-subflags branch from 8416a4e to 15b9fa2 Compare June 16, 2025 16:26
@brb
Copy link
Member Author

brb commented Jun 16, 2025

/test

@brb brb enabled auto-merge June 16, 2025 16:29
brb added 5 commits June 16, 2025 19:45
Do not provision HostPort services if !EnableHostPort.

The check will go away in v1.19 -
#39582.

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
The check will go away in v1.19 -
#39582.

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
The flag is most likely to be removed in v1.19.

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
The flag is going to be removed in v1.19 -
#39851.

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
Create a LoadBalancer service for HC only if
EnableHealthCheckLoadBalancerIP is set. More ctx about the latter -
#26728.

Signed-off-by: Martynas Pumputis <martynas@isovalent.com>
@brb brb force-pushed the pr/brb/exp-lb-kpr-subflags branch from 15b9fa2 to a637eff Compare June 16, 2025 17:45
@brb
Copy link
Member Author

brb commented Jun 16, 2025

/test

@brb brb added this pull request to the merge queue Jun 17, 2025
@maintainer-s-little-helper maintainer-s-little-helper bot added the ready-to-merge This PR has passed all tests and received consensus from code owners to merge. label Jun 17, 2025
Merged via the queue into main with commit 99fb7ed Jun 17, 2025
351 of 356 checks passed
@brb brb deleted the pr/brb/exp-lb-kpr-subflags branch June 17, 2025 06:04
@github-project-automation github-project-automation bot moved this from Proposed to Done in Release blockers Jun 17, 2025
@joestringer joestringer added release-note/misc This PR makes changes that have no direct user impact. and removed release-note/minor This PR changes functionality that users may find relevant to operating Cilium. labels Jul 1, 2025
@joestringer
Copy link
Member

I changed the release note category for this because there is no release note and the title of the PR is very cryptic. If this has user facing impact, feel free to switch it back but please also write a release note that users can understand (either through the ```release-note ... ``` section in the PR description or by renaming the PR).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/loadbalancing Impacts load-balancing and Kubernetes service implementations ready-to-merge This PR has passed all tests and received consensus from code owners to merge. release-blocker/1.18 This issue will prevent the release of the next version of Cilium. release-note/misc This PR makes changes that have no direct user impact.
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

3 participants