2. Kubernetes 资源模型基础:Pod、Service、Deployment、ConfigMap、Secret 的安全属性
在云原生安全基线核验架构中,Kubernetes 资源模型是安全策略的落地载体。Pod、Service、Deployment、ConfigMap 与 Secret 这五类核心资源,各自承载不同的安全职责与攻击面。理解它们的安全属性,是构建 Envoy 协同调优与运行时防护的前提。
2.1 资源安全属性总览
下表从隔离边界、网络暴露、数据敏感度、变更风险四个维度,对比五类资源的安全关注点:
| 资源类型 | 隔离边界 | 网络暴露 | 数据敏感度 | 变更风险 |
|---|---|---|---|---|
| Pod | 容器级隔离(cgroup/namespace) | 需显式暴露端口 | 运行时数据在容器内 | 重建即重置,易被篡改 |
| Service | 集群内虚拟 IP 抽象 | ClusterIP/NodePort/LB 三种模式 | 无状态,不存储数据 | 端点变更影响流量路径 |
| Deployment | 副本集与滚动更新控制 | 间接暴露(通过 Service) | 无状态,仅管理元数据 | 镜像/配置变更触发重建 |
| ConfigMap | 命名空间级存储 | 不直接暴露网络 | 非敏感配置(明文) | 更新后需重启 Pod 生效 |
| Secret | etcd 加密 + RBAC 访问控制 | 不直接暴露网络 | 敏感数据(Base64 编码) | 泄露即导致凭据失陷 |
安全基线要点: Secret 的 etcd 加密与 RBAC 细粒度授权是基线核验的必检项;Pod 的 securityContext 与 Service 的负载均衡策略直接影响 Envoy 的入站流量安全。
2.2 Pod 安全属性
Pod 是 Kubernetes 的最小调度单元,也是安全隔离的原子边界。其安全属性集中在以下三个层面:
- 容器运行时安全: 通过
securityContext设置runAsNonRoot、readOnlyRootFilesystem、capabilities.drop,限制容器权限。 - 网络策略: 默认允许所有流量;需配合 NetworkPolicy 实现微隔离,Envoy sidecar 可在此层注入 L7 策略。
- 资源隔离: 通过
resources.limits与requests防止资源争抢导致的 DoS。
apiVersion: v1
kind: Pod
metadata:
name: secure-pod
spec:
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
containers:
- name: app
image: nginx:1.25
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
readOnlyRootFilesystem: true
resources:
limits:
cpu: "500m"
memory: "512Mi"
requests:
cpu: "250m"
memory: "256Mi"
常见误区: 仅设置
runAsNonRoot: true 但未指定 runAsUser,容器仍可能以镜像默认的 root 用户运行。基线核验时应同时检查两者是否一致。
2.3 Service 与网络暴露安全
Service 定义了 Pod 的逻辑访问入口,其类型直接决定网络暴露面:
- ClusterIP(默认): 仅集群内可达,适合内部微服务通信。
- NodePort: 暴露节点端口,需配合防火墙规则限制来源 IP。
- LoadBalancer: 云厂商 LB 直连,需启用 TLS 终结与访问日志。
- ExternalName: 返回 CNAME,不经过 kube-proxy,需防范 DNS 劫持。
Envoy 在 Service 层常作为 Ingress Gateway 或 sidecar 代理,负责 TLS 卸载、速率限制与身份认证。安全基线核验需检查 Service 的 externalTrafficPolicy 是否设置为 Local(保留客户端源 IP)以及是否启用了 sessionAffinity。
2.4 Deployment 与配置漂移防护
Deployment 管理 Pod 的声明式更新与回滚。其安全属性主要体现在:
- 不可变基础设施: 每次更新应创建新 Revision,避免原地修改容器。
- 镜像签名验证: 通过
imagePullSecrets与 OCI 签名机制(如 Cosign)确保镜像来源可信。 - 配置漂移检测: 使用
kubectl diff或 Admission Webhook 对比期望状态与运行时状态。
Envoy 协同场景: Deployment 的滚动更新策略(
maxSurge/maxUnavailable)需与 Envoy 的端点发现服务(EDS)配合,确保流量平滑迁移,避免连接中断。
2.5 ConfigMap 与 Secret 的敏感数据管理
ConfigMap 与 Secret 是配置与凭据的载体,但安全模型差异显著:
| 属性 | ConfigMap | Secret |
|---|---|---|
| 存储编码 | 明文 | Base64(非加密) |
| etcd 加密 | 默认不加密 | 需启用 EncryptionConfiguration |
| 访问控制 | RBAC + 命名空间隔离 | RBAC + 细粒度 get/list/watch |
| 自动轮换 | 不支持 | 支持(通过 controller 或外部工具) |
| Envoy 挂载场景 | Envoy 配置文件(非敏感) | TLS 证书、JWT 密钥、上游密码 |
安全基线核验要求:
- Secret 必须启用 etcd 加密,且 RBAC 规则禁止
*通配符访问。 - ConfigMap 不应存储密码、 或私钥;若必须存储,需通过
kubectl create secret generic迁移。 - Envoy 的 SDS(Secret Discovery Service)应直接从 Secret 资源拉取证书,避免将明文证书写入 ConfigMap。
2.6 资源安全关系图
下图展示了五类资源在安全上下文中的交互关系,以及 Envoy 作为数据平面的介入点:
2.7 安全基线核验清单
基于上述资源安全属性,本章总结以下核验项,作为后续 Envoy 协同调优的前置条件:
- Pod: 检查
securityContext是否包含runAsNonRoot: true、readOnlyRootFilesystem: true、capabilities.drop: ["ALL"]。 - Service: 确认
type不为NodePort或LoadBalancer时已配置externalTrafficPolicy: Local与网络策略。 - Deployment: 验证
revisionHistoryLimit保留最近 3 个版本,且strategy.type为RollingUpdate。 - ConfigMap: 扫描所有 ConfigMap 数据,确保不包含
password、、key等敏感字段。 - Secret: 确认 etcd 加密已启用(
kubectl get encryptionconfig),且 RBAC 规则限制get操作仅授权给必要 ServiceAccount。
Envoy 协同提示: 上述核验项中,Secret 的 etcd 加密状态直接影响 Envoy SDS 的证书分发安全;Pod 的
readOnlyRootFilesystem 可防止 Envoy sidecar 被恶意写入临时文件。建议在集群部署阶段即通过 Admission Webhook 强制实施这些基线。