2. Kubernetes 基础回顾:Pod、Service、Deployment、Namespace 核心资源定义

在深入 Kyverno 策略引擎之前,必须牢固掌握 Kubernetes 的四大核心资源:Pod、Service、Deployment 和 Namespace。它们是服务目录平台运行基线的原子单元,也是策略核验的直接作用对象。本节从定义、YAML 结构、生命周期和典型场景四个维度进行回顾。

2.1 Pod:最小调度单元

Pod 是 Kubernetes 中可创建和部署的最小计算单元,封装一个或多个容器、存储卷和网络 IP。同一 Pod 内的容器共享网络命名空间和存储卷,通过 localhost 通信。

关键特征:
  • 每个 Pod 拥有唯一的集群 IP 地址。
  • Pod 是临时性的,重启后 IP 会变化。
  • 推荐一个 Pod 只运行一个主容器,sidecar 容器为辅。
apiVersion: v1
kind: Pod
metadata:
  name: web-pod
  labels:
    app: web
    env: prod
spec:
  containers:
  - name: nginx
    image: nginx:1.25
    ports:
    - containerPort: 80
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

2.2 Service:稳定的网络入口

Service 为一组功能相同的 Pod 提供稳定的网络访问入口,实现服务发现和负载均衡。即使后端 Pod 发生扩缩容或重启,Service 的 ClusterIP 和 DNS 名称保持不变。

Service 类型 访问范围 典型用途
ClusterIP 集群内部 内部微服务通信
NodePort 集群外部(节点端口) 开发调试、对外暴露
LoadBalancer 集群外部(云负载均衡器) 生产环境对外暴露
ExternalName DNS 映射 将外部服务映射为集群内名称
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    app: web
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP
策略关注点:Service 的 selector 是否正确匹配 Pod 标签?是否意外暴露了管理端口(如 10250)?这些是 Kyverno 基线核验的常见规则。

2.3 Deployment:声明式应用管理

Deployment 管理 ReplicaSet,提供声明式更新、回滚、扩缩容和自愈能力。它定义了应用的期望状态,由控制器持续协调至实际状态与期望状态一致。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80
常见陷阱:Deployment 的 spec.selector.matchLabels 必须与 Pod 模板的 metadata.labels 严格匹配,否则控制器无法管理 Pod。Kyverno 策略可以校验这种标签一致性。

2.4 Namespace:逻辑隔离边界

Namespace 将集群物理资源划分为多个虚拟集群,用于环境隔离(dev/staging/prod)、团队隔离或项目隔离。资源名称在同一个 Namespace 内唯一,跨 Namespace 可重名。

Namespace 名称 用途 是否默认创建
default 未指定 Namespace 时的默认空间 是
kube-system Kubernetes 系统组件 是
kube-public 所有用户可读的公共资源 是
kube-node-lease 节点心跳租约 是
apiVersion: v1
kind: Namespace
metadata:
  name: service-catalog-prod
  labels:
    environment: production
    team: platform

2.5 四类资源的关系与协作

下图展示了 Deployment、ReplicaSet、Pod、Service 和 Namespace 之间的典型协作关系:

Kubernetes 核心资源协作关系 Namespace: service-catalog-prod Deployment web-deployment ReplicaSet web-deployment-7d4f8 Pod (v1) 10.0.0.1 Pod (v2) 10.0.0.2 Pod (v3) 10.0.0.3 Service ClusterIP: 10.96.0.10 管理 控制 标签选择 说明: Deployment 管理 ReplicaSet → ReplicaSet 确保 Pod 副本数 → Service 通过标签选择器将流量分发到 Pod。

2.6 核心资源对比总结

资源 API 版本 作用域 是否提供 IP 自愈能力
Pod v1 Namespace 是(临时) 无(由控制器管理)
Service v1 Namespace 是(稳定) 无(抽象层)
Deployment apps/v1 Namespace 否 是(自动恢复 Pod)
Namespace v1 集群 否 无
基线核验视角:Kyverno 策略引擎将针对上述资源的 metadata、spec 和 status 字段进行声明式校验。例如:检查 Deployment 是否设置了 resources.limits、Pod 是否挂载了 hostPath、Service 是否暴露了高危端口。理解这些资源的定义结构,是编写精准策略的前提。