4. 环境准备总览:搭建实验环境所需的工具清单与整体架构

在正式进入资源配额模型的策略编写与部署之前,必须搭建一套完整、可复现的实验环境。本章将明确列出所需工具的版本要求、核心用途,并给出整体架构设计图,确保后续章节的每一步操作都有清晰的环境基础。

4.1 工具清单与版本要求

本课程实验环境基于以下工具链构建,所有工具均为开源或社区免费版。建议使用指定版本以避免兼容性问题。

工具 版本(推荐) 核心用途 安装方式
Docker 24.0+ 容器运行时,支撑 Kubernetes 集群节点及本地镜像构建 官方脚本 / 包管理器
Kubernetes v1.28+ 容器编排平台,运行资源配额(ResourceQuota)与 LimitRange kind / kubeadm / minikube
OPA v0.58+ 策略引擎,实现准入控制与资源配额策略即代码 二进制 / Docker 镜像
Terraform v1.6+ 基础设施即代码,声明式管理 Kubernetes 资源与 OPA 策略 官方二进制 / tfenv
Git 2.40+ 版本控制,管理策略代码与 Terraform 配置的变更历史 包管理器 / 官方安装包
版本兼容提示: 本课程所有示例均在 Docker 24.0.7 + Kubernetes v1.28.3(kind 集群) + OPA v0.60.0 + Terraform v1.7.0 环境下验证通过。若使用更高版本,请留意 OPA 与 Kubernetes 准入 Webhook 的 API 版本变化。

4.2 工具职责与协作关系

各工具在实验环境中承担明确角色,形成从代码提交到策略生效的完整链路:

  • Git:作为单一可信源,存储 Terraform 配置(.tf 文件)与 OPA 策略(.rego 文件)。
  • Terraform:读取 Git 仓库中的声明式配置,调用 Kubernetes Provider 创建命名空间、ResourceQuota、LimitRange;同时调用 OPA Provider 部署策略。
  • Kubernetes:提供集群环境,运行工作负载,并通过 ValidatingAdmissionWebhook 将资源变更请求转发给 OPA。
  • OPA:作为策略决策点,接收 Kubernetes 的准入请求,根据已加载的 .rego 策略判断请求是否合规,返回允许或拒绝。
  • Docker:为 Kubernetes 集群(如 kind)提供容器节点,同时用于本地测试 OPA 策略或构建自定义容器镜像。

4.3 整体架构图

下图展示了实验环境中各组件之间的数据流与依赖关系。箭头方向代表配置下发或请求转发的方向。

实验环境整体架构图 Git 仓库 策略代码 + Terraform 配置 Terraform 基础设施即代码引擎 git pull / clone Kubernetes 集群 ResourceQuota / LimitRange OPA 策略引擎 准入控制 / 策略决策 terraform apply 创建资源 部署 .rego 策略 ValidatingAdmissionWebhook Docker 容器运行时 / 镜像构建 提供集群节点 开发者 / 运维 提交代码 / 执行部署 git push terraform plan/apply 图例说明 版本控制 基础设施编排 容器编排平台 策略引擎

4.4 环境搭建流程概览

按照以下顺序搭建实验环境,可最大限度减少依赖冲突:

  1. 安装 Docker:配置镜像加速器,验证 docker run hello-world 正常。
  2. 创建 Kubernetes 集群:使用 kind 创建包含 1 个控制平面 + 2 个工作节点的集群,配置 kubeconfig。
  3. 部署 OPA:通过 Helm 或 YAML 将 OPA 部署为准入控制器,配置 ValidatingWebhookConfiguration。
  4. 安装 Terraform:初始化 Terraform 工作目录,配置 Kubernetes 和 OPA Provider。
  5. 初始化 Git 仓库:创建本地仓库,建立 .gitignore 规则,推送初始代码到远程仓库。
常见陷阱: 在 kind 集群中使用 OPA 时,必须确保 OPA 的 Service 与 Webhook 配置中的 clientConfig.service 命名空间一致。如果 OPA 部署在 opa-system 命名空间,Webhook 的 service.namespace 必须同步修改,否则准入请求将无法到达 OPA。

4.5 实验环境目录结构

为保持策略即代码的可维护性,建议采用以下目录结构:

resource-quota-lab/
├── terraform/
│   ├── main.tf              # Kubernetes Provider 与 OPA Provider 配置
│   ├── namespaces.tf        # 命名空间声明
│   ├── quotas.tf            # ResourceQuota 资源定义
│   ├── limits.tf            # LimitRange 资源定义
│   ├── opa-policies.tf      # OPA 策略部署配置
│   ├── variables.tf         # 输入变量
│   └── outputs.tf           # 输出值
├── opa-policies/
│   ├── quota-check.rego     # 资源配额合规策略
│   └── namespace-label.rego # 命名空间标签强制策略
├── k8s-manifests/
│   ├── opa-deployment.yaml  # OPA 部署与 Service
│   └── webhook-config.yaml  # ValidatingWebhookConfiguration
├── scripts/
│   ├── setup-kind.sh        # 一键创建 kind 集群
│   └── test-quota.sh        # 快速验证配额生效
├── .gitignore
└── README.md

该结构将 Terraform 配置、OPA 策略、Kubernetes 原生清单分离,便于不同角色(平台工程师、安全工程师、开发者)聚焦各自关注的目录。

4.6 环境验证清单

完成工具安装后,执行以下命令确认环境就绪:

验证项 命令 预期输出
Docker 运行状态 docker info | grep "Server Version" Server Version: 24.0.x
Kubernetes 集群节点 kubectl get nodes 3 个节点均为 Ready 状态
OPA 部署状态 kubectl get pods -n opa-system opa pod 处于 Running 状态
Terraform 初始化 terraform init Terraform has been successfully initialized!
Git 仓库状态 git status On branch main, nothing to commit