2. 环境准备与工具链搭建
本章聚焦于构建一套可复用的本地实验环境,涵盖容器运行时、编排平台、API 测试工具、性能压测工具以及 Python 隔离环境。所有工具均采用当前稳定版本,并针对授权测试与接口兼容性校验场景进行预配置。
2.1 工具链全景与版本选型
下表列出核心工具及其在课程中的定位,版本号以 2025 年 Q1 稳定版为准:
| 工具 | 版本 | 核心用途 | 授权测试场景 |
|---|---|---|---|
| Docker | 27.x | 容器运行时与镜像管理 | 隔离 JWT 签发服务、OAuth2 模拟器 |
| Kubernetes | 1.30 | 容器编排与服务发现 | 部署 RBAC 策略验证环境 |
| Postman | 11.x | API 请求构造与集合测试 | Token 注入、签名篡改测试 |
| JMeter | 5.6 | 性能压测与并发授权验证 | Token 风暴、限流阈值探测 |
| Python | 3.12 | 脚本编写与虚拟环境 | 自定义签名算法校验脚本 |
版本锁定建议: 课程所有示例均基于上表版本构建。若使用更新的主版本,请关注 Docker Compose V2 弃用通知及 Kubernetes API 版本兼容性变化。
2.2 Docker 安装与核心配置
Docker 是后续所有容器化服务的基础。以下步骤适用于 Ubuntu 22.04/24.04 LTS:
- 卸载旧版本(如有):
sudo apt remove docker docker-engine docker.io containerd runc - 安装依赖:
sudo apt update && sudo apt install ca-certificates curl gnupg lsb-release - 添加官方 GPG 密钥与仓库:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 安装 Docker 引擎与 Compose 插件:
sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin - 验证安装:
sudo docker run hello-world - 非 root 用户执行(安全建议):
sudo usermod -aG docker $USER,然后重新登录。
授权测试前置条件: 后续章节将使用 Docker 运行 Keycloak(OAuth2/OIDC 模拟器)和自建 JWT 签名服务。请确保 Docker 守护进程已启用远程 API 访问(非生产环境):在
/etc/docker/daemon.json 中添加 {"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]},并重启 Docker。
2.3 Kubernetes 本地集群(Minikube)
为降低资源消耗,课程使用 Minikube 搭建单节点 Kubernetes 集群,用于 RBAC 策略验证与授权中间件部署。
# 安装 Minikube(v1.34)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 启动集群(指定驱动为 docker,cri 为 containerd)
minikube start --driver=docker --container-runtime=containerd --cpus=2 --memory=4096
# 安装 kubectl(v1.30)
curl -LO "https://dl.k8s.io/release/v1.30.0/bin/linux/amd64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/
# 验证集群状态
kubectl cluster-info
kubectl get nodes
授权测试专用命名空间: 执行
kubectl create namespace auth-test 创建隔离空间。后续所有 ServiceAccount、RoleBinding 和授权模拟 Pod 均部署在此命名空间内,避免干扰集群默认组件。
2.4 Postman 环境与授权集合导入
Postman 用于构造带授权头的 HTTP 请求,并验证服务端签名校验逻辑。
- 下载与安装:从 Postman 官网 获取 Linux 版本(.tar.gz),解压后运行
./Postman。 - 创建环境变量:在 Postman 中新建环境
Auth-Lab,定义以下变量:
| 变量名 | 初始值 | 说明 |
|---|---|---|
base_url |
http://localhost:8080 |
本地授权服务地址 |
jwt_secret |
lab-secret-key-2025 |
用于签名验证的对称密钥 |
access_token |
{{jwt_token}} |
动态生成的 JWT(通过 Pre-request Script) |
- 导入授权测试集合:课程提供
Auth-Test-Suite.postman_collection.json,包含 Token 伪造、过期重放、签名算法混淆等 12 个测试用例。通过File → Import导入。
Pre-request Script 示例: 在集合级别添加以下脚本,自动生成带自定义 Payload 的 JWT:
pm.environment.set("jwt_token", generateJWT(pm.environment.get("jwt_secret"), {sub: "test-user", role: "admin", exp: Math.floor(Date.now()/1000)+3600}));
2.5 JMeter 压测环境与授权场景模板
JMeter 用于模拟高并发下的授权端点行为,检测 Token 验证性能瓶颈。
# 下载 JMeter 5.6(无 GUI 模式)
wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.tgz
tar -xzf apache-jmeter-5.6.3.tgz -C /opt/
sudo ln -s /opt/apache-jmeter-5.6.3/bin/jmeter /usr/local/bin/jmeter
# 验证安装
jmeter --version
授权测试模板配置:
- 线程组:100 线程,Ramp-up 10 秒,循环 5 次(总计 500 次请求)。
- HTTP 请求默认值:协议
http,服务器localhost,端口8080。 - HTTP 授权管理器:选择
Bearer Token,Token 值引用${__P(access_token,)},通过命令行传入。 - 监听器:添加
聚合报告和查看结果树,重点关注异常率和95% 响应时间。
命令行压测命令:
通过
jmeter -n -t auth-benchmark.jmx -Jaccess_token="eyJhbGciOiJIUzI1NiIs..." -l result.csv -e -o report/通过
-J 参数动态注入 Token,避免硬编码敏感信息。
2.6 Python 虚拟环境与依赖管理
Python 虚拟环境用于隔离课程脚本的依赖,避免与系统 Python 包冲突。
# 安装 Python 3.12 与 venv 模块
sudo apt install python3.12 python3.12-venv python3-pip
# 创建项目虚拟环境
python3.12 -m venv ~/venvs/auth-lab
# 激活环境
source ~/venvs/auth-lab/bin/activate
# 安装核心依赖
pip install --upgrade pip
pip install pyjwt cryptography requests flask
依赖清单(requirements.txt):
pyjwt==2.9.0
cryptography==43.0.0
requests==2.32.3
flask==3.1.0
gunicorn==23.0.0
将上述内容保存为 requirements.txt,后续通过 pip install -r requirements.txt 一键安装。
虚拟环境激活提示: 每次打开新终端执行授权脚本前,务必运行
source ~/venvs/auth-lab/bin/activate。否则可能出现 ModuleNotFoundError。退出环境使用 deactivate 命令。
2.7 工具链集成架构
下图展示各工具在授权测试与接口兼容性校验流程中的协作关系:
2.8 环境验证清单
完成上述安装后,执行以下命令验证所有工具就绪:
| 验证项 | 命令 | 预期输出 |
|---|---|---|
| Docker 运行 | docker ps |
无错误,显示容器列表(可能为空) |
| K8s 集群 | kubectl get nodes |
Ready 状态节点 |
| Postman CLI | postman --version |
版本号 ≥ 11.0 |
| JMeter CLI | jmeter --version |
版本号 5.6.x |
| Python 虚拟环境 | source ~/venvs/auth-lab/bin/activate && python -c "import jwt; print('OK')" |
输出 OK |
快速排障: 若
docker ps 报权限错误,确认当前用户已加入 docker 组并重新登录。若 Minikube 启动失败,尝试 minikube delete && minikube start --driver=docker 重置。