2. K8s 基础回顾:Pod、Deployment、Service、Namespace 核心概念与 YAML 定义

在构建自动化安全扫描与回滚流水线之前,必须牢固掌握 Kubernetes 的四大核心抽象:Pod(最小调度单元)、Deployment(声明式更新与回滚)、Service(网络访问抽象)和 Namespace(多租户隔离边界)。本章将逐一拆解其职责、生命周期与 YAML 定义规范。

2.1 Pod:最小调度与安全上下文单元

Pod 是 K8s 中可创建和部署的最小计算单元,一个 Pod 包含一个或多个共享网络栈、存储卷的容器。Pod 的 安全上下文(SecurityContext) 是流水线安全扫描的关键检查点。

属性 说明 安全扫描关注点
spec.containers[].image 容器镜像地址 镜像漏洞扫描、签名验证
spec.containers[].securityContext 容器级安全配置 是否以 root 运行、Capabilities 限制
spec.securityContext Pod 级安全配置 FSGroup、RunAsNonRoot 等
spec.containers[].resources CPU/内存限制 资源耗尽攻击防护
apiVersion: v1
kind: Pod
metadata:
  name: security-scanned-pod
  labels:
    app: my-app
    scan-status: passed
spec:
  securityContext:
    runAsNonRoot: true
    fsGroup: 2000
  containers:
  - name: app
    image: registry.example.com/my-app:v1.2.3
    securityContext:
      allowPrivilegeEscalation: false
      capabilities:
        drop: ["ALL"]
    resources:
      requests:
        memory: "256Mi"
        cpu: "250m"
      limits:
        memory: "512Mi"
        cpu: "500m"
流水线提示: 安全扫描阶段应强制检查 runAsNonRoot: true 和 allowPrivilegeEscalation: false,未设置则阻断发布。

2.2 Deployment:声明式更新与回滚引擎

Deployment 管理 ReplicaSet 并实现声明式更新、滚动升级和自动回滚。在自动化流水线中,Deployment 的 更新策略(strategy) 和 回滚历史(revisionHistoryLimit) 是核心配置。

  • RollingUpdate(默认):逐步替换旧 Pod,支持 maxSurge 和 maxUnavailable 控制速率。
  • Recreate:先删除所有旧 Pod,再创建新 Pod,适用于非生产环境。
  • 回滚机制:kubectl rollout undo 基于 ReplicaSet 历史版本快速恢复。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
  labels:
    app: my-app
spec:
  replicas: 3
  revisionHistoryLimit: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: app
        image: registry.example.com/my-app:v1.2.3
        ports:
        - containerPort: 8080
安全回滚注意: 流水线触发回滚时,应同时回退镜像版本和关联的 ConfigMap/Secret 版本,避免配置漂移。

2.3 Service:稳定的网络访问抽象

Service 为一组 Pod 提供稳定的网络端点,支持 ClusterIP、NodePort、LoadBalancer 三种类型。在安全扫描流水线中,Service 的 端口暴露范围 和 网络策略(NetworkPolicy) 是审计重点。

Service 类型 访问范围 安全风险
ClusterIP 集群内部 低,默认安全
NodePort 节点 IP + 端口 中,需限制端口范围
LoadBalancer 外部负载均衡器 高,需配合防火墙
apiVersion: v1
kind: Service
metadata:
  name: my-app-service
  labels:
    app: my-app
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
  selector:
    app: my-app

2.4 Namespace:多环境隔离与资源配额

Namespace 实现虚拟集群隔离,常用于区分开发、测试、生产环境。在流水线中,Namespace 的 资源配额(ResourceQuota) 和 网络策略 是安全合规的基础。

  • 环境隔离:每个流水线阶段(dev/staging/prod)使用独立 Namespace。
  • 资源限制:通过 ResourceQuota 防止单 Namespace 耗尽集群资源。
  • 安全边界:配合 NetworkPolicy 实现微隔离。
apiVersion: v1
kind: Namespace
metadata:
  name: production
  labels:
    environment: prod
    security-tier: high
---
apiVersion: v1
kind: ResourceQuota
metadata:
  name: prod-quota
  namespace: production
spec:
  hard:
    requests.cpu: "10"
    requests.memory: "20Gi"
    limits.cpu: "20"
    limits.memory: "40Gi"
    pods: "50"

2.5 核心对象关系与流水线交互

下图展示了 Pod、Deployment、Service、Namespace 在发布流水线中的协作关系,以及安全扫描与回滚触发点。

K8s 核心对象关系与流水线交互图 K8s 核心对象关系与流水线交互 Namespace: production Deployment my-app-deployment ReplicaSet replicas: 3 Pod app:v1.2.3 Pod app:v1.2.3 Pod app:v1.2.3 Service ClusterIP: 10.96.0.1:80 安全扫描 镜像/配置/网络策略 回滚触发 rollout undo 流水线流程:安全扫描 → 通过 → 更新 Deployment → 滚动升级 → 失败 → 回滚触发

2.6 核心概念对比总结

对象 API 版本 核心职责 流水线关注点
Pod v1 运行容器、共享网络/存储 安全上下文、镜像签名、资源限制
Deployment apps/v1 声明式更新、滚动升级、回滚 更新策略、回滚历史、就绪探针
Service v1 稳定网络端点、负载均衡 暴露类型、端口范围、网络策略
Namespace v1 虚拟集群隔离、资源配额 环境隔离、配额限制、标签审计
关键记忆: Deployment 管理 Pod 的期望状态,Service 提供稳定访问,Namespace 实现安全隔离。流水线自动化安全扫描应覆盖这四个对象的 YAML 定义,确保每个环节都符合安全基线。