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 整体架构图
下图展示了实验环境中各组件之间的数据流与依赖关系。箭头方向代表配置下发或请求转发的方向。
4.4 环境搭建流程概览
按照以下顺序搭建实验环境,可最大限度减少依赖冲突:
- 安装 Docker:配置镜像加速器,验证
docker run hello-world正常。 - 创建 Kubernetes 集群:使用 kind 创建包含 1 个控制平面 + 2 个工作节点的集群,配置 kubeconfig。
- 部署 OPA:通过 Helm 或 YAML 将 OPA 部署为准入控制器,配置 ValidatingWebhookConfiguration。
- 安装 Terraform:初始化 Terraform 工作目录,配置 Kubernetes 和 OPA Provider。
- 初始化 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 |