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