Add service account.

This commit is contained in:
Tom Alexander 2025-12-14 13:37:46 -05:00 committed by Tom Alexander
parent 342a5e338c
commit 626055e063
Signed by: talexander
GPG Key ID: 36C99E8B3C39D85F
7 changed files with 83 additions and 3 deletions

View File

@ -8,5 +8,6 @@ symlinkJoin {
paths = [ paths = [
k8s.kubernetes k8s.kubernetes
k8s.ca k8s.ca
k8s.service_account
]; ];
} }

View File

@ -16,7 +16,7 @@
... ...
}: }:
stdenv.mkDerivation (finalAttrs: { stdenv.mkDerivation (finalAttrs: {
name = "k8s-keys"; name = "k8s-kubernetes";
nativeBuildInputs = [ cfssl ]; nativeBuildInputs = [ cfssl ];
buildInputs = [ ]; buildInputs = [ ];

View File

@ -0,0 +1,13 @@
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"kubernetes": {
"usages": ["signing", "key encipherment", "server auth", "client auth"],
"expiry": "8760h"
}
}
}
}

View File

@ -0,0 +1,16 @@
{
"CN": "service-accounts",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"L": "Portland",
"O": "Kubernetes",
"OU": "Kubernetes The Hard Way",
"ST": "Oregon"
}
]
}

View File

@ -0,0 +1,35 @@
# unpackPhase
# patchPhase
# configurePhase
# buildPhase
# checkPhase
# installPhase
# fixupPhase
# installCheckPhase
# distPhase
{
stdenv,
sqlite,
cfssl,
k8s,
all_hostnames,
...
}:
stdenv.mkDerivation (finalAttrs: {
name = "k8s-service-account";
nativeBuildInputs = [ cfssl ];
buildInputs = [ ];
unpackPhase = "true";
installPhase = ''
mkdir -p "$out"
cd "$out"
cfssl gencert \
-ca=${k8s.ca}/ca.pem \
-ca-key=${k8s.ca}/ca-key.pem \
-config=${./files/ca-config.json} \
-profile=kubernetes \
${./files/service-account-csr.json} | cfssljson -bare service-account
'';
})

View File

@ -137,6 +137,20 @@ makeScope newScope (
group = 10024; group = 10024;
mode = "0600"; mode = "0600";
} }
{
dest_dir = "/vm/${vm_name}/persist/keys/kube";
file = "${self.service_account}/service-account.pem";
owner = 10024;
group = 10024;
mode = "0600";
}
{
dest_dir = "/vm/${vm_name}/persist/keys/kube";
file = "${self.service_account}/service-account-key.pem";
owner = 10024;
group = 10024;
mode = "0600";
}
]) ])
) )
); );
@ -181,6 +195,7 @@ makeScope newScope (
{ {
ca = (callPackage ./package/k8s-ca/package.nix additional_vars); ca = (callPackage ./package/k8s-ca/package.nix additional_vars);
kubernetes = (callPackage ./package/k8s-kubernetes/package.nix additional_vars); kubernetes = (callPackage ./package/k8s-kubernetes/package.nix additional_vars);
service_account = (callPackage ./package/k8s-service-account/package.nix additional_vars);
keys = (callPackage ./package/k8s-keys/package.nix additional_vars); keys = (callPackage ./package/k8s-keys/package.nix additional_vars);
deploy_script = (writeShellScript "deploy-keys" deploy_script); deploy_script = (writeShellScript "deploy-keys" deploy_script);
} }

View File

@ -77,8 +77,8 @@ in
"--kubelet-client-certificate=/.persist/keys/kube/kubernetes.pem" "--kubelet-client-certificate=/.persist/keys/kube/kubernetes.pem"
"--kubelet-client-key=/.persist/keys/kube/kubernetes-key.pem" "--kubelet-client-key=/.persist/keys/kube/kubernetes-key.pem"
"--runtime-config='api/all=true'" "--runtime-config='api/all=true'"
"--service-account-key-file=/var/lib/kubernetes/service-account.pem" "--service-account-key-file=/.persist/keys/kube/service-account.pem"
"--service-account-signing-key-file=/var/lib/kubernetes/service-account-key.pem" "--service-account-signing-key-file=/.persist/keys/kube/service-account-key.pem"
"--service-account-issuer=https://{{ kubernetes_public_address }}:6443" "--service-account-issuer=https://{{ kubernetes_public_address }}:6443"
"--service-node-port-range=30000-32767" "--service-node-port-range=30000-32767"
"--tls-cert-file=/.persist/keys/kube/kubernetes.pem" "--tls-cert-file=/.persist/keys/kube/kubernetes.pem"