Move the encryption config into a package.
This commit is contained in:
parent
5d660cced8
commit
f8b8005ab2
@ -8,14 +8,150 @@
|
|||||||
# installCheckPhase
|
# installCheckPhase
|
||||||
# distPhase
|
# distPhase
|
||||||
{
|
{
|
||||||
|
lib,
|
||||||
stdenv,
|
stdenv,
|
||||||
writeShellScript,
|
writeShellScript,
|
||||||
k8s,
|
k8s,
|
||||||
|
openssh,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
deploy_script_body = "";
|
deploy_script_body = (
|
||||||
|
''
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
DIR="$( cd "$( dirname "''${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
''
|
||||||
|
+ (lib.concatMapStringsSep "\n" deploy_machine [
|
||||||
|
"nc0"
|
||||||
|
"nc1"
|
||||||
|
"nc2"
|
||||||
|
])
|
||||||
|
);
|
||||||
deploy_script = (writeShellScript "deploy-script" deploy_script_body);
|
deploy_script = (writeShellScript "deploy-script" deploy_script_body);
|
||||||
|
deploy_file = (
|
||||||
|
{
|
||||||
|
dest_dir,
|
||||||
|
file,
|
||||||
|
name ? (builtins.baseNameOf file),
|
||||||
|
owner,
|
||||||
|
group,
|
||||||
|
mode,
|
||||||
|
}:
|
||||||
|
''
|
||||||
|
##
|
||||||
|
## deploy ${name} to ${dest_dir}
|
||||||
|
##
|
||||||
|
${openssh}/bin/ssh mrmanager doas rm -f ${dest_dir}/${name} ~/${name}
|
||||||
|
${openssh}/bin/scp ${file} mrmanager:~/${name}
|
||||||
|
${openssh}/bin/ssh mrmanager doas install -o ${toString owner} -g ${toString group} -m ${mode} ~/${name} ${dest_dir}/${name}
|
||||||
|
${openssh}/bin/ssh mrmanager doas rm -f ~/${name}
|
||||||
|
|
||||||
|
|
||||||
|
''
|
||||||
|
);
|
||||||
|
deploy_machine = (
|
||||||
|
vm_name:
|
||||||
|
(
|
||||||
|
''
|
||||||
|
##
|
||||||
|
## Create directories on ${vm_name}
|
||||||
|
##
|
||||||
|
${openssh}/bin/ssh mrmanager doas install -d -o 11235 -g 11235 -m 0755 /vm/${vm_name}/persist/keys
|
||||||
|
${openssh}/bin/ssh mrmanager doas install -d -o 10016 -g 10016 -m 0755 /vm/${vm_name}/persist/keys/etcd
|
||||||
|
${openssh}/bin/ssh mrmanager doas install -d -o 10024 -g 10024 -m 0755 /vm/${vm_name}/persist/keys/kube
|
||||||
|
|
||||||
|
|
||||||
|
''
|
||||||
|
+ (lib.concatMapStringsSep "\n" deploy_file [
|
||||||
|
{
|
||||||
|
dest_dir = "/vm/${vm_name}/persist/keys/etcd";
|
||||||
|
file = "${k8s.keys.kube-api-server}/kube-api-server.crt";
|
||||||
|
owner = 10016;
|
||||||
|
group = 10016;
|
||||||
|
mode = "0640";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
dest_dir = "/vm/${vm_name}/persist/keys/etcd";
|
||||||
|
file = "${k8s.keys.kube-api-server}/kube-api-server.key";
|
||||||
|
owner = 10016;
|
||||||
|
group = 10016;
|
||||||
|
mode = "0600";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
dest_dir = "/vm/${vm_name}/persist/keys/etcd";
|
||||||
|
file = "${k8s.ca}/ca.crt";
|
||||||
|
owner = 10016;
|
||||||
|
group = 10016;
|
||||||
|
mode = "0640";
|
||||||
|
}
|
||||||
|
# {
|
||||||
|
# dest_dir = "/vm/${vm_name}/persist/keys/kube";
|
||||||
|
# file = "${self.kubernetes}/kubernetes.pem";
|
||||||
|
# owner = 10024;
|
||||||
|
# group = 10024;
|
||||||
|
# mode = "0640";
|
||||||
|
# }
|
||||||
|
# {
|
||||||
|
# dest_dir = "/vm/${vm_name}/persist/keys/kube";
|
||||||
|
# file = "${self.kubernetes}/kubernetes-key.pem";
|
||||||
|
# owner = 10024;
|
||||||
|
# group = 10024;
|
||||||
|
# mode = "0640";
|
||||||
|
# }
|
||||||
|
# {
|
||||||
|
# dest_dir = "/vm/${vm_name}/persist/keys/kube";
|
||||||
|
# file = "${self.ca}/ca.pem";
|
||||||
|
# owner = 10024;
|
||||||
|
# group = 10024;
|
||||||
|
# mode = "0600";
|
||||||
|
# }
|
||||||
|
# {
|
||||||
|
# dest_dir = "/vm/${vm_name}/persist/keys/kube";
|
||||||
|
# file = (writeText "encryption-config.yaml" (lib.generators.toYAML { } kube_encryption_config));
|
||||||
|
# name = "encryption-config.yaml";
|
||||||
|
# owner = 10024;
|
||||||
|
# group = 10024;
|
||||||
|
# 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";
|
||||||
|
# }
|
||||||
|
# {
|
||||||
|
# dest_dir = "/vm/${vm_name}/persist/keys/kube";
|
||||||
|
# file = "${self.requestheader-client-ca}/requestheader-client-ca.pem";
|
||||||
|
# owner = 10024;
|
||||||
|
# group = 10024;
|
||||||
|
# mode = "0600";
|
||||||
|
# }
|
||||||
|
# {
|
||||||
|
# dest_dir = "/vm/${vm_name}/persist/keys/kube";
|
||||||
|
# file = "${self.controller-proxy}/${vm_name_to_hostname vm_name}-proxy.pem";
|
||||||
|
# owner = 10024;
|
||||||
|
# group = 10024;
|
||||||
|
# mode = "0600";
|
||||||
|
# }
|
||||||
|
# {
|
||||||
|
# dest_dir = "/vm/${vm_name}/persist/keys/kube";
|
||||||
|
# file = "${self.controller-proxy}/${vm_name_to_hostname vm_name}-proxy-key.pem";
|
||||||
|
# owner = 10024;
|
||||||
|
# group = 10024;
|
||||||
|
# mode = "0600";
|
||||||
|
# }
|
||||||
|
])
|
||||||
|
)
|
||||||
|
);
|
||||||
in
|
in
|
||||||
stdenv.mkDerivation (finalAttrs: {
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
name = "deploy-script";
|
name = "deploy-script";
|
||||||
|
|||||||
@ -266,7 +266,19 @@ subjectKeyIdentifier = hash
|
|||||||
|
|
||||||
[kube-api-server_alt_names]
|
[kube-api-server_alt_names]
|
||||||
IP.0 = 127.0.0.1
|
IP.0 = 127.0.0.1
|
||||||
IP.1 = 10.32.0.1
|
IP.1 = 10.0.0.1
|
||||||
|
IP.2 = 10.215.1.221
|
||||||
|
IP.3 = 2620:11f:7001:7:ffff:ffff:0ad7:01dd
|
||||||
|
IP.4 = 10.215.1.222
|
||||||
|
IP.5 = 2620:11f:7001:7:ffff:ffff:0ad7:01de
|
||||||
|
IP.6 = 10.215.1.223
|
||||||
|
IP.7 = 2620:11f:7001:7:ffff:ffff:0ad7:01df
|
||||||
|
IP.8 = 10.215.1.224
|
||||||
|
IP.9 = 2620:11f:7001:7:ffff:ffff:0ad7:01e0
|
||||||
|
IP.10 = 10.215.1.225
|
||||||
|
IP.11 = 2620:11f:7001:7:ffff:ffff:0ad7:01e1
|
||||||
|
IP.12 = 10.215.1.226
|
||||||
|
IP.13 = 2620:11f:7001:7:ffff:ffff:0ad7:01e2
|
||||||
DNS.0 = kubernetes
|
DNS.0 = kubernetes
|
||||||
DNS.1 = kubernetes.default
|
DNS.1 = kubernetes.default
|
||||||
DNS.2 = kubernetes.default.svc
|
DNS.2 = kubernetes.default.svc
|
||||||
|
|||||||
58
nix/kubernetes/keys/package/k8s-encryption-key/package.nix
Normal file
58
nix/kubernetes/keys/package/k8s-encryption-key/package.nix
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
# unpackPhase
|
||||||
|
# patchPhase
|
||||||
|
# configurePhase
|
||||||
|
# buildPhase
|
||||||
|
# checkPhase
|
||||||
|
# installPhase
|
||||||
|
# fixupPhase
|
||||||
|
# installCheckPhase
|
||||||
|
# distPhase
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
runCommand,
|
||||||
|
writeText,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
kube_encryption_key = runCommand "kube_encryption_key" { } ''
|
||||||
|
head -c 32 /dev/urandom | base64 | tee $out
|
||||||
|
'';
|
||||||
|
kube_encryption_config = {
|
||||||
|
kind = "EncryptionConfig";
|
||||||
|
apiVersion = "v1";
|
||||||
|
resources = [
|
||||||
|
{
|
||||||
|
resources = [ "secrets" ];
|
||||||
|
providers = [
|
||||||
|
{
|
||||||
|
aescbc = {
|
||||||
|
keys = [
|
||||||
|
{
|
||||||
|
name = "key1";
|
||||||
|
secret = (builtins.readFile "${kube_encryption_key}");
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{ identity = { }; }
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
kube_encryption_config_yaml = (
|
||||||
|
writeText "encryption-config.yaml" (lib.generators.toYAML { } kube_encryption_config)
|
||||||
|
);
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
|
name = "k8s-encryption-key";
|
||||||
|
nativeBuildInputs = [ ];
|
||||||
|
buildInputs = [ ];
|
||||||
|
|
||||||
|
unpackPhase = "true";
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir "$out"
|
||||||
|
cp "${kube_encryption_config_yaml}" $out/encryption-config.yaml
|
||||||
|
'';
|
||||||
|
})
|
||||||
@ -7,6 +7,7 @@ symlinkJoin {
|
|||||||
name = "k8s-keys";
|
name = "k8s-keys";
|
||||||
paths = [
|
paths = [
|
||||||
k8s.ca
|
k8s.ca
|
||||||
|
k8s.encryption_config
|
||||||
]
|
]
|
||||||
++ (builtins.attrValues k8s.keys)
|
++ (builtins.attrValues k8s.keys)
|
||||||
++ (builtins.attrValues k8s.client-configs);
|
++ (builtins.attrValues k8s.client-configs);
|
||||||
|
|||||||
@ -2,10 +2,6 @@
|
|||||||
makeScope,
|
makeScope,
|
||||||
newScope,
|
newScope,
|
||||||
callPackage,
|
callPackage,
|
||||||
writeShellScript,
|
|
||||||
openssh,
|
|
||||||
runCommand,
|
|
||||||
writeText,
|
|
||||||
lib,
|
lib,
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
@ -73,12 +69,12 @@ let
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
_vm_name_to_hostname = {
|
# _vm_name_to_hostname = {
|
||||||
"nc0" = "controller0";
|
# "nc0" = "controller0";
|
||||||
"nc1" = "controller1";
|
# "nc1" = "controller1";
|
||||||
"nc2" = "controller2";
|
# "nc2" = "controller2";
|
||||||
};
|
# };
|
||||||
vm_name_to_hostname = (vm_name: _vm_name_to_hostname."${vm_name}");
|
# vm_name_to_hostname = (vm_name: _vm_name_to_hostname."${vm_name}");
|
||||||
in
|
in
|
||||||
makeScope newScope (
|
makeScope newScope (
|
||||||
self:
|
self:
|
||||||
@ -87,166 +83,6 @@ makeScope newScope (
|
|||||||
inherit all_hostnames controllers;
|
inherit all_hostnames controllers;
|
||||||
k8s = self;
|
k8s = self;
|
||||||
};
|
};
|
||||||
deploy_file = (
|
|
||||||
{
|
|
||||||
dest_dir,
|
|
||||||
file,
|
|
||||||
name ? (builtins.baseNameOf file),
|
|
||||||
owner,
|
|
||||||
group,
|
|
||||||
mode,
|
|
||||||
}:
|
|
||||||
''
|
|
||||||
##
|
|
||||||
## deploy ${name} to ${dest_dir}
|
|
||||||
##
|
|
||||||
${openssh}/bin/ssh mrmanager doas rm -f ${dest_dir}/${name} ~/${name}
|
|
||||||
${openssh}/bin/scp ${file} mrmanager:~/${name}
|
|
||||||
${openssh}/bin/ssh mrmanager doas install -o ${toString owner} -g ${toString group} -m ${mode} ~/${name} ${dest_dir}/${name}
|
|
||||||
${openssh}/bin/ssh mrmanager doas rm -f ~/${name}
|
|
||||||
|
|
||||||
|
|
||||||
''
|
|
||||||
);
|
|
||||||
deploy_machine = (
|
|
||||||
vm_name:
|
|
||||||
(
|
|
||||||
''
|
|
||||||
##
|
|
||||||
## Create directories on ${vm_name}
|
|
||||||
##
|
|
||||||
${openssh}/bin/ssh mrmanager doas install -d -o 11235 -g 11235 -m 0755 /vm/${vm_name}/persist/keys
|
|
||||||
${openssh}/bin/ssh mrmanager doas install -d -o 10016 -g 10016 -m 0755 /vm/${vm_name}/persist/keys/etcd
|
|
||||||
${openssh}/bin/ssh mrmanager doas install -d -o 10024 -g 10024 -m 0755 /vm/${vm_name}/persist/keys/kube
|
|
||||||
|
|
||||||
|
|
||||||
''
|
|
||||||
+ (lib.concatMapStringsSep "\n" deploy_file [
|
|
||||||
{
|
|
||||||
dest_dir = "/vm/${vm_name}/persist/keys/etcd";
|
|
||||||
file = "${self.kubernetes}/kubernetes.pem";
|
|
||||||
owner = 10016;
|
|
||||||
group = 10016;
|
|
||||||
mode = "0640";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
dest_dir = "/vm/${vm_name}/persist/keys/etcd";
|
|
||||||
file = "${self.kubernetes}/kubernetes-key.pem";
|
|
||||||
owner = 10016;
|
|
||||||
group = 10016;
|
|
||||||
mode = "0600";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
dest_dir = "/vm/${vm_name}/persist/keys/etcd";
|
|
||||||
file = "${self.ca}/ca.pem";
|
|
||||||
owner = 10016;
|
|
||||||
group = 10016;
|
|
||||||
mode = "0640";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
dest_dir = "/vm/${vm_name}/persist/keys/kube";
|
|
||||||
file = "${self.kubernetes}/kubernetes.pem";
|
|
||||||
owner = 10024;
|
|
||||||
group = 10024;
|
|
||||||
mode = "0640";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
dest_dir = "/vm/${vm_name}/persist/keys/kube";
|
|
||||||
file = "${self.kubernetes}/kubernetes-key.pem";
|
|
||||||
owner = 10024;
|
|
||||||
group = 10024;
|
|
||||||
mode = "0640";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
dest_dir = "/vm/${vm_name}/persist/keys/kube";
|
|
||||||
file = "${self.ca}/ca.pem";
|
|
||||||
owner = 10024;
|
|
||||||
group = 10024;
|
|
||||||
mode = "0600";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
dest_dir = "/vm/${vm_name}/persist/keys/kube";
|
|
||||||
file = (writeText "encryption-config.yaml" (lib.generators.toYAML { } kube_encryption_config));
|
|
||||||
name = "encryption-config.yaml";
|
|
||||||
owner = 10024;
|
|
||||||
group = 10024;
|
|
||||||
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";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
dest_dir = "/vm/${vm_name}/persist/keys/kube";
|
|
||||||
file = "${self.requestheader-client-ca}/requestheader-client-ca.pem";
|
|
||||||
owner = 10024;
|
|
||||||
group = 10024;
|
|
||||||
mode = "0600";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
dest_dir = "/vm/${vm_name}/persist/keys/kube";
|
|
||||||
file = "${self.controller-proxy}/${vm_name_to_hostname vm_name}-proxy.pem";
|
|
||||||
owner = 10024;
|
|
||||||
group = 10024;
|
|
||||||
mode = "0600";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
dest_dir = "/vm/${vm_name}/persist/keys/kube";
|
|
||||||
file = "${self.controller-proxy}/${vm_name_to_hostname vm_name}-proxy-key.pem";
|
|
||||||
owner = 10024;
|
|
||||||
group = 10024;
|
|
||||||
mode = "0600";
|
|
||||||
}
|
|
||||||
])
|
|
||||||
)
|
|
||||||
);
|
|
||||||
deploy_script = (
|
|
||||||
''
|
|
||||||
set -euo pipefail
|
|
||||||
IFS=$'\n\t'
|
|
||||||
DIR="$( cd "$( dirname "''${BASH_SOURCE[0]}" )" && pwd )"
|
|
||||||
''
|
|
||||||
+ (lib.concatMapStringsSep "\n" deploy_machine [
|
|
||||||
"nc0"
|
|
||||||
"nc1"
|
|
||||||
"nc2"
|
|
||||||
])
|
|
||||||
);
|
|
||||||
kube_encryption_key = runCommand "kube_encryption_key" { } ''
|
|
||||||
head -c 32 /dev/urandom | base64 | tee $out
|
|
||||||
'';
|
|
||||||
kube_encryption_config = {
|
|
||||||
kind = "EncryptionConfig";
|
|
||||||
apiVersion = "v1";
|
|
||||||
resources = [
|
|
||||||
{
|
|
||||||
resources = [ "secrets" ];
|
|
||||||
providers = [
|
|
||||||
{
|
|
||||||
aescbc = {
|
|
||||||
keys = [
|
|
||||||
{
|
|
||||||
name = "key1";
|
|
||||||
secret = (builtins.readFile "${kube_encryption_key}");
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{ identity = { }; }
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
ca = (callPackage ./package/k8s-ca/package.nix additional_vars);
|
ca = (callPackage ./package/k8s-ca/package.nix additional_vars);
|
||||||
@ -317,6 +153,7 @@ makeScope newScope (
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
encryption_config = (callPackage ./package/k8s-encryption-key/package.nix additional_vars);
|
||||||
all_keys = (callPackage ./package/k8s-keys/package.nix additional_vars);
|
all_keys = (callPackage ./package/k8s-keys/package.nix additional_vars);
|
||||||
deploy_script = (callPackage ./package/deploy-script/package.nix additional_vars);
|
deploy_script = (callPackage ./package/deploy-script/package.nix additional_vars);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,12 +55,12 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
openFirewall = true;
|
openFirewall = true;
|
||||||
name = config.networking.hostName;
|
name = config.networking.hostName;
|
||||||
certFile = "/.persist/keys/etcd/kubernetes.pem";
|
certFile = "/.persist/keys/etcd/kube-api-server.crt";
|
||||||
keyFile = "/.persist/keys/etcd/kubernetes-key.pem";
|
keyFile = "/.persist/keys/etcd/kube-api-server.key";
|
||||||
peerCertFile = "/.persist/keys/etcd/kubernetes.pem";
|
peerCertFile = "/.persist/keys/etcd/kube-api-server.crt";
|
||||||
peerKeyFile = "/.persist/keys/etcd/kubernetes-key.pem";
|
peerKeyFile = "/.persist/keys/etcd/kube-api-server.key";
|
||||||
trustedCaFile = "/.persist/keys/etcd/ca.pem";
|
trustedCaFile = "/.persist/keys/etcd/ca.crt";
|
||||||
peerTrustedCaFile = "/.persist/keys/etcd/ca.pem";
|
peerTrustedCaFile = "/.persist/keys/etcd/ca.crt";
|
||||||
peerClientCertAuth = true;
|
peerClientCertAuth = true;
|
||||||
clientCertAuth = true;
|
clientCertAuth = true;
|
||||||
initialAdvertisePeerUrls = (
|
initialAdvertisePeerUrls = (
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user