K8s 安全遵循 4C 安全模型:Cloud(云基础设施)、Cluster(K8s 集群)、Container(容器)、Code(应用代码),下面分维度整理生产环境核心防护要点,覆盖集群、认证授权、网络、镜像、运行时、日志审计、运维、业务侧。
一、集群基础设施层面(Cloud)
底层节点安全
节点操作系统最小化安装,关闭不必要服务、端口,定期系统补丁更新;
节点禁止直接暴露公网,使用跳板机 / 堡垒机登录,限制 SSH 登录,禁用 root 远程登录;
控制平面(master/control‑plane)节点做物理 / 网络隔离,不运行业务 Pod。
API Server 访问防护
禁止 API Server 直接对公网暴露,通过负载均衡 + 白名单 IP 访问;
关闭不安全端口:关闭 8080 非认证端口,仅使用 6443 TLS 加密端口;
禁用匿名访问:
--anonymous-auth=false,拒绝未认证请求。
etcd 数据库安全
etcd 存储全部集群敏感数据,必须开启 TLS 双向认证;
etcd 不对外暴露,仅 control‑plane 组件访问;
定期加密备份 etcd 数据,备份文件严格权限管控。
控制平面组件加固
kube‑controller‑manager、kube‑scheduler 不开启未认证 http 接口;
kube‑proxy 使用 iptables/ipvs 模式,关闭不必要的 metrics 公网暴露。
二、认证与授权(Cluster 访问控制)
认证 Authentication
优先使用 ServiceAccount、OIDC、证书认证,尽量少用静态 token、静态密码;
用户证书设置合理过期时间,及时回收离职人员证书;
ServiceAccount:非必要不使用 default serviceAccount,每个业务命名空间创建独立 sa。
授权 Authorization:RBAC 是核心
绝对禁止集群管理员 cluster-admin 权限随意分配给业务账号、ServiceAccount;
遵循最小权限原则,Role/ClusterRole 精确配置资源权限,区分 namespace 级别与集群级别权限;
禁止通配符
*权限,业务账号只给所需资源增删改查;审计检查高危权限:pod exec、pod attach、create pods、secrets 读取权限。
准入控制 Admission Controller
开启关键准入插件:
NodeRestriction、PodSecurity、ValidatingAdmissionWebhook;使用 PodSecurity(PSP 替代品),按命名空间设置安全级别:privileged/baseline/restricted;
引入 OPA/Gatekeeper 自定义准入策略,拦截非法 Pod 配置(特权容器、hostPath、hostNetwork 等)。
三、Pod & 容器安全(Container)
禁用特权容器
禁止
privileged: true;禁止授予高危 capabilities,删除 ALL,只按需添加必要 cap;
禁止直接使用 hostPID、hostIPC、hostNetwork,业务尽量不要共享宿主机命名空间。
文件系统与权限
容器不以 root 用户运行,设置
securityContext.runAsNonRoot: true,指定普通 UID;文件系统只读
readOnlyRootFilesystem: true,只挂载必要 tmp 空目录;限制 hostPath 挂载,禁止挂载宿主机
/、/etc、/proc、docker.sock;
挂载 docker.sock = 容器逃逸高危风险。
Secrets 敏感信息防护
Secret 不要明文存于 ConfigMap,不要硬编码在镜像、yaml;
生产建议对接外部密钥管理:Vault、KMS,不依赖原生 Secret(仅 base64 编码,非加密);
限制 ServiceAccount 读取 Secret 权限。
资源与逃逸限制
设置 Pod
resources.limitsCPU/memory,防止 DoS 耗尽节点资源;配置
seccompProfile、appArmorProfile,限制系统调用,降低容器逃逸风险。
四、镜像安全
镜像仓库管控
使用私有镜像仓库 Harbor,禁止直接拉取公共未审核镜像;
镜像仓库开启 TLS,开启身份认证,禁止匿名拉取;
镜像策略:禁止 latest 标签,必须使用固定版本 tag。
镜像漏洞扫描
CI/CD 流水线集成镜像扫描(Trivy、Clair),高危漏洞镜像禁止部署;
禁止镜像内置 ssh、curl、netcat 等黑客工具,镜像最小化(distroless)。
镜像来源校验
ImagePolicyWebhook 校验镜像来源,只允许信任仓库镜像部署;
生产可使用镜像签名(cosign)校验镜像完整性。
五、网络安全
NetworkPolicy 网络策略
开启 CNI 支持 NetworkPolicy,默认拒绝 Pod 之间互通,按需放行;
不同业务、不同命名空间做网络隔离,限制 Pod 访问 kube‑api、etcd。
Service 与 Ingress 防护
尽量不用 NodePort 大范围暴露业务;
Ingress 开启 TLS,强制 HTTPS,配置 WAF 防护;
禁止创建 ClusterIP/NodePort 类型访问集群内部敏感服务(metrics、kube‑proxy)。
Metrics 监控接口
kubelet、kube‑api metrics 接口不对外暴露,使用 RBAC 限制访问,不要 0.0.0.0 开放。
六、日志、审计、监控
开启 K8s 审计日志 Audit Log
api-server 开启 audit,记录所有集群操作(创建 pod、读取 secret、rbac 变更);
审计日志持久化,不可篡改,保存足够周期,用于安全溯源。
组件日志收集
收集节点、kubelet、容器标准输出日志,集中存储 ELK/Loki;
安全检测
部署安全检测工具:Falco(运行时异常行为检测,容器逃逸、特权调用告警);
定期集群安全基线检查:kube‑bench。
七、运维与供应链安全(Code)
CI/CD 流水线安全
流水线账号最小权限,CI 账号不能持有 cluster‑admin;
流水线 yaml 不要硬编码密钥,使用密钥管理器注入。
版本升级
K8s 集群持续升级小版本,修补已知 CVE 漏洞,不要长期停留在老旧版本;
kubelet、容器运行时(containerd)同步升级。
容器运行时安全
弃用 docker shim,使用 containerd;
加固运行时配置,限制容器逃逸向量。
备份与灾难恢复
etcd 定期加密备份,测试恢复演练;
重要 namespace 资源 yaml 版本管理。
八、常见高危坑(生产一定要规避)
ServiceAccount 挂载给 Pod,该 sa 拥有 cluster‑admin 权限;
Pod 挂载宿主机
/var/run/docker.sock,直接接管宿主机;大量 pod 使用 privileged 特权模式;
API Server 暴露公网,无 IP 白名单,开启匿名访问;
不启用 NetworkPolicy,所有 Pod 网络互通;
Secret 直接写在 yaml,提交 git 仓库;
业务 Pod 使用 hostNetwork、hostPID。
工具清单参考
基线检查:kube‑bench
运行时检测:Falco
准入策略:OPA Gatekeeper
镜像扫描:Trivy
密钥管理:HashiCorp Vault
Pod 安全:PodSecurity