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 作为数据平面的介入点:

Kubernetes 资源安全关系与 Envoy 协同 Kubernetes 资源安全关系与 Envoy 协同 Pod securityContext Service ClusterIP/NodePort/LB Deployment 滚动更新/回滚 ConfigMap 明文配置 Secret 凭据/证书 Envoy Proxy SDS/EDS/L7 策略 图例说明: 实线箭头:资源依赖关系(Deployment 管理 Pod,Service 选择 Pod) 虚线箭头:Envoy 数据面与控制面交互(SDS 拉取 Secret,EDS 发现 Service 端点) 安全基线核验点:Pod securityContext、Service 暴露类型、Secret etcd 加密、Deployment 镜像签名

2.7 安全基线核验清单

基于上述资源安全属性,本章总结以下核验项,作为后续 Envoy 协同调优的前置条件:

  1. Pod: 检查 securityContext 是否包含 runAsNonRoot: true、readOnlyRootFilesystem: true、capabilities.drop: ["ALL"]。
  2. Service: 确认 type 不为 NodePort 或 LoadBalancer 时已配置 externalTrafficPolicy: Local 与网络策略。
  3. Deployment: 验证 revisionHistoryLimit 保留最近 3 个版本,且 strategy.type 为 RollingUpdate。
  4. ConfigMap: 扫描所有 ConfigMap 数据,确保不包含 password、、key 等敏感字段。
  5. Secret: 确认 etcd 加密已启用(kubectl get encryptionconfig),且 RBAC 规则限制 get 操作仅授权给必要 ServiceAccount。
Envoy 协同提示: 上述核验项中,Secret 的 etcd 加密状态直接影响 Envoy SDS 的证书分发安全;Pod 的 readOnlyRootFilesystem 可防止 Envoy sidecar 被恶意写入临时文件。建议在集群部署阶段即通过 Admission Webhook 强制实施这些基线。