2. Kubernetes 基础回顾:Pod、Deployment、Service、Namespace 核心概念与 YAML 声明式配置

在深入 Argo CD 与镜像供应链安全之前,必须牢固掌握 Kubernetes 的四大核心抽象:Pod、Deployment、Service 和 Namespace。它们是所有工作负载与网络策略的基石,也是 Argo CD 进行应用编排与同步的直接操作对象。本节将围绕这四个概念,结合 YAML 声明式配置,建立后续章节所需的统一语境。

2.1 核心概念速览

概念 作用层级 核心职责 生命周期
Pod 工作负载最小单元 运行一个或多个容器,共享网络/IP 与存储卷 临时性,可被销毁重建
Deployment 工作负载控制器 声明式管理 Pod 副本、滚动更新、回滚 持久,通过 ReplicaSet 驱动
Service 网络抽象层 提供稳定的虚拟 IP 与 DNS,负载均衡到 Pod 持久,与 Pod 解耦
Namespace 多租户隔离边界 资源分组、权限隔离、配额管理 持久,逻辑划分
关键认知: Argo CD 在同步应用时,本质上是在集群内创建或更新上述资源的 YAML 声明。理解这四个对象的 YAML 结构,就等于掌握了 Argo CD 的操作对象语言。

2.2 Pod:不可变的最小部署单元

Pod 是 Kubernetes 中可创建和管理的、最小的可部署计算单元。一个 Pod 可以包含一个或多个容器,这些容器共享同一个网络命名空间、IP 地址和存储卷。在镜像供应链安全场景中,Pod 的 image 字段是安全扫描与策略准入的直接目标。

apiVersion: v1
kind: Pod
metadata:
  name: secure-app-pod
  labels:
    app: secure-app
    version: v1.0.0
spec:
  containers:
  - name: app
    image: registry.example.com/secure-app:1.0.0
    ports:
    - containerPort: 8080
    resources:
      requests:
        memory: "256Mi"
        cpu: "250m"
      limits:
        memory: "512Mi"
        cpu: "500m"
    securityContext:
      runAsNonRoot: true
      allowPrivilegeEscalation: false
  imagePullSecrets:
  - name: regcred
安全注意: 生产环境中应始终为 Pod 设置 securityContext,禁止特权容器。Argo CD 可以通过配置策略(如 Cilium NetworkPolicy 或 OPA Gatekeeper)强制校验这些字段。

2.3 Deployment:声明式副本管理与滚动更新

Deployment 是 Kubernetes 中最常用的工作负载控制器。它通过 ReplicaSet 管理 Pod 的期望副本数,并支持声明式的滚动更新、暂停、恢复与回滚。Argo CD 在同步 Deployment 时,会直接比对 Git 仓库中的 YAML 与集群中的实时状态,自动触发更新。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: secure-app-deployment
  labels:
    app: secure-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: secure-app
  template:
    metadata:
      labels:
        app: secure-app
        version: v1.0.0
    spec:
      containers:
      - name: app
        image: registry.example.com/secure-app:1.0.0
        ports:
        - containerPort: 8080
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready
            port: 8080
          initialDelaySeconds: 3
          periodSeconds: 5
      imagePullSecrets:
      - name: regcred
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
Argo CD 集成点: Deployment 的 spec.template.spec.containers[].image 是镜像供应链安全策略的核心校验字段。Argo CD 可以通过 PreSync 钩子或外部准入控制器(如 Kyverno)在同步前验证镜像签名与漏洞等级。

2.4 Service:稳定的网络访问入口

Service 为一组动态变化的 Pod 提供稳定的网络端点。它通过标签选择器绑定 Pod,并提供 ClusterIP(集群内访问)、NodePort(节点端口映射)、LoadBalancer(云负载均衡)三种主要类型。在微服务架构中,Service 是服务间通信的 DNS 名称基础。

apiVersion: v1
kind: Service
metadata:
  name: secure-app-service
  labels:
    app: secure-app
spec:
  type: ClusterIP
  selector:
    app: secure-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
    name: http
网络策略提示: 仅定义 Service 并不提供安全隔离。必须配合 NetworkPolicy 限制 Pod 间的流量。Argo CD 可以统一管理 Service 与 NetworkPolicy 的 YAML,确保网络边界与工作负载同步部署。

2.5 Namespace:多租户隔离与资源配额

Namespace 是 Kubernetes 实现多租户隔离的核心机制。它将集群内的资源划分为逻辑分组,每个 Namespace 拥有独立的资源配额(ResourceQuota)、权限控制(RBAC)和网络策略作用域。在镜像供应链安全场景中,通常为不同环境(dev、staging、prod)或不同团队分配独立的 Namespace。

apiVersion: v1
kind: Namespace
metadata:
  name: production
  labels:
    environment: prod
    team: platform
---
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"
安全隔离实践: 生产 Namespace 应启用 PodSecurityPolicy 或 Pod Security Admission,禁止特权容器与 hostPath 挂载。Argo CD 可以通过 ApplicationSet 为每个 Namespace 自动生成对应的安全策略 YAML。

2.6 四者协作关系:YAML 声明式配置全景

下图展示了 Pod、Deployment、Service 与 Namespace 在集群中的协作关系。Argo CD 通过 Git 仓库中的 YAML 文件,统一管理这四个层次的资源声明。

Kubernetes 核心资源协作关系 Namespace: production Service secure-app-service ClusterIP: 10.96.0.1 Deployment secure-app-deployment replicas: 3 Pod app: secure-app IP: 10.1.0.2 Pod app: secure-app IP: 10.1.0.3 Pod app: secure-app IP: 10.1.0.4 selector: app=secure-app template 创建 Argo CD 同步范围: Git 仓库中的 YAML 文件同时包含 Namespace、Deployment、Service 定义,Argo CD 一次性同步至集群。 镜像供应链安全策略在 Pod 的 image 字段与 securityContext 字段执行准入校验。

2.7 YAML 声明式配置最佳实践

  1. 版本化与标签化: 所有资源必须包含 app、version、environment 标签,便于 Argo CD 的 ApplicationSet 进行动态选择。
  2. 资源配额显式声明: 每个 Deployment 必须设置 resources.requests 与 resources.limits,避免资源争抢与安全风险。
  3. 镜像地址不可变: 使用包含完整 registry 路径与 digest(SHA256)的镜像地址,确保供应链可追溯。
  4. 安全上下文下沉: 在 Pod 级别设置 securityContext,而非依赖集群默认值。
  5. Namespace 隔离: 不同环境使用不同 Namespace,并通过 ResourceQuota 与 NetworkPolicy 实施边界。
Argo CD 声明式对齐: 上述所有 YAML 配置都可以直接放入 Git 仓库,由 Argo CD 自动同步。当镜像供应链安全策略(如签名验证、漏洞扫描)检测到不合规镜像时,Argo CD 可以通过 PreSync 钩子或外部准入控制器阻止同步,确保只有经过安全校验的镜像进入生产 Namespace。