Terrapod

Terrapod #

Terrapod 是一个免费、开源、自托管的 TACOS(Terraform Automation and Collaboration Software)平台,定位为 Terraform Enterprise / Terraform Cloud 的开源替代品。 它不是 Terraform 或 OpenTofu 的 fork,而是它们的编排层——将 CLI 工具升级为团队级基础设施管理平台。

属性说明
定位Terraform Enterprise / HCP Terraform 的开源替代
协议MPL-2.0(与 OpenTofu 相同,文件级 copyleft,内部使用无披露义务)
技术栈FastAPI (Python) + Next.js (前端) + PostgreSQL + Redis + Go (工具链)
部署方式Helm Chart on Kubernetes(单节点 k3s 即可启动)
支持引擎Terraform、OpenTofu(推荐)、Terragrunt
仓库github.com/mattrobinsonsre/terrapod

核心架构 #

┌─────────────────────────────────────────────────────────┐
│                  Browser / CLI                          │
└──────────────────────┬──────────────────────────────────┘
                       │ HTTPS
                       ▼
┌─────────────────────────────────────────────────────────┐
│              Terrapod 控制平面                            │
│                                                          │
│  ┌──────────────┐     ┌──────────────────────────────┐  │
│  │  Next.js BFF │────▶│  FastAPI API                  │  │
│  │  (Web UI +   │     │  (多副本,无 leader election)  │  │
│  │   反向代理)   │     │                              │  │
│  └──────────────┘     └──────────────────────────────┘  │
│                            │    │    │                   │
└────────────────────────────┼────┼────┼───────────────────┘
                             │    │    │
              ┌──────────────┘    │    └──────────────┐
              ▼                   ▼                    ▼
     ┌──────────────┐  ┌──────────────┐  ┌──────────────────┐
     │  PostgreSQL   │  │    Redis     │  │  Object Storage  │
     │  (状态+元数据) │  │ (会话/锁/事件)│  │ (状态/计划/日志)  │
     └──────────────┘  └──────────────┘  └──────────────────┘
              ▲
              │ 数据不离开你的边界
              │
┌─────────────┴───────────────────────────────────────────┐
│              执行集群(可在任意网络)                       │
│                                                          │
│  ┌────────────────┐     ┌────────────────────────────┐  │
│  │ Runner Listener │────▶│  临时 K8s Job              │  │
│  │ (出站 SSE 连接)  │     │  (terraform / tofu 执行)   │  │
│  └────────────────┘     └────────────────────────────┘  │
│                                                          │
│  执行集群 → 控制平面(出站),控制平面 ✗ → 执行集群         │
└──────────────────────────────────────────────────────────┘

关键设计

  • BFF 模式:Next.js 前端是唯一入口,浏览器不直接访问 API
  • ARC 模式执行:Runner 按需创建 Job(类似 GitHub Actions Runner Controller)
  • 出站优先:Runner 通过出站 SSE 连接控制平面,无需入站网络——适合隔离 VPC、跨区域、本地数据中心
  • 单组织设计:每个实例一个组织(default),需要多租户则部署多个实例

核心功能 #

平台基础 #

功能说明
Workspace隔离状态、变量和运行
远程状态版本化状态,支持锁和回滚,静态加密,可选 BYOK 信封加密
CLI 驱动运行terraform / tofu plan/apply 通过 cloud 后端
Agent 执行服务端 plan/apply,运行在临时 K8s Job 上
Agent Pool命名的 Runner 监听组,join-token → 证书交换认证
Run Triggers跨 Workspace 依赖链——源 apply 触发下游运行
条件自动 Apply仅在安全范围内(仅新增/原地更新)自动 apply,销毁或替换资源则需人工审批
Workspace 恢复删除后保留状态,管理员可在保留窗口内恢复到新 Workspace
过期计划守卫状态漂移 + 可选时间过期自动丢弃过期 plan

治理与安全 #

