面向平台构建者

在一个控制平面上运行多个客户

如果您为其他人托管应用程序——无论是作为托管服务提供商、MSP,还是负责维护客户系统运行的代理机构——您都需要Kubernetes命名空间文档中明确说明不具备的功能:一个可以写入合同的租户边界。本页将介绍此处该边界的构成,并像本网站其他部分一样,为每一项声明引用代码。

构建与购买的权衡分析,以展示而非断言的方式呈现

每家平台公司都会面临同样的抉择:构建编排层,还是集成一个。我们不会引用无法向您展示的行业研究。以下是唯一一个属于我们的数据,以及它的来源。

我们自己的定价分析将一位专注于 Kubernetes 的 DevOps工程师定位为 年薪 150,000 美元——这是我们内部比较各层级与替代方案时使用的数字,这是我们做出的估算,而非我们进行的薪资调查。由此进行的算术运算请使用您自己的数字进行:

1
工程师,根据我们自己15万美元的估算,在您平台上还没有一个客户之前
0
需要编排工程师才能将客户部署到 Odysseus 上
6
以下为多租户原语,每一项都是您原本需要自行构建的功能

我们在此页面上不公布合作伙伴价格,这是有意为之:我们宁愿告诉您尚未设定价格,也不愿凭空编造一个数字来填充空间。转售安排的成本取决于您运行的节点数量以及您希望如何计费,这需要进一步沟通。

多租户,逐原语解析

六项您本需自行构建的功能。每一项都链接到其在源代码中的位置,以便您核实而非仅凭信任。

租户层级结构,包含子组织

租户可以拥有父级。这仅需一个字段 —— ParentTenantID —— 整个层级结构均基于此:在父级下创建子组织、列出父级的子项、沿链向上查找根节点,以及拒绝跨越不应跨越分支的操作。如果您向那些自身拥有部门、子公司或客户账户的公司进行转售,该结构已存在。

按子组织进行合并或独立计费

每个子组织的创建方式可以是 consolidated(由父级为其计费)或 separate(由其自身独立计费)。这是租户上的一个经过验证的字段,而非电子表格中的约定,且当调用方未指定时,默认为 consolidated。这便是以您自己的发票进行转售与引入直接付款客户之间的区别 —— 您可以在同一资源集中同时进行这两种操作。

强制执行而非仅作宣传的配额

租户对其可拥有的部署数量、容器数量以及每个部署的副本数量都有限制。这些限制在输入时即进行验证:负值限制会被拒绝,容器上限低于部署上限也会被拒绝,因为这描述了一个不可能存在的资源组合。一个无法强制执行的免费套餐,就是一个会让你亏钱的免费套餐。

每个租户一个 Docker 网络

租户网络以租户自身的标识符命名,无论租户是否主动申请,都会获得一个默认网络。同一节点上的两个客户不会意外共享网段,因为根本不存在任何代码路径使它们能够共享。

数据库中的行级安全,采用失败关闭策略

审计存储中的租户隔离由Postgres本身强制执行,而非依赖于某个必须由人记住编写的 WHERE 子句。策略是失败即关闭——未设置租户的连接将看不到任何内容,而非看到所有内容——并且存在一个专门的测试套件,用于尝试跨边界读取并确保其失败。

每个租户一个 WireGuard 网格,支持三种拓扑结构

每个租户的节点通过其自身的加密网格连接,可配置为全网格、部分网格或星型拓扑。星型拓扑要求您指定中心节点——没有中心节点的星型网格会被拒绝,而不是静默降级为其他拓扑。对于拥有一个中心站点和多个客户边缘站点的提供商而言,第三种拓扑才是关键。

为何此为租户边界而非命名空间

Kubernetes 自己的文档指出其命名空间并非安全边界。这不是我们对他人产品的评价,而是他们自己的说法,这也正是为什么一个基于命名空间构建的平台最终需要承载第二层隔离层,而这层隔离需要有人去构建并维护。

