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 之间的典型协作关系:
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 是否暴露了高危端口。理解这些资源的定义结构,是编写精准策略的前提。