8. AKS 与 Multi-Agent Promotion:分离构建与批准¶
交付阶段: 规划并评审 AKS 生产 Promotion 起点: OpenClaw Forge、第 6 章 GPT-5.6-Sol BYO Runtime,以及第 7 章 Security/Recovery Evidence 可执行实验:
code/07
一切仍然从 OpenClaw 开始¶
OpenClaw 建立最初的 FORMAT-482 Issue-to-Patch 行为。第 6 章改变 Runtime,第 7 章让运维控制可以测量,但业务 Contract 没有改变:
OpenClaw Intake
-> 已批准 Issue 与 Acceptance Criteria
-> Forge Builder
-> Patch Digest + Test-evidence Digest
-> Forge Reviewer
-> Human-reviewed GitOps Change
-> kars on AKS
Multi-Agent Design 不是两个 Prompt 互相聊天,而是 Identity、Tool、Budget、Data 与 Approval Authority 的分离。
运行安全默认路径¶
cd code/07
make test
默认运行不会创建 Azure Resource。它会:
- 确认
code/05BYO Runtime 与code/06Security Guard; - 检查 Microsoft npm、PyPI 与 NuGet Source;
- 运行确定性的 Builder/Reviewer Authorization Test;
- 通过 Host Microsoft Agent Framework
GitHubCopilotAgent调用 GPT-5.6-Sol; - 渲染两个独立的 kars Sandbox 与 Policy;
- 使用 Live kars API Server 执行 Server-side Dry-run;
- 执行官方 kars
up --dry-run; - 证明真实部署必须明确 Opt-in,并提供上游 kars Source Checkout;
- 创建关联 Source Image 与 Policy Digest 的 Promotion Record。
完整 macOS arm64 运行全部通过,且没有创建 Azure Resource。
正确解释指定的 Azure 参数¶
实验使用:
| 参数 | 值 |
|---|---|
| Resource Group | 必填:你的 Azure Resource Group |
| AKS Cluster | 必填:你的 AKS Cluster 名称 |
| ACR | 必填:你的全局唯一 ACR 名称 |
| Log Analytics | 必填:你的 Workspace 名称 |
| Azure Location | 选填:已存在 Resource Group 的 Location,否则 eastus2 |
| Model | gpt-5.6-sol |
| kars Release | v0.1.25 |
| Isolation | enhanced |
请复制
code/07/config/aks.env.example
为 Git Ignore 的 code/07/config/aks.env,并填写全部必填 Azure 参数。教程不会公开真实部署名称,
也不会把真实部署名称作为默认值。
把 Plan-only 作为 Deployment Gate¶
生成的命令是:
kars up \
--name forge-intake \
--model gpt-5.6-sol \
--policy developer \
--region "<your-azure-region>" \
--cluster-name "${AKS_NAME}" \
--resource-group "${AZURE_RESOURCE_GROUP}" \
--isolation enhanced \
--release v0.1.25 \
--mesh-trust anonymous \
--dry-run \
--yes
kars 报告真实运行将检查 Azure Credential,部署 AKS、ACR、Key Vault、Model Infrastructure、Azure Monitor 与 Workload Identity,配置 Firewall 与 ACR Attachment,安装 kars Control Plane,创建 Federated Credential,并等待初始 Sandbox。
Dry-run 证明 Command Resolution 与 Preflight,不证明未来 Cluster 的 Quota、 Capacity、Model Availability、Network Routing 或 Runtime Health。
分离 Builder 与 Reviewer Authority¶
code/07/operations/handoff.py
定义 Digest-pinned Handoff Envelope。测试要求:
- Builder 可以提出 Patch,但不能批准 Release。
- Reviewer 可以评审并批准 Builder Artifact。
- Reviewer 不能修改 Source。
- Reviewer 不能批准 Reviewer 自己产生的 Artifact。
- 错误 Model 或没有固定 Evidence 的请求会被拒绝。
Handoff 只包含 Reference 与 Digest,不包含可复用 Credential 或 Builder 的可写 Workspace。
渲染独立 kars Resource¶
GitOps Template 生成:
| Resource | Builder | Reviewer |
|---|---|---|
KarsSandbox |
forge-builder |
forge-reviewer |
InferencePolicy |
forge-builder-inference |
forge-reviewer-inference |
ToolPolicy |
forge-builder-tools |
forge-reviewer-tools |
| Per-request Token | 2048 | 512 |
| Daily Token | 8192 | 2048 |
| Tool Authority | Read/Search/Patch/Test/Diff | Read Diff/Evidence + Submit Decision |
| Approval Mode | never |
always |
| Trust Threshold | 700 | 800 |
两个 Sandbox 都使用:
runtime.kind: BYO;contractVersion: v1;- GPT-5.6-Sol;
- Enhanced Isolation;
- Read-only Root Filesystem;
- Strict、Default-deny Egress;
- Local Registry Mode。
Live kars CRD 在 Server-side Dry-run 中接受全部六个 Resource。实验没有 Apply, 因此不会创建额外 Local Agent Pod。
把第 7 章 Evidence 带入 Promotion¶
Promotion Record 包含:
- Repository Commit;
- kars Version
0.1.25; - Model
gpt-5.6-sol; - 正在运行的
code/05BYO Image Digest; code/06Loaded Policy Digest;- Target Resource Group、Cluster Name 与 Location;
deployed: false。
Promotion 必须从已知 Runtime 与 Policy Artifact 开始,不能在生产批准过程中重新 构建不可追踪的 Image。
评审 AKS Day-0 Decision¶
移除 --dry-run 前必须决定:
- Azure Location 与区域 Quota/Capacity;
- VNet 与 Address Space;
- API Server Access;
- Azure CNI Overlay 或 VNet-routable Pod IP;
- Cilium/Network Policy;
- Static Egress Gateway、Firewall 或 NVA;
- Workload Identity 与 Key Vault Integration;
- System/User Node Pool、Zone 与 VM Size;
- Confidential Isolation Requirement。
这些是 Day-0 Decision,因为其中部分变更需要重建 Cluster。生产设计默认优先 Azure CNI Overlay + Cilium、Workload Identity、Multi-zone 和非 Burstable VM Family,除非环境存在明确记录的限制。
本实验由 kars 管理 Infrastructure Workflow。部署后必须检查实际 AKS Configuration,不能根据成功的 CLI Dry-run 推断每个 Network Property 都已验证。
规划 Day-1 Operation¶
缺少以下内容时,AKS Deployment 仍不完整:
- External Router Audit Export,因为第 7 章已证明 Pod 替换后 Local History 会 Reset;
- Managed Prometheus、Container Insights、Grafana 与 Control-plane Diagnostic Log;
- Maintenance Window 与 Staged Upgrade/Rollback;
- Image Signing 与 Digest Pinning;
- GitOps 对 Production Field 的 Ownership;
- Post-deployment Allow/Denial Test;
- Replicated Service 的 Pod Disruption Budget 与 Topology Spread;
- 使用 Compiled/Loaded Digest 验证 Policy Rollout。
只通过明确 Opt-in 部署¶
先评审 Plan、渲染后的 Resource、Quota 与 Cost:
cd code/07
cp config/aks.env.example config/aks.env
设置:
DEPLOY_AKS=true
然后:
make deploy
如果 Switch 不严格等于 true,脚本会拒绝执行。真实部署使用 Azure CLI,而
不是非 Dry-run kars up,因为 kars 0.1.25 会在请求名称后追加 -aks。
脚本创建 AKS_NAME 指定的准确名称,通过 ACR Tasks 和
--platform linux/amd64 构建 BYO Image,解析其 Digest,安装 kars 与 AGT,
并应用经过评审的 Resource。
Repository 不会写入 Subscription ID 或 Credential。
已验证的 Azure 部署¶
真实部署已在配置的 Azure 环境完成:
- 配置的 AKS Cluster 状态为
Succeeded,使用 Azure CNI Overlay 与 Cilium。 - OIDC Issuer 与 Workload Identity 已启用。
- 单 Node
systemPool 使用Standard_D2as_v5,单 Nodeclawpool使用Standard_D4as_v5;两个 Node 均报告amd64。 - kars Controller 与 AGT Registry/Relay 均已 Ready。
- OpenClaw Intake、Builder 与 Reviewer Sandbox 均为 Running。
- Builder 与 Reviewer 使用相同的、按 SHA-256 Digest 固定的 ACR Image。
- 真实
gpt-5.6-sol请求返回KARS_BYO_GPT_5_6_SOL_OK FORMAT-482 STOP_FOR_HUMAN_REVIEW。 - Router Audit Chain、Agent Credential Isolation 和 BYO Agent Exec Denial 测试全部通过。
不夸大 Mesh 或 A2A¶
kars 0.1.25 提供 mesh、pair 与 a2a CLI Surface,当前上游 Blueprint
也记录 Federation。本实验有意使用 registryMode: local 和 Reviewed
Application Handoff Contract。
实验不会声称已执行 Cross-cluster Pairing、Entra Mesh Trust、Public A2A、 Encrypted Relay、Token Expiry、Replay Defense 或 Dual-cluster Audit。这些能力 需要两个独立 Trust Domain 和明确的 Negative Test。
平台支持¶
部署命令从 macOS arm64 执行,但 ACR Tasks 明确把 Workload 构建为 Linux
amd64,而且两个 AKS Node 均报告 amd64。macOS amd64 与 Linux amd64 使用
相同脚本。Windows amd64 请在 Ubuntu WSL2 内运行,启用 Docker Desktop WSL
Integration,并把全部 CLI 安装在 WSL2 内。
完成定义¶
只有当 OpenClaw Requirement 仍可追踪、Builder 无法 Self-approve、Reviewer 不能编辑 Source、Runtime 与 Policy Artifact 均按 Digest 固定、AKS Day-0 Choice 已评审、GitOps Resource 通过 Admission、External Audit 与 Rollback 已准备,并且 Post-deployment Test 证明一条允许 Workflow 与一条被拒绝的 Authority Violation 时,AKS Promotion 才算 Ready。
官方参考¶
- kars Getting Started
- Enterprise Self-hosted Blueprint
- Cross-org Federation Blueprint
- kars CRD Reference
- Microsoft Agent Framework GitHub Copilot Samples
- Microsoft Agent Framework Build Your Own Claw
- Azure CNI Overlay
Sandbox Escape 检查点:传递 Digest,而不是可变 Workspace¶
AKS Promotion 阶段在 Patch 与 Test Digest 之外增加 Artifact Manifest Digest。
code/07 会拒绝未固定的 Envelope,并验证 Builder 与 Reviewer 都使用 Strict
Egress、临时可写路径,且没有 Shell、Docker、Exec 或 Settings Capability。
KARS 把每个角色变成独立的 Governed Workload。相比一个 Multi-role Agent,它允许 Builder 与 Reviewer 使用不同 Identity、Tool、Budget、Egress 与 Lifecycle,并可从 Kubernetes State 验证。
cd code/07
make unit
make validate
Reviewer 验证的是不可变声明,不会继承 Builder Workspace 中潜在的 Hook 与配置。