Kubernetes安全加固
为保证环境安全运行,建议用户根据业务控制集群master节点登录权限,对环境中kubernetes的私钥文件及etcd中存储的认证凭据做好访问权限控制;不建议用户在后台直接操作kubernetes集群。
Kubernetes需要进行如下加固:
- kube-proxy加强:
- 在“kube-proxy”启动参数中加入“--nodeport-addresses”参数。
- 针对已经安装的K8s系统,通过如下命令修改kube-proxy的configmap。
kubectl edit cm kube-proxy -n kube-system
- 手动修改configmap中的“nodePortAddresses”参数为CIDR格式的节点IP。
- 手动修改configmap中的“healthzBindAddress”参数为CIDR格式的节点IP。
- 配置再重启kube-proxy后生效。
- kube-apiserver加强:
- 添加启动参数“--kubelet-certificate-authority”参数,配置kubelet CA证书路径,用于验证kubelet服务端证书有效性。
- 修改启动参数“--profiling”的值设置为“false”,防止用户动态修改kube-apiserver日志级别。
- 修改或增加启动参数“--tls-cipher-suites”,设置它的值如下,避免使用不安全的TLS加密套件带来风险:
--tls-cipher-suites=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_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- 修改或增加启动参数“--tls-min-version”,取值示例如--tls-min-version=VersionTLS13,用于配置apiserver时使用TLS1.3安全协议对通信进行加密。
- 修改或增加启动参数“--audit-policy-file”,配置K8s的审计策略,具体配置可参考Kubernetes官方文档。
- kube-controller加强:
- 在启动参数“--controllers”内添加子项“-serviceaccount-token”,用于禁用命名空间默认服务账号,防止在安装运行MindEdge Framework时,在mef-user和mef-center命名空间产生不需要使用的服务账号。
- kubelet加强:
- 为防止单Pod占用过多进程数,可以开启SupportPodPidsLimit,并设置--pod-max-pids。在kubelet配置文件的KUBELET_KUBEADM_ARGS项增加--feature-gates=SupportPodPidsLimit=true --pod-max-pids=<max pid number>。配置修改后,重启生效。具体可参考Kubernetes官方文档。
- 配置启动参数--address或者修改启动配置文件中的address字段,设置值为主机IP。
- 配置启动参数“--tls-min-version”或者修改启动配置文件中的“tlsMinVersion”字段,启动配置文件字段取值示例如 tlsMinVersion: VersionTLS13,用于配置kubelet时使用TLS1.3安全协议对通信进行加密。
- 修改或增加启动参数“--tls-cipher-suites”,设置它的值如下,避免使用不安全的TLS加密套件带来风险:
--tls-cipher-suites=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_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
K8s v1.19及以上版本支持TLS v1.3的加密套件,建议使用高版本的K8s时,加上TLS v1.3的加密套件。
- 若K8s集群使用的OS kernel内核版本大于等于4.6,安装完K8s后手动开启AppArmor或者SELinux。
- 为使推理服务pod的带宽限制生效,需要安装bandwidth插件到CNI bin目录中(默认为/opt/cni/bin),并修改CNI配置文件(默认在/etc/cni/net.d下),在plugins中加入bandwidth。
... { "type": "bandwidth", "capabilities": {"bandwidth": true} } ...
- 其余安全加固内容可参考Kubernetes官方文档Security相关内容,也可以参考业界其他优秀加固方案。
父主题: 安全加固