3. 节点池配置模型

节点池(Node Pool)是集群中一组具有相同配置的工作节点集合。在云原生环境中,节点池抽象了底层 IaaS 资源的创建、扩缩容与配置管理,是 OPA 策略实施合规巡检的核心对象。理解节点池的定义与常见配置项,是编写精准 Rego 约束的前提。

3.1 节点池定义与核心属性

节点池通常包含以下核心属性,这些属性直接决定了工作负载的运行环境与资源边界:

属性类别 属性名称 说明 合规关注点
标识 名称 / ID 节点池的唯一标识 命名规范、环境标签
计算 实例规格 CPU、内存、GPU 等资源配比 是否允许高规格、成本控制
调度 标签 (Labels) 用于 Pod 调度匹配的键值对 是否包含强制合规标签
调度 污点 (Taints) 阻止不容忍的 Pod 调度到该节点 是否误用关键污点
弹性 自动伸缩 根据负载自动调整节点数量 伸缩范围、冷却时间
存储 系统盘 操作系统与系统日志存储 磁盘类型、大小、加密
存储 数据盘 容器运行时、镜像、持久化数据 磁盘类型、挂载路径、加密
巡检视角:OPA 策略通常以节点池的 spec 或 template 字段作为 input 对象。在 Rego 中,input.spec.instanceType、input.spec.labels、input.spec.taints 是常见的访问路径。

3.2 常见配置项详解

3.2.1 实例规格

实例规格决定了节点的计算能力。合规策略通常关注:

  • 规格白名单/黑名单:是否允许使用 GPU 实例、裸金属实例或特定系列(如 ecs.g7.2xlarge)。
  • 资源配额:CPU 与内存的比例是否合理,防止资源碎片。
  • 架构一致性:同一节点池内是否混用不同架构(如 x86 与 ARM)。

3.2.2 标签与污点

标签用于标识节点属性,污点用于控制 Pod 调度。合规策略需检查:

  • 强制标签:如 environment: production、team: platform 是否存在。
  • 标签值约束:值是否符合正则表达式(如只允许小写字母与连字符)。
  • 污点误用:是否设置了 node.kubernetes.io/unschedulable 等关键污点导致节点不可用。
  • 污点效果:是否只允许 NoSchedule,禁止 NoExecute 用于非系统节点。

3.2.3 自动伸缩

自动伸缩配置决定了集群的弹性能力与成本风险:

  • 最小/最大节点数:防止缩容到 0 导致关键服务不可用,或扩容过大产生巨额费用。
  • 伸缩策略:是否启用按量付费与 Spot 实例混合策略。
  • 冷却时间:防止频繁伸缩导致震荡。

3.2.4 系统盘与数据盘

磁盘配置直接影响节点稳定性与数据安全:

  • 系统盘:通常建议最小 40GB,类型为 SSD(如 cloud_ssd 或 cloud_essd)。
  • 数据盘:用于容器运行时(如 Docker/containerd)与镜像存储,建议挂载到 /var/lib/containerd 或 /var/lib/docker。
  • 加密:是否启用云盘加密(如使用 KMS 密钥)。
  • 快照策略:是否配置自动快照以支持数据恢复。
常见合规风险:数据盘未挂载或挂载路径错误会导致容器运行时写满系统盘,引发节点故障。OPA 策略应强制检查 dataDisks 列表是否包含指定挂载点。

3.3 节点池配置模型关系图

下图展示了节点池配置模型的核心组件及其关联关系,帮助理解 OPA 策略的覆盖范围:

节点池配置模型关系图 节点池 (Node Pool) 实例规格 标签 污点 自动伸缩 存储配置 系统盘 数据盘 类型 / 大小 / 加密 挂载路径 / 性能 快照 / 备份策略 最小 / 最大节点数

3.4 节点池配置的 Rego 策略示例

以下是一个简单的 Rego 策略片段,用于检查节点池是否配置了强制标签 environment 且数据盘挂载路径正确:

package node_pool_compliance

# 检查是否包含强制标签
deny[msg] {
    input.spec.labels.environment == ""
    msg := "节点池必须包含 environment 标签"
}

# 检查数据盘挂载路径
deny[msg] {
    data_disk := input.spec.dataDisks[_]
    data_disk.mountPath != "/var/lib/containerd"
    msg := sprintf("数据盘挂载路径应为 /var/lib/containerd,当前为 %v", [data_disk.mountPath])
}

# 检查实例规格是否在白名单内
allowed_instance_types := {"ecs.g7.2xlarge", "ecs.g7.4xlarge", "ecs.r7.2xlarge"}

deny[msg] {
    not allowed_instance_types[input.spec.instanceType]
    msg := sprintf("实例规格 %v 不在允许列表中", [input.spec.instanceType])
}
策略要点:
  • 使用 input.spec 访问节点池配置。
  • 使用 _ 遍历数组,检查所有数据盘。
  • 使用 sprintf 动态生成错误消息,便于审计定位。

3.5 配置项合规巡检清单

下表总结了节点池各配置项的合规巡检要点,可直接用于编写 OPA 策略:

配置项 巡检要点 合规条件 违规示例
实例规格 白名单、成本控制 规格在允许列表中 ecs.g7.8xlarge 未在白名单
标签 强制标签、值格式 environment 存在且值匹配 environment 缺失或值为空
污点 关键污点、效果限制 未设置 node.kubernetes.io/unschedulable 误设关键污点导致节点不可调度
自动伸缩 范围、策略 最小节点数 >= 1,最大节点数 <= 100 最小节点数为 0
系统盘 类型、大小、加密 类型为 cloud_essd,大小 >= 40GB 系统盘类型为 cloud_efficiency
数据盘 挂载路径、加密 挂载路径为 /var/lib/containerd 挂载路径为 /data

通过上述模型与策略示例,可以系统化地对节点池配置进行合规巡检与审计,确保集群基础设施符合企业安全与运维标准。