CentOS环境下Kubernetes容器安全加固指南
systemctl disable <service-name>),减少攻击面。firewalld或iptables限制仅开放Kubernetes必要端口(如API Server的6443、kubelet的10250/10255),默认拒绝所有其他流量。setenforce 0,永久修改/etc/selinux/config中SELINUX=disabled(避免权限冲突)。swapoff -a并注释/etc/fstab中的Swap条目(提升容器隔离性)。chrony并配置NTP服务器(如server ntp.aliyun.com iburst),运行chronyc sources验证同步状态(确保日志、证书有效期等时间一致性)。/etc/login.defs设置PASS_MIN_LEN 12、PASS_REQUIRE_MIXED_CASE yes);锁定默认多余账户(如usermod -L adm、usermod -L lp);限制su命令(编辑/etc/pam.d/su添加auth required pam_wheel.so use_uid,仅允许wheel组用户切换root)。openssl),将证书放入/etc/kubernetes/pki,修改/etc/kubernetes/manifests/kube-apiserver.yaml添加--tls-cert-file、--tls-private-key-file、--client-ca-file参数,重启kubelet使配置生效(确保组件间通信全程加密)。kubectl create namespace dev-ns)、服务账户(kubectl create serviceaccount dev-sa -n dev-ns);定义角色(如限制仅能读取Pod的pod-reader角色:kubectl create role pod-reader --verb=get,list,watch --resource=pods -n dev-ns);通过角色绑定(kubectl create rolebinding dev-rb --role=pod-reader --serviceaccount=dev-ns:dev-sa -n dev-ns)将权限分配给用户/组,避免使用cluster-admin角色给开发人员。kube-bench强制API访问需MFA验证(提升身份认证安全性)。deny-all默认策略(拒绝所有Pod间及出入站流量);仅允许必要通信(如允许带app: frontend标签的Pod访问带app: backend标签的Pod的3306端口),示例:apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: frontend-database-policy
namespace: dev-ns
spec:
podSelector:
matchLabels:
app: database
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 3306
firewalld/iptables限制对API Server端口(默认6443)的访问(仅允许可信IP段);使用污点(taints)和容忍度(tolerations)控制工作负载调度(如将监控节点标记为NoSchedule,仅允许监控组件调度)。runAsNonRoot: true)、设置明确用户ID(runAsUser: 1000)、组ID(runAsGroup: 3000);启用只读根文件系统(readOnlyRootFilesystem: true);禁止权限提升(allowPrivilegeEscalation: false);限制系统调用(seccompProfile: RuntimeDefault),示例:apiVersion: v1
kind: Pod
metadata:
name: secure-pod
namespace: dev-ns
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
containers:
- name: nginx
image: nginx:1.25
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
seccompProfile: RuntimeDefault
Baseline(基线)或Restricted(严格)策略(替代已废弃的PSP),通过PodSecurity admission controller启用(如kubectl label ns dev-ns pod-security.kubernetes.io/enforce=restricted),限制容器特权模式、Linux capabilities、挂载卷类型(禁止hostPath)及宿主机命名空间共享(hostPID: false)。ImagePolicyWebhook验证签名(确保镜像完整性和来源可信)。audit-policy.yaml),记录所有API请求(包括用户身份、操作时间、资源类型),使用ELK、Loki等工具分析日志(关联用户行为与异常操作)。/etc/shadow、挂载宿主机敏感路径),配置告警规则(如Sensitive file accessed by container),及时响应安全事件。/etc/kubernetes/manifests/etcd.yaml,添加--encryption-provider-config参数指向加密配置文件),保护Secret数据的存储安全(如数据库密码、API密钥)。