Global token, key and cert provisioning works
This commit is contained in:
90
lib/k8s.nix
90
lib/k8s.nix
@@ -1,4 +1,4 @@
|
||||
here: { pkgs, lib, settings, ...}:
|
||||
{ pkgs, lib, settings, here, ...}:
|
||||
with lib;
|
||||
let
|
||||
cluster-ca = pkgs.stdenv.mkDerivation {
|
||||
@@ -19,18 +19,18 @@ let
|
||||
'';
|
||||
};
|
||||
|
||||
nixos-kubernetes-join-nodes = workers:
|
||||
let
|
||||
wrk = builtins.foldl' (a: s: a + " " + s) "" workers;
|
||||
in
|
||||
pkgs.writeScriptBin "nixos-kubernetes-join-nodes" ''
|
||||
#!/bin/sh
|
||||
set -e
|
||||
token=$(cat /var/lib/cfssl/apitoken.secret)
|
||||
for i in ${wrk}; do
|
||||
ssh root@$i "echo $token | sh nixos-kubernetes-node-join"
|
||||
done
|
||||
'';
|
||||
#nixos-kubernetes-join-nodes = workers:
|
||||
# let
|
||||
# wrk = builtins.foldl' (a: s: a + " " + s) "" workers;
|
||||
# in
|
||||
# pkgs.writeScriptBin "nixos-kubernetes-join-nodes" ''
|
||||
# #!/bin/sh
|
||||
# set -e
|
||||
# token=$(cat /var/lib/cfssl/apitoken.secret)
|
||||
# for i in ${wrk}; do
|
||||
# ssh root@$i "echo $token | sh nixos-kubernetes-node-join"
|
||||
# done
|
||||
# '';
|
||||
|
||||
kube-system-bootstrap = pkgs.stdenv.mkDerivation {
|
||||
name = "kube-system-bootstrap";
|
||||
@@ -45,18 +45,20 @@ let
|
||||
'';
|
||||
};
|
||||
|
||||
install-apitoken = pkgs.writeScript "kube-install-certmgr-apitoken" ''
|
||||
#!${pkgs.bash}/bin/bash
|
||||
set -e
|
||||
if [ -d /var/lib/cfssl ]; then
|
||||
cp ${cfssl-apitoken} /var/lib/cfssl/apitoken.secret
|
||||
chown cfssl /var/lib/cfssl/apitoken.secret
|
||||
chmod 600 /var/lib/cfssl/apitoken.secret
|
||||
fi
|
||||
cp ${cfssl-apitoken} /var/lib/kubernetes/secrets/apitoken.secret
|
||||
chown root /var/lib/kubernetes/secrets/apitoken.secret
|
||||
chmod 600 /var/lib/kubernetes/secrets/apitoken.secret
|
||||
'';
|
||||
install-apitoken = ''
|
||||
#!${pkgs.bash}/bin/bash
|
||||
set -e
|
||||
if [ -d /var/lib/cfssl ]; then
|
||||
cp ${cfssl-apitoken} /var/lib/cfssl/apitoken.secret
|
||||
chown cfssl /var/lib/cfssl/apitoken.secret
|
||||
chmod 640 /var/lib/cfssl/apitoken.secret
|
||||
else
|
||||
mkdir -p /var/lib/kubernetes/secrets
|
||||
cp ${cfssl-apitoken} /var/lib/kubernetes/secrets/apitoken.secret
|
||||
chown root /var/lib/kubernetes/secrets/apitoken.secret
|
||||
chmod 600 /var/lib/kubernetes/secrets/apitoken.secret
|
||||
fi
|
||||
'';
|
||||
|
||||
cidr = "10.10.0.0/16";
|
||||
in
|
||||
@@ -94,9 +96,19 @@ rec {
|
||||
};
|
||||
environment.systemPackages = [
|
||||
pkgs.kubernetes-helm
|
||||
(nixos-kubernetes-join-nodes settings.workers)
|
||||
# (nixos-kubernetes-join-nodes settings.workers)
|
||||
kube-system-bootstrap
|
||||
];
|
||||
systemd.services.kube-certmgr-apitoken-bootstrap = {
|
||||
description = "Kubernetes certmgr bootstrapper";
|
||||
wantedBy = [ "cfssl.service" ];
|
||||
before = [ "cfssl.target" ];
|
||||
script = install-apitoken;
|
||||
serviceConfig = {
|
||||
RestartSec = "10s";
|
||||
Restart = "on-failure";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
kubeWorker = {
|
||||
@@ -116,9 +128,22 @@ rec {
|
||||
};
|
||||
virtualisation.docker.extraOptions = "--insecure-registry 10.0.0.0/8";
|
||||
virtualisation.docker.autoPrune.enable = true;
|
||||
systemd.services.kube-certmgr-apitoken-bootstrap = {
|
||||
description = "Kubernetes certmgr bootstrapper";
|
||||
wantedBy = [ "certmgr.service" ];
|
||||
before = [ "certmgr.target" ];
|
||||
script = install-apitoken;
|
||||
serviceConfig = {
|
||||
RestartSec = "10s";
|
||||
Restart = "on-failure";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
baseNixos = name: {
|
||||
users.extraUsers.admin.openssh.authorizedKeys.keys =
|
||||
settings.adminAuthorizedKeys;
|
||||
|
||||
imports = [
|
||||
../nixos/configuration.nix
|
||||
(here + "/${name}.nix")
|
||||
@@ -145,19 +170,6 @@ rec {
|
||||
firewall.allowedTCPPorts = [ 80 443 111 ];
|
||||
firewall.allowedUDPPorts = [ 111 24007 24008 ];
|
||||
};
|
||||
users.extraUsers.admin.openssh.authorizedKeys.keys =
|
||||
settings.adminAuthorizedKeys;
|
||||
|
||||
systemd.services.kube-certmgr-apitoken-bootstrap = {
|
||||
description = "Kubernetes certmgr bootstrapper";
|
||||
wantedBy = [ "cfssl.service" ];
|
||||
before = [ "cfssl.target" ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
ExecStart = "${install-apitoken}";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
apiserver = ip: name: self:
|
||||
|
||||
Reference in New Issue
Block a user