多租户与隔离
共享平台的失败通常发生在两个极端。要么隔离是一种约定——一种所有人都承诺遵守的命名方案——而一个错误的请求会读取或覆盖别人的工作;要么隔离是为每个租户提供独立安装,平台的成本会随租户数量倍增。
约定会悄无声息地失败。一个忘记其过滤器的列表端点会返回每个租户的记录,并且看起来与正常工作的列表端点一模一样。
平台如何解决此问题
Section titled “平台如何解决此问题”平台存储的每条记录都写入其所属的租户下,读写这些记录的客户端将租户作为参数而非选项来传递。一个未指定租户的读取操作不会返回所有内容;它根本无法编译。
该边界涵盖所有内容,而不仅仅是部署:节点、网络、密钥、任务、计划及其运行历史记录都恰好属于一个租户。放置也受相同规则约束——一个租户的部署只能放置在该租户拥有的节点上。
凭证也跟随租户。密钥通过路径引用,从不包含在描述中,并且该路径在分派时会在所属租户自己的存储中解析。两个租户可以使用完全相同的路径,而永远不会看到彼此的材料。
名称是限定范围的,而非全局的。两个租户都可以运行名为 api 的部署,并且彼此都无法访问对方的。
Not this
本页内容与用户账户、角色或登录无关。主体在租户内的权限——谁可以构建,谁可以运行——是一个具有自身词汇的独立模型。
它也没有描述容器之间的网络级隔离,这是部署所加入的网络的属性,而非多租户的属性。