这里的边界是租户,它由上述六点同时构成:独立的网络、独立的 Vault 路径、独立的键值空间、采用失败关闭策略的数据库策略,以及每个租户独立的网格。我们能提供的证据是我们自己的:九个专门的隔离测试套件,其目的是尝试跨租户访问并被拒绝;以及一次安全审计,其 184 项发现及其修复措施已 完整发布,而非仅作摘要。

以证据而非承诺说话

本网站上的四个页面存在,是为了让上述声明可以被核实,而非仅被接受:

您的客户数据存放之处

节点属于租户。您的客户的工作负载、卷和数据存放在您或他们控制的服务器上,这些服务器位于其所在的任何司法管辖区——控制平面仅保存编排状态,而非应用数据。对于向有数据驻留要求的市场销售产品的提供商而言,这是一种有用的安排:“我的数据在哪里”的答案是“您放置它的地方”,并且这不取决于我们所在的位置。

地理放置强制执行——将工作负载固定到您自己集群内的国家或地区——可用但默认关闭。我们宁愿这样说,也不愿暗示它已启用。

与我们联系

如果您正在此基础上构建平台,下一步是就节点数量、计费模式以及您的客户会要求您证明的内容进行沟通。请发送邮件至 sales@delta-telematics.ca。

如何验证这些声明

  1. 租户层级结构与子组织。

    该字段位于 internal/types/types.go:100 中的 ParentTenantID。在父级下创建、列出父级的子级、遍历到根节点以及跨分支拒绝的相关逻辑位于 pkg/api/tenant_api.go 的第800行、第881行、第931–935行、第959行和第1018–1027行。

  2. 合并或分开计费。

    BillingMode 及其两个值在 internal/types/types.go:74–78 中定义;该字段在 pkg/api/tenant_api.go:717 和 780–801 中被接受、验证并默认为合并。

  3. 配额。

    拒绝负数限制的验证,以及拒绝容器上限低于部署上限的验证,分别位于 internal/types/validation.go:296 和 :329。租户启动时的默认值在 internal/types/tenant_quota_test.go:20 中断言。

  4. 每个租户的 Docker 网络。

    buildTenantNetworkName 在 pkg/docker/client.go:1647 处根据租户标识符派生名称;GetDefaultTenantNetworkName 在 :1698 处是租户无需请求即拥有一个的原因。

  5. 行级安全。

    策略位于 audit-postgres/init/05-row-level-security.sql。尝试跨边界读取并预期失败的测试套件是 pkg/audit/postgres_rls_test.go。

  6. WireGuard 网格及其三种拓扑结构。

    模式、拒绝未指定中心的星型配置以及网格构建均在 pkg/wireguard/mesh.go 的第 41–54 行和第 221–276 行。

  7. 价值15万美元的工程师。

    该数字来自我们自己的文档,marketing/Odysseus_Pricing_Strategy_v2.md §10.6,其中用于将我们的层级与招聘成本进行比较。这是我们的估算,而非调查结果,并且在此处作为估算呈现,因为它就是估算。我们故意没有发布内部定位工作中引用的更广泛的行业范围:该文档不在构建此站点的仓库中,因此我们无法向您展示来源,而本页上一个我们无法展示来源的数字将是其最薄弱的部分。

  8. 未声明的内容。

    本页无合作伙伴价格,因为尚未设置合作伙伴价格。多云语句提及两个云,是因为我们测试并验证了两个云——代码中检查了第三个云但未找到,且 多云页面以相同措辞说明了这一点。地理放置强制功能被描述为可用且默认关闭,因为这是其当前状态。

  9. 关于 Kubernetes 命名空间的陈述。

    这是 Kubernetes 自身对其命名空间的文档,并非我们对他人产品的描述。旁边提及的隔离测试套件和 184 项发现的审计是我们的,审计报告全文发布在 安全审计页面。

  10. 所有代码引用均于2026年8月24日针对此仓库进行了验证。行号会变动;标识符不会,且每一个都可通过grep搜索。