k3s のドキュメントには CSI Hardening Guide というページがあり、これを見ながら k3s の設定を行うとセキュリティを高めることができます。NixOS で k3s を立ち上げている場合 services.k3s などの設定を調整することでこのガイドに従うことができます。なお以下の設定ではガイドの一部にしか従っていません。特に audit に関する部分は(自分の運用だと不要なので)技術的には可能だと思いますが書いていません。
{
services.k3s = {
enable = true;
extraKubeletConfig = {
streamingConnectionIdleTimeout = "5m";
tlsCipherSuites = [
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305"
"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305"
];
};
extraFlags = [
"--protect-kernel-defaults"
"--secrets-encryption"
"--kube-apiserver-arg admission-control-config-file=${pkgs.writeText "psa.yaml" (builtins.readFile ./path/to/psa.yaml)}"
"--kube-controller-manager-arg terminated-pod-gc-threshold=10"
];
manifests = {
default-network-policies = {
enable = true;
target = "default-network-policies.yaml";
source = ./path/to/default-network-policies.yaml;
};
};
};
boot.kernel.sysctl = {
"vm.panic_on_oom" = 0;
"vm.overcommit_memory" = 1;
"kernel.panic" = 10;
"kernel.panic_on_oops" = 1;
};
}
psa.yaml・default-network-policies.yaml にはガイドにある YAML のマニフェストが書かれています。