2. 资源模型基础:Kubernetes 资源模型

在云原生成本分摊与安全权限测试中,Kubernetes 资源模型是核心基础。只有准确理解 Pod、Node、Namespace 的层级关系,以及 Requests & Limits、ResourceQuota 的约束机制,才能设计出可审计、可追溯的成本分摊策略与权限控制方案。

2.1 核心资源对象:Pod、Node、Namespace

Kubernetes 资源模型以 Pod 为最小调度单元,Node 为物理/虚拟计算节点,Namespace 为逻辑隔离边界。三者构成资源归属与计费的基本链路。

资源对象 角色 成本分摊视角 安全权限视角
Pod 最小调度与计费单元 按 Pod 的 Requests 分摊节点成本 Pod 身份(ServiceAccount)决定资源访问权限
Node 计算资源提供者 节点总成本 = 实例费用 + 系统开销 Node 级别 kubelet 鉴权控制节点操作
Namespace 逻辑隔离边界 按 Namespace 聚合 Pod 成本,支持部门级分摊 RBAC 绑定 Namespace 范围,限制越权访问
关键原则:成本分摊链路为 Node → Namespace → Pod,安全权限链路为 Cluster → Namespace → Pod。两条链路在 Namespace 层交汇,形成可审计的管控面。

2.2 资源请求与限制(Requests & Limits)

Requests 是 Pod 启动时预留的“最小保证资源”,Limits 是 Pod 可使用的“资源上限”。两者直接影响调度决策、QoS 等级以及成本计算。

2.2.1 三档 QoS 等级与成本含义

QoS 等级 Requests vs Limits 调度保证 成本分摊系数
Guaranteed Requests == Limits 最高,不会被驱逐 按 Requests 全额分摊
Burstable Requests < Limits 中等,突发时可超用 按 Requests 分摊 + 超用部分按比例追加
BestEffort 未设置 Requests/Limits 最低,优先被驱逐 按实际使用量分摊(波动大)
安全测试注意:恶意 Pod 可通过设置极低 Requests 但极高 Limits 的方式抢占节点资源,导致同节点其他 Pod 被驱逐。ResourceQuota 和 LimitRange 必须配合使用,防止此类“资源饥饿”攻击。

2.2.2 典型资源声明示例

apiVersion: v1
kind: Pod
metadata:
  name: cost-demo-pod
  namespace: finance
spec:
  containers:
  - name: app
    image: nginx
    resources:
      requests:
        cpu: "500m"        # 0.5 核
        memory: "256Mi"
      limits:
        cpu: "1000m"       # 1 核
        memory: "512Mi"

该 Pod 属于 Burstable 等级,成本分摊时基础部分按 0.5 核 + 256Mi 计算,突发部分按实际超用量额外计费。

2.3 资源配额(ResourceQuota)

ResourceQuota 是 Namespace 级别的资源总量约束,防止单个 Namespace 过度消耗集群资源。在成本分摊模型中,ResourceQuota 定义了“预算上限”,超出部分可触发告警或拒绝调度。

2.3.1 ResourceQuota 核心字段

字段 作用 成本分摊影响
requests.cpu Namespace 内所有 Pod 的 CPU Requests 总和上限 限制部门可申请的 CPU 总量,防止超支
requests.memory Namespace 内所有 Pod 的内存 Requests 总和上限 控制内存成本上限
limits.cpu Namespace 内所有 Pod 的 CPU Limits 总和上限 限制突发资源使用,避免成本失控
limits.memory Namespace 内所有 Pod 的内存 Limits 总和上限 防止内存泄漏导致成本飙升
count/pods Namespace 内 Pod 数量上限 间接控制管理开销与调度压力

2.3.2 ResourceQuota 配置示例

apiVersion: v1
kind: ResourceQuota
metadata:
  name: finance-quota
  namespace: finance
spec:
  hard:
    requests.cpu: "10"        # 总计 10 核
    requests.memory: "20Gi"
    limits.cpu: "20"          # 允许突发至 20 核
    limits.memory: "40Gi"
    count/pods: "50"
实践建议:在成本分摊系统中,将 ResourceQuota 的 hard 值与部门预算绑定。当 Namespace 资源使用量达到 Quota 的 80% 时触发预警,100% 时拒绝新 Pod 创建,实现“预算即配额”的自动化管控。

2.4 资源模型关系图

下图展示了 Kubernetes 资源模型的核心层级与成本分摊路径:

Kubernetes 资源模型与成本分摊路径 Kubernetes 资源模型与成本分摊路径 Kubernetes Cluster Node (Worker) 实例费用 + 系统开销 总成本 = $节点单价 × 运行时长 可分配资源: 32C / 64Gi Namespace (finance) 逻辑隔离 + 预算配额 ResourceQuota: 10C / 20Gi RBAC 权限范围 Pod 集合(最小计费单元) Pod A (Guaranteed) Req: 1C/2Gi Pod B (Burstable) Req: 0.5C/1Gi Pod C (BestEffort) 无 Requests 调度 包含 分配资源 成本分摊公式:Pod 成本 = (Node 总成本 / Node 可分配资源) × Pod Requests × 运行时长 安全权限:Pod 通过 ServiceAccount 继承 Namespace 的 RBAC 权限,ResourceQuota 防止资源滥用

2.5 资源模型与成本分摊的映射关系

将上述资源模型映射到成本分摊系统,需要建立以下关键映射表:

Kubernetes 对象 成本分摊维度 安全测试关注点
Node 计算资源池,按实例规格计费 节点鉴权、kubelet 端口暴露
Namespace 部门/项目成本中心 RBAC 绑定、ResourceQuota 绕过
Pod 最小计费单元,按 Requests 分摊 特权容器、资源耗尽攻击
ResourceQuota 预算上限,超限告警/拒绝 Quota 配置篡改、配额耗尽
LimitRange Pod 级别资源默认值/约束 默认值绕过、最小/最大限制逃逸