问题描述
在尝试使用 prefect server config
生成的 Docker Compose 文件设置 Prefect 0.14.15 以便跨多个代理执行 Flow 时,我惊讶地发现 Prefect 的服务器需要租户才能连接代理.我进行了调查,发现 Prefect 的文档提供了有关其 create-tenant 和 list-tenants CLI 操作的使用语法的信息。但是,我已经广泛浏览了链接页面——以及其他 Prefect 的文档和随附的教程——是否有任何提及租户的内容,但只找到了 the following 简短提及:
经过身份验证后,基于用户的 API 密钥可用于为用户所属的任何租户生成短期 JWT 身份验证令牌。这些 API 密钥继承用户在该租户中拥有的任何权限,允许完全 API 访问。
Prefect 中的租户究竟是什么?它似乎不是 Prefect 的 Hybrid Execution model 特有的。那么,它如何在执行 Prefect Flow 之前和期间适应服务器、代理和客户端之间的交互?说用户“属于”或“属于”租户是什么意思?要求它向服务器注册代理可以完成什么?
解决方法
租户在 Prefect Server 中的意义远不及 Prefect Cloud,但由于 Cloud 是建立在开源服务器代码上的,所以这个想法一直存在。
租户是所有其他对象所在的顶级对象。租户中的用户无法访问另一个租户中的任何内容。在 Cloud 中,严格执行此权限以限制用户访问的范围。在 Server 中,您只需要一个租户即可开始使用系统,因为大多数对象将链接回租户。通常,如果您使用 Prefect CLI prefect server start
或您可以在 Prefect Server Helm 图表中切换自动创建,则会在启动期间为您创建默认租户。
当代理在服务器上注册时,我们将有关该代理的详细信息存储在数据库的“代理”表中。在服务器中,您的代理与默认租户相关联。在 Cloud 中,您的代理与用于启动代理的 API 密钥所属的租户相关联。
当您运行流时,客户端必须与服务器通信以报告流的状态。与代理一样,此流程运行与租户相关联。在 Cloud 中,这会继承代理的 API Key。在 Server 中,我们将继续使用默认租户。
tldr;租户是用户所属的 Prefect Cloud Teams 的基础,用于授予权限。在 Prefect Server 中,您只需要拥有一个;创建它并忘记它(或使用我们为您创建它的标准工具)。