功能说明
标签 RBACresource:verb 细粒度能力(如 run:planrun:apply
策略即代码 (OPA)Rego 策略在 plan JSON 上执行,支持建议/强制模式,按标签范围绑定 Workspace
安全扫描Checkov/Trivy 扫描 plan JSON,可按 Workspace 配置 off/advisory/enforced
SSOOIDC / SAML(Auth0、Okta、Azure AD 等)
审计日志不可篡改的事件日志,可配置保留期
零静态凭证通过 K8s 工作负载身份(AWS IRSA / GCP WIF / Azure WI)动态获取云凭证
供应链验证缓存的二进制/Provider 通过 GPG 签名 SHA256SUMS 验证;Runner 执行前再次验证

注册表与缓存 #

功能说明
私有模块注册表发布、版本管理、内部分享模块
私有 Provider 注册表发布、版本管理、GPG 签名、网络镜像缓存
二进制缓存terraform / tofu / terragrunt CLI 二进制文件的拉穿缓存
缓存预热管理员端点 + UI 面板批量预热缓存(适合受限网络)
密封模式空气隔离开关,确保不从上游获取任何内容
OCI 容器注册表内置 OCI 注册表,Runner 镜像与状态/模块/Provider 同一边界
包代理PyPI / npm 代理,Runner 无需访问公网即可解析依赖

AI(可选,默认关闭) #

功能说明
AI Plan 审查LLM 变更摘要 + 风险评估 + 失败分析 + 对话式查询(通过 LiteLLM 支持多 Provider)
AI 架构评审基于最新状态对 Workspace 部署架构进行可靠性/安全/成本/运维/可扩展性评审
MCP Server通过 Model Context Protocol 驱动 Terrapod(Claude、Cursor 等 AI 助手)

快速体验 #

# 一键启动(创建本地 kind/k3d 集群 + 安装 Terrapod)
make eval
# → 打开 http://localhost:8080  (登录: admin / terrapod)

# 清理
make eval-down

前提:Docker、kubectl、helm、kind 或 k3d


生产部署 #

前提 #

  • Kubernetes 集群(1.27+),单节点 k3s 即可
  • Helm 3.x
  • 外部 PostgreSQL 14+ 和 Redis 7+(生产环境不建议用内置的)

Helm 部署 #

helm install terrapod oci://ghcr.io/mattrobinsonsre/terrapod \
  --namespace terrapod --create-namespace \
  --set ingress.enabled=true \
  --set ingress.hostname="terrapod.example.com" \
  --set ingress.className=traefik \
  --set postgresql.url="postgresql+asyncpg://terrapod:PASSWORD@PGHOST:5432/terrapod" \
  --set redis.url="redis://REDISHOST:6379" \
  --set bootstrap.adminEmail="admin@example.com" \
  --set bootstrap.adminPassword="change-me-now"

配置 OpenTofu / Terraform #

# main.tf — 只需将 cloud block 指向 Terrapod
terraform {
  cloud {
    hostname     = "terrapod.example.com"
    organization = "default"

    workspaces {
      name = "my-first-workspace"
    }
  }
}
# 登录并执行
tofu login terrapod.example.com
tofu init
tofu plan
tofu apply

💡 零代码迁移:现有 cloud block 只需改 hostname 指向 Terrapod,CLI 和 CI/CD 通常无需其他改动。


与 Terraform Enterprise / HCP Terraform 对比 #

维度HCP Terraform / TFETerrapod
托管厂商 SaaS 或自管理分发自托管在自有 K8s
许可专有(BUSL),按管理资源计费免费开源(MPL-2.0)
状态/密钥位置在厂商/自管理控制平面不离开你的边界(你的 Postgres + 对象存储)
云凭证厂商存储或动态K8s 工作负载身份(IRSA/WIF/WI),无长期凭证
策略引擎Sentinel(专有)OPA / Rego(开源)
受限网络/空气隔离依赖 SaaS原生支持——出站 Runner、轮询 VCS、拉穿镜像 + 密封缓存模式
多组织支持单组织设计(每租户一个实例)
CLI 后端 API完整 TFE V2TFE V2 的 CLI 消费子集

与同类开源方案对比 #

项目定位与 Terrapod 的关系
Terrakube开源 TFC/TFE 替代(Java/Spring Boot + Angular)最接近的同类——功能范围相当,社区更成熟(Apache-2.0),支持多组织
AtlantisPR 驱动 plan/apply 自动化专注 PR 工作流,需自行搭建状态/RBAC/策略等管理平面
DiggerCI 原生 Terraform 编排在现有 CI 内运行,刻意不维护独立执行引擎
TerrateamGitHub 集成 TF 自动化GitHub 专注,开源核心 + 付费层
Spacelift商业 TF 管理平台厂商支持,Multi-IaC

Terrapod vs Terrakube(两个最接近的开源方案) #

维度TerrapodTerrakube
语言Python + Next.jsJava + Angular
许可MPL-2.0Apache-2.0
组织模型单组织(每租户一实例)多组织 + 团队
网络隔离出站 Runner + 轮询 VCS + 密封缓存控制平面协调执行器
VCS 集成Webhook + 出站轮询(默认)Webhook 投递
Provider 缓存拉穿镜像 + 二进制缓存本地插件缓存
MonorepoAtlantis 风格自动发现目录过滤
AI内置 Plan 摘要/评审/对话通过外部 MCP 服务器集成
Terragrunt原生支持(per-workspace 开关)支持
成熟度较新,小核心团队更长记录,更大社区

高可用与生产特性 #

特性说明
三平面 HA控制平面(多副本无 leader election)、执行平面(Agent Pool 集合自动容灾)、数据平面(warm/follower 对,人工 DNS 切换)
跨区域/跨云每个节点拥有独立数据库和对象存储,支持 S3↔Azure Blob↔GCS↔本地
水平扩展无状态 API 副本 + SELECT ... FOR UPDATE SKIP LOCKED 调度
供应链安全cosign 无密钥签名 + SBOM (SPDX) + SLSA 构建来源
安全加固所有 Pod 非 root、只读根文件系统、丢弃所有 capabilities、seccomp profile
备份与 DR可选 pg_dump 备份 CronJob + DR 演练 + 对象存储直接恢复
可逆升级每个 schema 迁移都有 upgrade()/downgrade(),版本升级可审计可回滚
迁移工具terrapod-migrate:从 TFE / HCP / Atlantis 迁移,dry-run-first,可回滚

Terraform Provider #

Terrapod 提供自己的 Terraform Provider——用 Terraform 管理 Terrapod 本身

# 25 个资源 + 9 个数据源
resource "terrapod_workspace" "example" {
  name = "my-workspace"
}

resource "terrapod_variable" "aws_region" {
  workspace_id = terrapod_workspace.example.id
  key          = "AWS_REGION"
  value        = "cn-hangzhou"
  sensitive    = false
}

resource "terrapod_role" "viewer" {
  name = "viewer"
  capabilities = ["workspace:read", "run:plan"]
}

支持的资源:terrapod_workspaceterrapod_variableterrapod_roleterrapod_vcs_connectionterrapod_agent_poolterrapod_run_taskterrapod_catalog_itemterrapod_execution_hook 等。


学习路线 #

1. 快速体验(30 分钟)
   └─ make eval → 浏览 UI → 查看示例 Workspace 和 Run

2. 部署到测试集群(1 小时)
   └─ k3s/kind + Helm 部署 → 创建 Workspace → 配置 cloud block → plan/apply

3. 深入功能(1-2 天)
   └─ RBAC 配置 → OPA 策略 → 安全扫描 → 漂移检测 → 通知集成

4. 生产就绪(1 周)
   └─ 外部 Postgres/Redis → SSO → 对象存储 → HA 部署 → 迁移工具

5. 高级特性
   └─ 空气隔离部署 → AI 审查层 → 自定义执行钩子 → Provider 开发

Reference #