Skip to content

Commit 0cbf719

Browse files
k3s: customizable listen port (#1419)
* Bump flake to a compatible golang version Signed-off-by: Devon Stewart <blast@hardchee.se> * nix flake update Signed-off-by: Devon Stewart <blast@hardchee.se> * Add gotools to ensure we have goimports Signed-off-by: Devon Stewart <blast@hardchee.se> * make fmt Signed-off-by: Devon Stewart <blast@hardchee.se> * Clarify drifted arg name Signed-off-by: Devon Stewart <blast@hardchee.se> * Thread .kubernetes.listenPort through to install functions Signed-off-by: Devon Stewart <blast@hardchee.se> --------- Signed-off-by: Devon Stewart <blast@hardchee.se> Co-authored-by: Devon Stewart <blast@hardchee.se>
1 parent 5ca8a40 commit 0cbf719

File tree

11 files changed

+61
-20
lines changed

11 files changed

+61
-20
lines changed

cmd/start.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ func init() {
234234
startCmd.Flags().StringVar(&startCmdArgs.Kubernetes.Version, "kubernetes-version", defaultKubernetesVersion, "must match a k3s version https://github.com/k3s-io/k3s/releases")
235235
startCmd.Flags().StringSliceVar(&startCmdArgs.Flags.LegacyKubernetesDisable, "kubernetes-disable", nil, "components to disable for k3s e.g. traefik,servicelb")
236236
startCmd.Flags().StringSliceVar(&startCmdArgs.Kubernetes.K3sArgs, "k3s-arg", defaultK3sArgs, "additional args to pass to k3s")
237+
startCmd.Flags().IntVar(&startCmdArgs.Kubernetes.Port, "k3s-listen-port", 0, "k3s server listen port")
237238
startCmd.Flag("with-kubernetes").Hidden = true
238239
startCmd.Flag("kubernetes-disable").Hidden = true
239240

@@ -475,6 +476,9 @@ func prepareConfig(cmd *cobra.Command) {
475476
if !cmd.Flag("k3s-arg").Changed && current.Kubernetes.K3sArgs != nil {
476477
startCmdArgs.Kubernetes.K3sArgs = current.Kubernetes.K3sArgs
477478
}
479+
if !cmd.Flag("k3s-listen-port").Changed && current.Kubernetes.Port > 0 {
480+
startCmdArgs.Kubernetes.Port = current.Kubernetes.Port
481+
}
478482
if !cmd.Flag("runtime").Changed {
479483
startCmdArgs.Runtime = current.Runtime
480484
}

colima.nix

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
with pkgs;
44

5-
buildGo120Module {
5+
buildGo123Module {
66
name = "colima";
77
pname = "colima";
88
src = ./.;
99
nativeBuildInputs = [ installShellFiles makeWrapper git ];
10-
vendorSha256 = "sha256-7DIhSjHpaCyHyXKhR8KWQc2YGaD8CMq+BZHF4zIkL50=";
10+
vendorHash = "sha256-ZwgzKCOEhgKK2LNRLjnWP6qHI4f6OGORvt3CREJf55I=";
1111
CGO_ENABLED = 1;
1212

1313
subPackages = [ "cmd/colima" ];

config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ type Kubernetes struct {
7676
Enabled bool `yaml:"enabled"`
7777
Version string `yaml:"version"`
7878
K3sArgs []string `yaml:"k3sArgs"`
79+
Port int `yaml:"port,omitempty"`
7980
}
8081

8182
// Network is VM network configuration

embedded/defaults/colima.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ kubernetes:
4444
# Default: traefik is disabled
4545
k3sArgs: [--disable=traefik]
4646

47+
# Kubernetes port to listen on
48+
# A common port is 6443, though left unbound to ensure no port conflicts
49+
# Default: pick random unbound port
50+
port: 0
51+
4752
# Auto-activate on the Host for client access.
4853
# Setting to true does the following on startup
4954
# - sets as active Docker context (for Docker runtime).

environment/container/kubernetes/k3s.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,12 @@ func installK3s(host environment.HostActions,
4040
log *logrus.Entry,
4141
containerRuntime string,
4242
k3sVersion string,
43-
disable []string,
43+
k3sArgs []string,
44+
k3sListenPort int,
4445
) {
4546
installK3sBinary(host, guest, a, k3sVersion)
4647
installK3sCache(host, guest, a, log, containerRuntime, k3sVersion)
47-
installK3sCluster(host, guest, a, containerRuntime, k3sVersion, disable)
48+
installK3sCluster(host, guest, a, containerRuntime, k3sVersion, k3sArgs, k3sListenPort)
4849
}
4950

5051
func installK3sBinary(
@@ -141,6 +142,7 @@ func installK3sCluster(
141142
containerRuntime string,
142143
k3sVersion string,
143144
k3sArgs []string,
145+
k3sListenPort int,
144146
) {
145147
// install k3s last to ensure it is the last step
146148
downloadPath := "/tmp/k3s-install.sh"
@@ -184,7 +186,7 @@ func installK3sCluster(
184186
}
185187

186188
a.Add(func() error {
187-
port, err := getPortNumber(guest)
189+
port, err := getPortNumber(guest, k3sListenPort)
188190
if err != nil {
189191
return err
190192
}
@@ -199,7 +201,7 @@ func installK3sCluster(
199201

200202
// getPortNumber retrieves the previously set port number.
201203
// If missing, an available random port is set and return.
202-
func getPortNumber(guest environment.GuestActions) (int, error) {
204+
func getPortNumber(guest environment.GuestActions, k3sListenPort int) (int, error) {
203205
// port previously set, reuse it
204206
if port, err := strconv.Atoi(guest.Get(listenPortKey)); err == nil && port > 0 {
205207
return port, nil
@@ -211,8 +213,15 @@ func getPortNumber(guest environment.GuestActions) (int, error) {
211213
return 6443, nil
212214
}
213215

214-
// new instance, assign random port
215-
port := util.RandomAvailablePort()
216+
var port int
217+
if k3sListenPort > 0 {
218+
// template configured port
219+
port = k3sListenPort
220+
} else {
221+
// new instance, assign random port
222+
port = util.RandomAvailablePort()
223+
}
224+
216225
if err := guest.Set(listenPortKey, strconv.Itoa(port)); err != nil {
217226
return 0, err
218227
}

environment/container/kubernetes/kubernetes.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ func (c *kubernetesRuntime) Provision(ctx context.Context) error {
117117
installK3sCache(c.host, c.guest, a, log, runtime, conf.Version)
118118
}
119119
// other settings may have changed e.g. ingress
120-
installK3sCluster(c.host, c.guest, a, runtime, conf.Version, conf.K3sArgs)
120+
installK3sCluster(c.host, c.guest, a, runtime, conf.Version, conf.K3sArgs, conf.Port)
121121
} else {
122122
if c.isInstalled() {
123123
a.Stagef("version changed to %s, downloading and installing", conf.Version)
@@ -128,7 +128,7 @@ func (c *kubernetesRuntime) Provision(ctx context.Context) error {
128128
a.Stage("installing")
129129
}
130130
}
131-
installK3s(c.host, c.guest, a, log, runtime, conf.Version, conf.K3sArgs)
131+
installK3s(c.host, c.guest, a, log, runtime, conf.Version, conf.K3sArgs, conf.Port)
132132
}
133133

134134
// this needs to happen on each startup

environment/vm/lima/file.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"strconv"
1010
"strings"
1111
"time"
12+
1213
"github.com/abiosoft/colima/environment"
1314
)
1415

flake.lock

Lines changed: 25 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{
22
description = "Container runtimes on macOS (and Linux) with minimal setup";
33

4-
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
4+
# Last revision with go_1_23
5+
inputs.nixpkgs.url = "github:NixOS/nixpkgs/25.05";
56

67
outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem
78
(system:

shell.nix

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
pkgs.mkShell {
44
# nativeBuildInputs is usually what you want -- tools you need to run
55
nativeBuildInputs = with pkgs.buildPackages; [
6-
go_1_20
6+
go_1_23
7+
gotools
78
git
89
lima
910
qemu

0 commit comments

Comments
 (0)