Skip to content

Commit

Permalink
Allow to disable CPLB load balancer
Browse files Browse the repository at this point in the history
This is one of the remaining tasks of #5279. The intended use case for
this is to allow to use the VIPs functionality while using some user
provided load balancer such as HAProxy, nginx, etc...

Also fixes some CPLB documentation mistakes spotted while fixing this.

Signed-off-by: Juan-Luis de Sousa-Valadas Castaño <jvaladas@mirantis.com>

mend
  • Loading branch information
juanluisvaladas committed Jan 2, 2025
1 parent d43f482 commit aa2c695
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 9 deletions.
10 changes: 6 additions & 4 deletions docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -318,10 +318,12 @@ Configuration options related to k0s's [control plane load balancing] feature

Configuration options related to keepalived in [control plane load balancing]

| Element | Description |
| ---------------- | ----------------------------------------------------------------------------------------------------------- |
| `vrrpInstances` | Configuration options related to the VRRP. This is an array which allows to configure multiple virtual IPs. |
| `virtualServers` | Configuration options related LoadBalancing. This is an array which allows to configure multiple LBs. |
| Element | Description |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| `vrrpInstances` | Configuration options related to the VRRP. This is an array which allows to configure multiple virtual IPs. |
| `virtualServers` | Configuration options related LoadBalancing. This is an array which allows to configure multiple LBs. |
| `userSpaceProxyBindPort` | The port where the userspace proxy will bind to. This port is for internal use only but listens on every interface. Default: `6443` |
| `disableLoadBalancer` | Disables the load balancer. Default: `false` |

##### `spec.network.controlPlaneLoadBalancing.keepalived.vrrpInstances`

Expand Down
7 changes: 5 additions & 2 deletions pkg/apis/k0s/v1beta1/cplb.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,16 @@ type KeepalivedSpec struct {
// which allows to configure multiple load balancers.
VirtualServers VirtualServers `json:"virtualServers,omitempty"`
// UserspaceProxyPort is the port where the userspace proxy will bind
// to. This port is only exposed on the localhost interface and is only
// used internally. Defaults to 6444.
// to. This port is onlyis only used internally. Defaults to 6444, but
// listens in every interface
// +kubebuilder:default=6444
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=65535
// +optional
UserSpaceProxyPort int `json:"userSpaceProxyBindPort,omitempty"`
// DisableLoadBalanmcer disables the load balancer.
// +optional
DisableLoadBalancer bool `json:"disableLoadBalancer,omitempty"`
}

// VRRPInstances is a list of VRRPInstance
Expand Down
3 changes: 2 additions & 1 deletion pkg/component/controller/cplb/cplb_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ func (k *Keepalived) Start(ctx context.Context) error {
}
}

if len(k.Config.VRRPInstances) > 0 || len(k.Config.VirtualServers) > 0 {
if !k.Config.DisableLoadBalancer && (len(k.Config.VRRPInstances) > 0 || len(k.Config.VirtualServers) > 0) {
k.log.Info("Starting CPLB reconciler")
updateCh := make(chan struct{}, 1)
k.reconciler = NewCPLBReconciler(k.KubeConfigPath, updateCh)
Expand Down Expand Up @@ -160,6 +160,7 @@ func (k *Keepalived) Start(ctx context.Context) error {
}
}()
}

return k.supervisor.Supervise()
}

Expand Down
7 changes: 5 additions & 2 deletions static/_crds/k0s/k0s.k0sproject.io_clusterconfigs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -508,12 +508,15 @@ spec:
Keepalived contains configuration options related to the "Keepalived" type
of load balancing.
properties:
disableLoadBalancer:
description: DisableLoadBalanmcer disables the load balancer.
type: boolean
userSpaceProxyBindPort:
default: 6444
description: |-
UserspaceProxyPort is the port where the userspace proxy will bind
to. This port is only exposed on the localhost interface and is only
used internally. Defaults to 6444.
to. This port is onlyis only used internally. Defaults to 6444, but
listens in every interface
maximum: 65535
minimum: 1
type: integer
Expand Down

0 comments on commit aa2c695

Please sign in to comment.