@mcpg / pulumi
用于在Kubernetes上运行MCPG的固执己见的Pulumi组件:操作器,组件
crd、集群信任、网关、插件集、路由和租户。每个组件
包含了平台中容易出现微妙错误的部分——CRD生命周期,
网关配置形状,租户隔离——在类型化TypeScript输入之后。
建立在 @mcpg/pulumi-crds (生成的、键入的CRD SDK)和
@pulumi/kubernetes.
当您的MCPG部署在Pulumi程序中时,您可以使用它 与其集合Helm,不如表达“一个经营者,一个门户,三个租户” 手工发布和原始自定义资源。
先决条件
- 使用TypeScript运行时的Pulumi,以及为其配置的Kubernetes提供程序 目标集群。
- 集群中的Cert-manager,除非您将其关闭。操作者的入场
webhook关闭失败,需要真正的TLS,所以
Operator集合certManager.enabled=true默认情况下。
快速启动
import { McpgStack } from "@mcpg/pulumi";
new McpgStack("prod", {
operator: { chartVersion: "<chart-version>" },
gateway: {
image: { repository: "ghcr.io/mcpg-dev/source-code/gateway", tag: "<tag>" },
governance: { audit: { sinks: [{ kind: "dev.mcpg.builtin.audit.local-file" }] } },
},
});
McpgStack 构成常见的大小写:an Operator,一个 TrustBootstrap 播种
集群默认的吊销列表(设置为 trust: false 跳过它),和- when
gateway 给定- 1 Gateway 在操作符的命名空间中。两者都是
后者取决于首先安装的操作器。
这个包是从这个工作区构建的:
pnpm --filter ./iac/pulumi/components run build # tsc → bin/
pnpm --filter ./iac/pulumi/components exec tsc -b --noEmit # tsc --noEmit
组件
| 组件 | 创建 |
|---|---|
Operator | 作业者Helm释放和crd作为一级资源。 |
Gateway | 一个 MCPGGateway, spec.config 由配置构建器组装。 |
PluginSet | 一个 MCPGPluginSet -插件条目和可选的能力授予。 |
TrustBootstrap | 的cluster-default MCPGRevocationList,并携带签名密钥引用。 |
Cluster | 一个 MCPGCluster -网关的协调后端 clusterRef 点。 |
Route | 一个 MCPGRoute —绑定到具有身份、策略和审计链的共享网关的工具子集。 |
TenantCR | 一个 MCPGTenant -声明式租户治理。 |
Tenant | 具有隔离的名称空间,以及可选的插件集和网关。 |
McpgStack | 运营商+信任+一个网关。 |
操作人员和CRD生命周期
Helm将文件安装在图表的 crds/ 一次目录,永不目录
升级或删除它们。 Operator 通过将crd应用为
ConfigGroup 它拥有-服务器端应用,像任何其他资源一样升级-
并让图表退后 skipCrds 加上 crd.install=false.
crdsDir 指向CRD YAMLs(默认) ../../codegen/schemas/v1alpha1/crds,
从Pulumi程序的目录中解析)。
release默认为namespace mcpg-system、图表 mcpg-operator 从
ociChartRepo(),并启用cert-manager。集 watchNamespace 来限制
操作符到单个命名空间。任何 values 分布在这些地方
默认,因此您提供的键将替换相应的默认块。
ociChartRepo() 组成 oci://<base>/charts 从注册表坐标中
src/oci.ts,其默认值反映了 tools/release/oci-registry.json. 覆盖
一张图表 chartRepo,或者一整堆 MCPG_OCI_HOST /
MCPG_OCI_NAMESPACE / MCPG_OCI_PATH -相同的环境合同壳
和Node发布helper荣誉。 ociImageRepo(name) 和 ociPluginRegistry()
在相同的基础上组合图像和插件引用。
网关准备
Gateway 对资源进行注释 pulumi.com/waitFor: condition=Ready,所以
pulumi up 等待报告网关就绪的操作员,而不是等待
自定义资源仅存在。通过 waitForReady: false 跳过等待。
租赁:两个不同的东西
Tenant 是命令式扇形输出(它创建名称空间),还是默认拒绝
跨租户入口 NetworkPolicy (除非 networkPolicy: false),
可选的插件集和其中的网关。在循环中实例化它
建立一支舰队。它 不 创建一个 MCPGTenant,所以它不参与
运营商的租户治理。
TenantCR 创建 MCPGTenant 自定义资源:插件allowlist,
每个命名空间配额、副本上限和独占的命名空间所有权
操作员在入场时强制执行。在必须强制执行租户边界时使用它
而不是仅仅安排,在旁边或代替 Tenant.
集群凭证
Cluster 接受 credentialRefs 命名已存在的秘密,以及
credentials,其中一项载有 data 使组件创建
的秘密 operatorNamespace (默认 mcpg-system),并为
你。两种形式表面的网关 cred://cluster/<name>.
TrustBootstrap 以同样的方式接受签名密钥秘密引用:只有
参考传递,而不是密钥字节,所以没有签名材料到达Pulumi
状态。
配置
Gateway 建立门户的 spec.config 从输入部分。操作员
将文档原封不动地传递出去,网关严格解析它
未知键是一个启动时错误,这使得形状值得纠正。
import { Gateway } from "@mcpg/pulumi";
new Gateway("orders", {
namespace: "mcpg-system",
image: { repository: "ghcr.io/mcpg-dev/source-code/gateway", tag: "<tag>" },
server: { bind_address: "0.0.0.0:8080" },
governance: { audit: { sinks: [{ kind: "dev.mcpg.builtin.audit.local-file" }] } },
plugins: [
{ id: "dev.mcpg.backend.sql", source: { oci: "ghcr.io/mcpg-dev/source-code/plugins/backend-sql:protocol-1" } },
],
extraConfig: { mcp: { capabilities: { tools: [] } } },
});
| 场 | 类型 | 默认的 | 描述 |
|---|---|---|---|
server | 对象 | 省略了 | 在发出 config.gateway.server,在 gateway: 伞——顶层 server 密钥被网关解析器拒绝。 |
governance | 对象 | 省略了 | 在发出 config.governance. 审计接收器是一个列表(audit.sinks[]),而不是标量。 |
observability | 对象 | 省略了 | 在发出 config.observability. |
mcp | 对象 | 省略了 | 在发出 config.mcp. |
plugins | 数组 | 省略了 | 在发出 config.plugins,且仅当非空时。每个条目都包含 id 和一个 source 声明其中之一 path 或者 oci;每个条目的切换是 disabled,而不是 enabled. |
extraConfig | 对象 | {} | 任意配置片段最后合并,因此其顶级键获胜。用于类型化部分未涵盖的任何内容的逃生舱口。 |
同样的最后获胜规则也适用于上一层: extraSpec 在 Gateway 合并
在组装的上面 spec,在键入的直通块之后
(acceptedRouteNamespaces, podAnnotations, podLabels, resources,
service, ingress, autoscaling, monitoring, networkPolicy,
podDisruptionBudget, workloadIdentity, scheduling, probes,
imagePullSecrets)。
配置构建器的语义由不需要的单元测试覆盖 Node本身之外的依赖:
pnpm --filter ./iac/pulumi/components run build
node --test iac/pulumi/components/bin/config.test.js
执照
apache - 2.0。
看到也
- https://mcpg.dev/docs/self-hosting/pulumi -使用Pulumi部署MCPG。
- https://mcpg.dev/docs/reference/operator-crds -自定义资源这些 创建组件。
- https://mcpg.dev/docs/reference/configuration -完整的网关
后面的配置模式
spec.config. iac/pulumi/crds(键入的CRD SDK)和iac/pulumi/policy(CrossGuard 策略包,在预览时验证这些资源)。