Athena,助手
操作一个平台意味着知道要调用数百个地址中的哪一个,以什么顺序,以及使用什么请求体。这些知识大部分都无趣:它只是询问一个简单问题(如“为什么这个部署正在重启”)的代价。Athena 是问题即输入的界面。
Athena 是两个服务,这种分离就是其整体设计。
助手持有对话。它与模型提供者通信,维护会话,并决定尝试哪些操作。它自己从不调用控制平面。
工具服务器是唯一执行此操作的组件。它发布一组固定的命名操作——deployment_list、container_logs 和 sre_incidents 是其中三个——每个操作都有声明的输入形状和必需的权限,并将调用转换为对控制平面自身 API 的请求。助手对平台所能做的一切,都是通过这些命名操作中的一个,在一个租户内,并在权限检查之后执行的。
其结果是,助手的判断决定了尝试什么,仅此而已。它无法访问没有工具命名的地址,也无法超越租户主体不具有的权限。
请求如何流转
Section titled “请求如何流转”用户在控制台中输入。控制台调用控制平面的 Athena 路由。控制平面剥离调用者提供的任何租户标识,并注入其自身验证过的标识——无法明确归属于一个租户的请求会被拒绝而非广泛服务,拒绝会被记录。然后,助手铸造一个携带相同租户的短期凭证,工具服务器铸造自己的凭证来调用控制平面,凭证中的值与每个写入请求的头部进行匹配。
这些环节中的任何一个都不会扩大范围。成为平台操作员是一种权限信号,而非更广的视野:操作员仍然在一个指定的租户内操作,并且代码在三个不同地方明确表明了这一点,因为这是最有可能被重新破坏的假设。
权限仅来自单一来源
Section titled “权限仅来自单一来源”每个工具声明其所需权限。哪些角色拥有该权限并未写在助手之中——它由控制平面自身的授权生成。
这是一项修复,而非偏好。两者曾经是手动维护的副本,并且存在分歧:开发者被提供了会引发事件的工具,却在对话中途被服务器拒绝。同时发现了另外三个相同类型的分歧,包括两个控制平面从未拥有过的权限名称。从一方生成另一方使得这类缺陷无法被悄悄地重新引入——角色参考]现在存放着生成的结果:每个权限以及持有该权限的角色,均从控制平面自身的授权中读取。
大多数工具并未公开
Section titled “大多数工具并未公开”在所有已注册的内容中——数量在下一节,且是从注册本身推导出来的,而非在此处输入——模型默认列表中宣传了八项:五项常用读取操作和三项用于查找其他所有内容的辅助工具。代理程序按意图搜索操作,读取其输入形状,并按名称请求。通过这种方式访问的工具会接受与直接调用相同的权限检查——请求不等于执行。
这保持了公开的接口面较小,同时不隐藏任何内容。每个注册的操作仍然携带一个权限;这些权限及其持有角色的完整列表是角色参考]。
你可以要求它做什么
Section titled “你可以要求它做什么”Athena 通过198个命名操作访问平台,每个操作都属于以下领域之一。这是您可以向其请求的内容:
- 找到正确的操作。 用通俗语言询问一个连确切名称都无人知晓的操作。默认情况下,模型只能访问整个操作集的一个小窗口,而这就是访问其余部分的方式。
- 规范可能包含的内容。 关于部署文档允许说什么的权威信息——控制平面实际接受的字段及其形状,这些信息来自控制平面自身生成的模式,而非某个由人工维护的页面。还包括它当前持有的清单,按上传时的原样读回。仅限读取。此处不会上传清单或更改模式。
- 部署。 创建、读取、更改、缩放、重启和回滚部署,以及驱动金丝雀发布。
- 作业和计划。 运行至完成的工作:一次性作业、它们的运行实例,以及创建它们的计划。
- 容器。 部署中正在运行的容器:列出它们、检查某个容器、读取其输出,以及更改它的操作——重启、停止、移除和在容器内运行命令。
- 密钥。 密钥元数据和轮换。此处没有工具会返回密钥材料,也没有工具接受它——在对话中输入的值无法被撤回。
- 卷和备份。 持久卷及其备份。
- 网络。 容器网络以及每个网络上连接的内容。
- 集群健康和诊断。 集群的健康状况和资源,以及代理程序在出现问题时使用的诊断读取。
- 审计追踪。 发生了什么、谁做的、以及什么被拒绝了。
- 事件。 自动化事件响应器,从代理程序的角度:读取事件、批准提议的操作,以及上报事件。
- 漏洞扫描。 租户运行的镜像中已知的问题:扫描一个镜像、读取扫描结果、根据规则测试镜像,以及修复它的升级。规则本身——包括忽略哪些发现,以及决定什么会阻止部署的阈值——也可以在此处读取、重写和删除,但仅限平台管理员操作,并且它们适用于所有租户,而非单个租户。针对规则记录风险例外完全不在此处:无论是上报还是批准都没有工具,两者都是在仪表板中进行的人工操作。
- 复制卷。 存储在多个节点上的数据,因此丢失一个节点不会丢失数据:卷的副本位置、其快照、将其移动到另一个节点,以及切换到副本。这些与上面的容器卷不是同一类对象。
- 节点。 集群中的一个节点:它是什么、其证书和边缘路由状态、是否接受新工作、在维护前将工作移出,以及代理程序升级会改变什么。接纳节点和批准其升级不在此处——两者都是记录在案的人工操作。
- 配置历史。 部署配置的保留历史:存在哪些版本、某个版本的配置是什么,以及恢复到早期版本。
- 自动缩放。 决定部署何时获得更多或更少副本的规则、每个部署当前的规则,以及平台实际对此做了什么——采取的每个缩放决策,以及它们的总计。
- 合规报告。 审计的证据:请求针对此平台能够回答的某个合规标准生成报告、查看有哪些标准可用、列出已生成的报告,以及读取某个报告。
- 栈。 作为单一实体管理的一组部署:它包含什么,以及将其移动到不同的管理模型会改变什么。
- 迁移任务。 在管理模型之间移动栈的长时间运行的平台工作:正在运行什么,以及进展如何。
- 平台范围读取。 关于平台而非单个部署的问题:边缘路由器正在服务什么、某个地址的证书是否有效及其到期时间、平台的成本,以及平台范围的环境迁移进展如何。还包括此安装定义的调度优先级类——当节点无法容纳所有工作时,哪些工作会被优先放置。还包括此控制平面声明的驻留区域,以及是否正在针对它们强制执行地理放置。
- 回收磁盘空间。 查明平台范围的未使用镜像、已停止容器和失效网络清理会移除什么,以及——作为必须确认的单独请求——运行它。询问会移除什么与实际移除它故意不是同一句话。仅限平台管理员操作。清理操作永远不会触及卷。回收空间不能让租户丢失数据。
- 为什么没有收敛。 指令与运行容器之间的机制,用于当指令被接受但什么都没发生时:将工作传送到每个节点的网关以及当节点故障时停止工作的断路器、其职责是使现实与规范匹配的每租户协调器、此安装实际运行的内容,以及平台自身的服务注册表是否可达。仅限平台管理员操作。
它不会接受什么
Section titled “它不会接受什么”密钥材料永远不会进入对话。 控制平面自身的 API 接受内联密钥值;工具故意不这样做,并且提供密钥的调用会被拒绝,而不是被静默剥离。输入到聊天中的任何内容都会出现在对话记录、会话存储和工具调用审计记录中,这些都不是密钥存储,并且事后都无法被撤回。工具接受的是声明平台应生成材料、指向已存在材料的路径,或在控制平面内解析的模板——参见 secrets](/docs/zh/concepts/secrets/)。
任何内容都不会跨越租户边界,并且运行不等于构建:助手可以启动、更改和停止部署,但无法生成它们运行的容器镜像。
使用哪个模型,以及谁的密钥
Section titled “使用哪个模型,以及谁的密钥”支持三个提供商,密钥可以属于平台或租户:每个租户的密钥从该租户自身路径下的密钥存储中读取,平台的密钥是后备选项。完全没有密钥存储的部署可以通过环境变量提供密钥,但仅限于平台范围。
Not this
此页面不列出工具或其权限——那是角色参考的内容——也不描述助手自身的配置界面,那是平台操作员的事务,而非租户 API 的一部分。
它也没有描述对话如何存储或存储多长时间。这是一个数据保留问题,仅凭代码此页面无法如实回答。