From 8456412bf39c8aa737b4fcf2e8f49ec5efeaf6cd Mon Sep 17 00:00:00 2001 From: Jan-Bulthuis Date: Sat, 17 Jan 2026 13:32:26 +0100 Subject: [PATCH] feat: Move to Cilium --- hosts/vm-k1s/configuration.nix | 60 ++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/hosts/vm-k1s/configuration.nix b/hosts/vm-k1s/configuration.nix index 474edf3..76a1198 100644 --- a/hosts/vm-k1s/configuration.nix +++ b/hosts/vm-k1s/configuration.nix @@ -33,6 +33,9 @@ enable = true; extraFlags = [ "--cluster-domain ${inputs.secrets.lab.k3s.clusterDomain}" + "--flannel-backend=none" + "--disable-network-policy" + "--disable-kube-proxy" ]; disable = [ # "coredns" # CoreDNS is required for Flux to be able to bootstrap the cluster (Flux needs to resolve the git repo) @@ -55,8 +58,62 @@ "1-secrets-backup" = { source = "/opt/k3s-secrets-backup/secrets.yaml"; }; + # TODO: Move to flux config, once it is possible to easily install flux without CNI + cilium-secrets-namespace = { + content = { + apiVersion = "v1"; + kind = "Namespace"; + metadata.name = "cilium-secrets"; + }; + }; + # TODO: Move to flux config, once it is possible to easily install flux without CNI + gateway-api = + let + manifest = pkgs.fetchurl { + url = "https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.1/experimental-install.yaml"; + hash = "sha256-08IN1MBDGTZWemkXypMfbc7RMQJCvmK57KB72YkuICU="; + }; + in + { + source = manifest; + }; }; autoDeployCharts = { + # TODO: Move to flux config, once it is possible to easily install flux without CNI + cilium = { + name = "cilium"; + repo = "oci://quay.io/cilium/charts/cilium"; + version = "1.18.6"; + hash = "sha256-+yr38lc5X1+eXCFE/rq/K0m4g/IiNFJHuhB+Nu24eUs="; + createNamespace = true; + targetNamespace = "cilium-system"; + values = { + operator.replicas = 1; + kubeProxyReplacement = true; + ipam.operator.clusterPoolIPv4PodCIDRList = [ "10.11.0.0/16" ]; + cluster = { + id = 1; + name = "vm-k1s"; + }; + k8sServiceHost = "10.10.50.60"; + k8sServicePort = 6443; + policyEnforcementMode = "always"; + gatewayAPI = { + enabled = true; + gatewayClass.create = "true"; + secretsNamespace.create = false; + }; + tls.secretsNamespace.create = false; + hubble = { + relay.enabled = true; + ui.enabled = true; + peerService.clusterDomain = inputs.secrets.lab.k3s.clusterDomain; + }; + }; + extraFieldDefinitions = { + spec.bootstrap = true; + }; + }; flux-operator = { name = "flux-operator"; repo = "oci://ghcr.io/controlplaneio-fluxcd/charts/flux-operator"; @@ -152,11 +209,14 @@ environment.variables = { KUBECONFIG = "/etc/rancher/k3s/k3s.yaml"; + CILIUM_NAMESPACE = "cilium-system"; }; environment.systemPackages = with pkgs; [ fluxcd k9s + cilium-cli + hubble ]; # Use correct disko profile