本文目录导读:

Kubernetes 的安全配置是一个多层次、多维度的体系,涵盖了从集群基础设施到应用部署的各个方面,为了确保集群安全,通常需要关注以下几个核心层面:
身份与访问管理
这是Kubernetes安全的第一道防线,决定了“谁能做什么”。
- 基于角色的访问控制: 应始终启用RBAC,避免使用默认的
cluster-admin账户,而是遵循最小权限原则,为不同用户和ServiceAccount创建只具备所需操作权限的Role或ClusterRole,只允许CI/CD系统部署应用,而不允许其删除命名空间。 - 服务账户: 每个Pod都应绑定一个专用的ServiceAccount,而非使用
defaultServiceAccount,为不同的微服务分配不同的ServiceAccount,以便于审计和权限隔离。 - 用户认证: 使用强认证机制(如OIDC、Webhook Token、X.509证书),避免使用HTTP基本认证或静态令牌文件。
网络层面的安全
控制流量走向,防止未授权访问和数据泄露。
- 网络策略: 默认情况下,Pod之间可以互相通信,必须使用NetworkPolicy来定义Pod(以及命名空间)之间如何通信,只允许前端Pod访问后端Pod的特定端口,拒绝其他所有流量。
- Ingress/TLS: 所有对外暴露的服务应通过Ingress或Gateway API提供,并强制使用TLS/HTTPS加密,使用mTLS在集群内服务之间建立双向加密通信(如通过Istio、Linkerd等服务网格)。
- 加密传输: 确保etcd中的数据通过TLS加密传输,并且只有API Server能够访问etcd,集群内部节点间的通信(如kubelet与API Server)也需使用TLS。
Pod与容器级别的安全
直接保护运行在集群中的工作负载。
- 安全上下文: 在每个Pod或容器定义中设置
securityContext`,关键配置包括:runAsNonRoot: true:禁止容器以root用户运行。runAsUser: <高UID>:指定一个非root的用户ID(如1000)。capabilities: drop: [ALL]:丢弃所有Linux内核能力,再按需添加(如NET_BIND_SERVICE)。readOnlyRootFilesystem: true:将根文件系统设置为只读,防止恶意写入。
- Pod安全准入: 使用Pod安全准入控制器(替代废弃的PodSecurityPolicy),它可以强制在命名空间级别执行预定义的策略(如
privileged、baseline、restricted),确保Pod遵循安全标准。 - 容器镜像安全:
- 镜像扫描: 使用Trivy、Clair等工具扫描镜像中的已知漏洞。
- 基础镜像: 使用最小化基础镜像(如Alpine、Distroless),减少攻击面。
- 签名验证: 使用Notation、Cosign对镜像进行签名,并在拉取时验证签名,确保镜像未被篡改。
- 运行时安全: 使用Falco、AppArmor或Seccomp限制容器的系统调用和可疑行为,拒绝容器执行
exec命令或挂载宿主机敏感路径。
数据与机密管理
保护敏感数据(如密码、API密钥)不被泄露。
- Secrets管理:
kubectl中的Secret只是Base64编码,并非加密,建议:- 启用静态加密: 配置Kubernetes API Server对etcd中的Secret进行加密(如使用AES-CBC或KMS)。
- 外部密钥管理: 使用外部插件(如HashiCorp Vault、AWS Secrets Manager、Azure Key Vault)来存储和获取敏感数据。
- 避免环境变量: 不要在环境变量中明文传递Secret,而是将其挂载为卷。
- 加密: 如前所述,所有存储的Secret和配置应尽可能加密。
集群组件与节点安全
保护整个集群的基础设施。
- API Server: 限制对API Server的访问(如通过防火墙、IP白名单),并启用审计日志记录,使用
Admission Webhook对请求进行二次校验。 - kubelet: 配置kubelet使用TLS并启用匿名认证,禁用
--anonymous-auth=true,强制客户端通过证书认证。 - etcd: 如前所述,确保etcd仅有API Server可以访问,并使用强密码或证书保护。
- 节点安全: 定期更新节点操作系统(包括容器运行时Docker/containerd),使用CIS Kubernetes Benchmark对节点进行基线安全审计。
隔离与多租户
如果多个团队或应用共享一个集群,需要更严格的隔离。
- 命名空间: 使用命名空间实现逻辑隔离。
- 资源配额: 设置ResourceQuota和LimitRange,防止某个团队耗尽集群资源(DoS)。
- 策略引擎: 使用OPA/Gatekeeper或Kyverno作为准入控制器来实施自定义策略(如“禁止使用
latest标签”),这对于多租户场景尤为重要。 - 节点隔离: 对于高敏感度工作负载,可以使用污点和容忍度将Pod调度到特定节点上,或使用虚拟集群(如vcluster)实现强隔离。
安全配置清单
- 启用并配置RBAC:最小权限原则。
- 配置Pod安全策略:拒绝特权容器。
- 使用NetworkPolicy:实现网络分段。
- 扫描镜像漏洞:并使用最小化基础镜像。
- 加密所有通信:包括etcd、kubelet和外部Ingress。
- 审计密钥管理:使用外部工具管理Secrets。
- 开启审计日志:监控所有API请求。
- 启用准入控制器:使用OPA或Pod Security Admission。
- 进行节点安全加固:遵循CIS Benchmark。
- 实现运行时安全监控:使用Falco等工具。
Kubernetes安全是一个持续的过程,建议定期使用工具(如kube-bench、kube-hunter、Trivy)进行扫描和评估,并根据业务需求调整策略。