k8s中如何保障集群的安全
如何保障Kubernetes集群安全?生产环境实战指南
Kubernetes(K8s)的安全性是一个系统性工程,需要从多个维度进行防护。以下是一份贴合生产环境的实战指南,涵盖关键安全措施和落地工具。
1. 网络层:关好集群的“大门”
-
网络策略(Network Policies)
- 用规则限制Pod之间的通信,比如只允许前端Pod访问后端数据库。
- 工具推荐:Calico、Cilium(支持更细粒度的策略)。
- 示例:禁止所有Pod默认通信,仅放行指定标签的Pod。
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all spec: podSelector: {} policyTypes: - Ingress - Egress
-
服务网格(Service Mesh)
- 启用双向TLS(mTLS),加密服务间通信。
- 工具推荐:Istio(自动mTLS+流量鉴权)、Linkerd。
-
防火墙规则
- 节点只开放必要端口(如API Server的6443、kubelet的10250)。
- 云环境使用安全组限制入口流量(如仅允许运维IP访问控制平面)。
2. 身份认证与授权:谁可以做什么?
-
API Server认证
- 必做项:启用TLS,禁用匿名访问(
--anonymous-auth=false)。 - 推荐方案:
- 内部服务:ServiceAccount + Token
- 人类用户:OIDC集成企业SSO(如Azure AD、Keycloak)
- 必做项:启用TLS,禁用匿名访问(
-
RBAC精细化控制
- 遵循最小权限原则,比如:
- 开发人员:仅能查看命名空间内的Pod日志。
- 运维人员:可操作Deployment,但不能访问Secrets。
- 关键命令:定期审计权限
kubectl get rolebindings,clusterrolebindings -A
- 遵循最小权限原则,比如:
-
ServiceAccount管理
- 禁止Pod使用默认ServiceAccount(
automountServiceAccountToken: false)。 - 为每个微服务创建独立的ServiceAccount并绑定RBAC角色。
- 禁止Pod使用默认ServiceAccount(
3. 容器与镜像:堵住漏洞入口
-
镜像安全三板斧
- 私有仓库:使用Harbor托管镜像,开启漏洞扫描功能。
- 镜像签名:在CI/CD中集成Cosign或Notary,验证镜像来源。
- 漏洞扫描:在流水线中嵌入Trivy、Clair,阻断高风险镜像部署。
-
运行时安全
-
弃用PSP后的替代方案:
- 使用K8s内置的 Pod Security Admission(PSA),设置基线策略:
apiVersion: v1 kind: Namespace metadata: name: production labels: pod-security.kubernetes.io/enforce: baseline - 高级需求:采用OPA Gatekeeper定义自定义策略(如禁止特权容器)。
- 使用K8s内置的 Pod Security Admission(PSA),设置基线策略:
-
安全上下文(SecurityContext):
securityContext: runAsNonRoot: true allowPrivilegeEscalation: false capabilities: drop: ["ALL"]
-
4. 基础设施:加固底层防线
-
节点安全
- 定期更新操作系统(使用AutoUpdate工具如unattended-upgrades)。
- 禁用SSH密码登录,强制使用密钥。
- 部署主机安全Agent(如Falco监控异常进程)。
-
K8s组件安全
- 控制平面组件(如etcd)启用双向TLS认证。
- 定期升级K8s版本(使用kubeadm upgrade或集群管理工具Rancher)。
5. 监控与响应:发现威胁的眼睛
-
日志收集
- 标准方案:EFK(Elasticsearch+Fluentd+Kibana)或Grafana Loki。
- 关键日志来源:
- API Server审计日志
- 容器运行时日志(如containerd)
-
审计日志配置
启用API Server审计,记录关键操作:# /etc/kubernetes/audit-policy.yaml apiVersion: audit.k8s.io/v1 kind: Policy rules: - level: Metadata resources: - group: "" # core API group resources: ["secrets", "configmaps"] -
实时威胁检测
- 使用Falco监控异常行为(如容器内启动SSH服务)。
- 集成SIEM工具(如Elastic Security)进行告警分析。
6. 生产环境进阶技巧
-
Secrets管理
- 避免明文存储:用Vault或Sealed Secrets加密敏感信息。
- 定期轮换密钥(如通过Vault动态生成数据库密码)。
-
集群加固工具
- 使用kube-bench检查CIS基准合规性:
docker run --rm -v $(pwd):/host aquasec/kube-bench:latest node --version 1.28 - 云厂商托管服务:EKS、GKE Autopilot内置安全最佳实践。
- 使用kube-bench检查CIS基准合规性:
-
灾难恢复
- 定期备份etcd数据(etcdctl snapshot save)。
- 使用Velero备份集群资源(PV、Deployment等)。
总结:安全是一个持续过程
生产环境的安全防护需要结合 预防(策略配置)、检测(日志监控)、响应(应急流程)三个环节。建议每季度进行一次安全审计,并关注CVE漏洞通告(如k8s官方安全公告)。记住:没有绝对的安全,但通过分层防御,可以极大降低被攻击的风险。
浙公网安备 33010602011771号