关于 teleport-discovery
teleport-discovery 是用于将云资源自动发现并接入 Teleport 的技能,面向配置和维护 Teleport Discovery Service 的用户。它涵盖 Terraform 配置、应用、状态监控与故障排查,支持 AWS EC2、AWS EKS 和 Azure VM。
主要功能
- 01配置云端 OIDC 集成
- 02生成或更新 Terraform 配置
- 03应用发现配置
- 04监控同步状态
- 05排查资源未接入问题
适用场景
- 01为 AWS EC2 配置自动发现
- 02发现并接入 AWS EKS 集群
- 03为 Azure VM 配置发现
- 04诊断资源接入故障
MCP 相关
该输入未说明与 MCP 的关系。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ gravitational/ teleport --skill teleport-discovery安装后在 Claude Code 中输入/teleport-discovery确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonevals/fixtures/_mocklib.pyevals/fixtures/azure-discovery/main.tfversions.tfevals/fixtures/bin/tshtctlazawsevals/fixtures/existing-project-aws/infra/main.tfversions.tfevals/fixtures/scenarios/monitor-aws-ec2-notenrolled.jsoncloud-azure-no-rg.jsoncloud-azure-management-group.jsoncloud-aws.jsoncloud-generic.jsoncloud-aws-existing-oidc.jsonmonitor-aws-failed-tasks.jsoncloud-azure.jsonselfhosted-no-discovery.jsonmonitor-aws-oidc-error.jsonmonitor-azure-failed.jsonmonitor-aws-healthy.jsonreferences/apply.mdaws-setup.mdazure-setup.mdmonitor.md详细介绍
Teleport 自动发现
将 Teleport 连接到云端,即可自动发现并注册资源。使用 Terraform 在云服务提供商中创建 OIDC 集成,并配置 Teleport Discovery Service。排查资源注册过程中遇到的问题。支持 AWS EC2 实例、AWS EKS 集群和 Azure VMS。
沟通
开头用一两句话说明将运行哪些流程,以及每个流程会生成或检查什么。之后,仅在向用户提问,以及报告每个流程的结果或停止时与用户交流。不要报告单个字段的推导过程、运行过的命令或中间结果。
确定云平台
首先设置 CLOUD。如果请求提到了 EC2、EKS 或 AWS 账户,则推断为 aws。如果请求提到了 VMs、订阅、资源组或管理组,则推断为 azure。如果请求没有暗示任何一种云平台,则停止并询问用户使用哪种云平台。在设置 CLOUD 之前,不要运行 aws 或 az 命令,也不要编写 Terraform。
确定字段值
首先从提示词中确定每个字段的值,然后根据工具推导确定,最后使用 Default 列中的值。工具不可用、存在歧义或报错时,视为没有返回结果。收集字段的流程会以 | Field | Tool derivation | Default | 的格式列出字段。
在命令中,$TSH 和 $TCTL 分别代表 tsh 和 tctl 二进制文件;使用用户提供的路径,否则使用 tsh 和 tctl。
如果 tsh 或 tctl 因缺少会话而失败,请让用户在单独的终端中运行
$TSH login --proxy=<proxy_addr>,然后重试。即使使用 ! 前缀,交互式登录也会在当前会话中失败。
提问
每个问题都要说明该值会控制最终配置中的什么内容,例如:“要让发现功能在哪些 AWS 区域中搜索 EC2 实例?”将默认值设为第一个选项,并提供具体的其他选项。问题文本、选项标签和选项描述都要使用用户的口吻,例如“替我运行”,因为只说“我”或“你”无法区分指的是助手还是用户。自由格式的值通过内置的 Other 选项提供。不要通过后续提问来进一步 уточ定答案。如果答案不可用,说明原因,并重新询问该问题。
每次调用 AskUserQuestion 最多可包含 4 个问题,因此一轮可能需要连续多次调用:将匹配范围问题(如区域、标签和订阅)归为一组,将执行安排问题(如写入位置和应用选择)归为一组。
流程
按请求中的顺序运行所需流程:Setup、Apply,然后是 Monitor。若用户只说“设置发现功能”,且未指定更具体的范围,则运行全部三个流程。
设置
编写、生成、配置或扩展用于发现的 Terraform。先收集这些通用字段,再根据云服务提供商,查阅 references/aws-setup.md 中的 aws 专属字段,或 references/azure-setup.md 中的 azure 专属字段。cluster_version 确定后,立即运行参考文档中的版本门禁,然后再询问用户任何问题。如果必须询问用户 cluster_version,则在写入前对答案运行门禁。收集所有需要询问的字段,包括提示中未指定 write_location 时的该字段,然后使用 AskUserQuestion 工具在同一轮中一次性询问,不要逐个询问。如果将运行 Apply,则将 references/apply.md 中的两个 Apply 问题也放在同一轮中。
| 字段 | 工具推导方式 | 默认值 |
|---|---|---|
proxy_addr | $TSH status --format=json 中的 active.profile_url,去掉 https:// 协议前缀,例如 example.teleport.sh:443 | 询问 |
cluster_version | $TCTL status 的 Version 字段,例如 18.8.0 | 询问 |
deployment | 如果 proxy_addr 的主机名以 .teleport.sh、.cloud.gravitational.io 或 .beams.sh 结尾,则为 cloud,否则为 self-hosted | 无 |
discovery_group | cloud:cloud-discovery-group。self-hosted:参见自托管发现组 | 询问,按自托管发现组的说明处理 |
write_location | 无 | 询问,默认新建 teleport-discovery/ 目录 |
自托管发现组
使用 $TCTL inventory list --services=discovery 确认 Discovery Service 正在运行;如果没有,则停止操作。清单输出不显示组,因此使用 $TCTL get discovery_config --format=json 收集 discovery_group 值,并将其作为选项提供。问题中应说明,该值必须与某个正在运行的 Discovery Service 配置中的 discovery_group 相匹配。
写入位置
对于新项目,在 write_location 目录中编写一个全新的模块,其中包含 versions.tf 和 main.tf。对于现有 Terraform 项目,按照其结构进行集成。如果项目已声明 module "aws_discovery" 或 module "azure_discovery" 块,则读取该块,根据其中当前值预填已收集的字段,并直接编辑该块。
Apply
使用 references/apply.md 将 Terraform 应用到资源创建中。如果 Terraform 尚未编写,则先执行设置。
监控与故障排查
使用 references/monitor.md 检查状态、监视同步,或诊断资源未能注册的原因。