ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Headscale 如何把个人节点转换为标签节点(tagged node)?

Headscale 如何把个人节点转换为标签节点(tagged node)? Headscale 如何把个人节点转换为标签节点tagged node【免费下载链接】headscaleAn open source, self-hosted implementation of the Tailscale control server项目地址: https://gitcode.com/GitHub_Trending/he/headscale当一台原本以个人身份注册的 Tailscale 客户端由某个 Headscale 用户拥有需要改造成由标签管理的标签节点tagged node用于提供服务、由团队共同管理的非人类节点时不需要重新注册设备Headscale 提供了headscale nodes tag命令直接完成所有权转换给节点设置标签后它就从个人节点变为标签节点。转换完成后该节点的属主在headscale nodes list中显示为特殊用户tagged-devices并带上你指定的标签。Headscale 遵循 Tailscale 的身份模型个人节点personal node归某个用户所有标签节点归标签所有所有标签节点统一挂在特殊用户tagged-devices之下。两种身份互斥而本文要做的就是把前者切换成后者。前置条件确认节点与标签都已就绪转换之前需要确认两件事目标节点是个人节点且要使用的标签已经在 policy 文件中定义。1. 找到要转换的节点运行headscale nodes list列出所有节点记下目标节点的ID。此时它User列显示的是注册它的个人用户Tags列为空说明这是一个待转换的个人节点。2. 确保标签已在 policy 中定义标签必须带tag:前缀并且存在于当前加载的 policy 中否则设置标签会被拒绝。标签的授权写在 policy 文件的tagOwners给出的示例{ tagOwners: { tag:server: [alice] } }policy 文件的路径由配置文件中的policy.path键指定详见 policy.md。修改 policy 后必须重新加载 Headscale 才能生效两种方式任选其一sudo systemctl reload headscalesudo kill -HUP $(pidof headscale)Headscale 每次 reload 后会在日志中记录 policy 处理结果可据此确认新标签已被加载。执行转换headscale nodes tag在 Headscale 服务器或配置了 API key 的远程工作站上执行headscale nodes tag -i NODE_ID -t tag:TAG参数说明-i NODE_ID要转换的节点 ID取自headscale nodes list的 ID 列-t tag:TAG要设置的标签必须带tag:前缀。多个标签用逗号分隔例如headscale nodes tag -i 1 -t tag:server,tag:prod标签至少需要一个。命令成功执行后会输出更新后的节点信息Node updated。执行时 Headscale 会校验标签格式不以tag:开头的标签、或 policy 中不存在的标签都会被拒绝报错形如requested tags [tag:xxx] are invalid or not permitted。设置标签的同时节点原本的用户属主会被清除节点改由标签拥有。验证转换结果再次运行headscale nodes list检查该节点User列显示tagged-devices说明所有权已从个人用户转移到标签节点Tags列列出刚才设置的标签如tag:server。这就是 tags.md 文档给出的成功判据节点should be listed as online、属主为tagged-devices。此后在 policy 中用tag:server或autogroup:tagged选择器即可引用这台设备做访问控制见 policy.md 的 Autogroups 一节。可选分支通过 REST API 设置标签如果你已经按 api.md 用headscale apikeys create创建了 API key默认有效期 90 天也可以不用 CLI 二进制直接调用 REST API。端点定义在 nodes.go 中路径为POST /api/v1/node/{nodeId}/tags用Authorization: Bearer头携带 API key 认证curl -H Authorization: Bearer API_KEY \ -X POST \ --json {tags: [tag:server]} \ https://headscale.example.com/api/v1/node/NODE_ID/tags其中API_KEY替换为你的 API keyNODE_ID替换为节点 IDhttps://headscale.example.com替换为你的 Headscale 地址。API 同样拒绝空标签集合提交空tags会收到 400提示cannot remove all tags from a node - tagged nodes must have at least one tag。限制与注意事项标签节点不能取消全部标签。一个节点一旦带上了标签就只能改标签、不能清空标签因此也不能通过删光标签退回个人节点。这是 state.go 中SetNodeTags的明确约束Once a node is tagged, it cannot be un-taggedAPI 侧同样拦截。标签节点有一些额外的能力限制。例如标签节点不允许通过 Tailscale SSH 访问个人节点见 registration.md 的身份模型一节。反向操作把标签节点转回个人节点如果后续要把标签节点还给某个个人用户需要在客户端上重新认证然后由管理员批准tailscale up --login-server YOUR_HEADSCALE_URL --advertise-tags --force-reauth--advertise-tags留空表示不再通告标签--force-reauth强制重新认证。通常会打开一个浏览器页面展示后续说明并打印 Auth ID用它在服务器上批准headscale auth register --user USER --auth-id AUTH_IDYOUR_HEADSCALE_URL是你的 Headscale 服务器地址USER是接收该节点的所有者AUTH_ID是浏览器页面打印的认证 ID。完成后所有原有标签被移除节点归USER所有即完成从标签节点到个人节点的逆向转换。【免费下载链接】headscaleAn open source, self-hosted implementation of the Tailscale control server项目地址: https://gitcode.com/GitHub_Trending/he/headscale创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表