十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

Teleport Azure VM 自动注册失败排查:深入解析 “VM agent not available“(虚拟机代理不可用)错误

Teleport Azure VM 自动注册失败排查:深入解析 “VM agent not available“(虚拟机代理不可用)错误 网络安全认证鉴权运维后端【免费下载链接】teleportThe easiest, and most secure way to access and protect all of your infrastructure.项目地址https://gitcode.com/gh_mirrors/tel/teleport点击查看免费下载Teleport 在对 Azure 虚拟机执行自动发现Auto Discovery与自动注册Auto Enrollment时需要借助 Azure VM 代理Azure VM Agent通过扩展机制在目标主机上执行安装脚本。当这一链路中断时Teleport 会生成一条名为 VM agent not available 的用户任务User Task提示指出Teleport 无法访问 Azure VM 代理以在该 VM 上运行注册命令Azure 报告扩展操作被禁止extension operations are disallowed。本文以仓库中的官方排查文档 azure-vm-agent-not-available.md 为主体结合 Teleport 源码中 Run Command 的执行链路与错误分类逻辑系统讲解该错误的成因、验证手段与修复步骤帮助你快速定位并解决 Azure VM 自动注册失败问题。错误出现的场景Azure VM 自动注册的完整链路Teleport 的 Azure 自动发现功能会扫描订阅下符合条件的虚拟机并尝试为每台 VM 自动安装并注册 Teleport Agent。安装过程的核心依赖是Azure VM Run Command——Teleport 会在目标 VM 上创建一条名为teleport-install的 Run Command 来执行注册脚本。从源码 lib/cloud/azure/vm.go 可以看到这条执行链路的关键实现runCommandName teleport-install固定了安装命令的名称vm.goRunCommandClient.Run会构造VirtualMachineRunCommand设置脚本来源与TimeoutInSeconds超时然后通过 Azure SDK 的VirtualMachineRunCommandsClient发起创建vm.go执行过程中以 30 秒为周期轮询命令完成状态runCommandResultPollingFrequencyvm.go。而在真正发起 Run Command 之前Teleport 会先调用checkVMStatus检查 VM 的运行状态与 Agent 就绪状态vm.go。该函数通过 Azure Instance ViewInstanceViewTypesInstanceView读取 VM 的实例视图信息其判断逻辑为VM 处于运行状态且 Agent 已就绪AgentIsReady→ 放行继续执行 Run CommandVM 未运行 → 返回NewVMNotRunningError对应另一条错误 VM not runningVM 在运行但Agent 未就绪→ 返回NewVMAgentNotAvailableError即本文讨论的错误。因此VM agent not available 本质上表示VM 电源状态正常但 Azure 报告 VM Agent 处于不可用状态Teleport 无法借助 Agent 的扩展通道在 VM 上执行注册命令。Teleport 如何将底层错误转换为用户任务这个底层错误并不会直接以原始报错形式抛给用户。在自动注册失败后Teleport 的服务端会对错误进行分类并生成一条结构化的用户任务User Task在 Web UI 中向管理员展示问题摘要、详细说明与修复指引。错误分类逻辑位于 lib/srv/discovery/azure_vm_error_parser.go 的classifyAzureVMEnrollmentError函数中azure_vm_error_parser.goswitch { case errors.Is(err, azure.VMNotRunningError{}): return usertasks.AutoDiscoverAzureVMIssueVMNotRunning case errors.Is(err, azure.VMAgentNotAvailableError{}): return usertasks.AutoDiscoverAzureVMIssueVMAgentNotAvailable case trace.IsAccessDenied(err) strings.Contains(err.Error(), runCommands): return usertasks.AutoDiscoverAzureVMIssueMissingRunCommandsPermission default: return usertasks.AutoDiscoverAzureVMIssueEnrollmentError }当分类结果为AutoDiscoverAzureVMIssueVMAgentNotAvailable字符串值为azure-vm-agent-not-available定义见 api/types/usertasks/object.go时Web UI 便会加载 descriptions/azure-vm-agent-not-available.md 作为该任务的标题与修复说明。描述文档的加载机制在 lib/usertasks/descriptions.go 中实现所有descriptions/*.md文件通过//go:embed嵌入二进制loadIssueTitleDescription将文档第一行的# 标题提取为任务标题其余部分作为详细描述descriptions.go。仓库中的 descriptions_test.go 通过TestAllDescriptions遍历DiscoverAzureVMIssueTypes等全部问题类型确保每个类型都有对应的标题与描述文档。该文档即本篇指南的主体内容其核心结论是这个错误通常由两类原因引起——VM Agent 未安装或运行不健康或扩展操作extension operations被禁用。原因一VM Agent 未安装或不健康现象与原理Azure VM AgentLinux 上为 waagent是 Azure 平台与虚拟机内部通信的桥梁Run Command、扩展安装等功能都必须通过它来执行。如果 Agent 未安装、被卸载或安装后处于异常状态进程未运行、版本过旧、与平台通信失败Azure 就无法把 Run Command 下发到 VM 内部Teleport 的注册脚本自然无法执行进而触发VMAgentNotAvailableError。在checkVMStatus的实现中Agent 状态直接来自 VM 的 Instance Viewvm.goif getVMResp.Properties ! nil getVMResp.Properties.InstanceView ! nil { instanceView : getVMResp.Properties.InstanceView return checkStatus(instanceView.VMAgent, instanceView.Statuses) }只有当VMAgent的实例视图显示 Agent 已就绪时Teleport 才会继续执行注册命令否则视为 Agent 不可用。排查与修复步骤登录 Azure 门户进入目标 VM 的 Settings → Extensions applications 页面或在 Azure CLI 中查看 Agent 状态az vm get-instance-view \ --resource-group resource-group \ --name vm-name \ --query instanceView.vmAgent确认 VM Agent 状态为Ready、Provisioned且版本号非空。若 Agent 未安装或状态异常Linux VM参考 Azure 官方文档中关于 Linux VM Agentwaagent的安装与更新说明在 VM 内重新安装或重启 Agent 服务Windows VM确认 Windows Guest Agent 服务存在且处于运行状态。确保 VM 有正常的出站网络连接能够访问 Azure 平台的控制平面Agent 需要与平台保持心跳通信。修复后可在 Teleport 中重新触发自动注册或等待下一次发现周期确认用户任务是否消失。原因二扩展操作被禁用allowExtensionOperations false现象与原理Azure VM 的osProfile.allowExtensionOperations属性控制是否允许对该 VM 执行扩展类操作。Run Command 在 Azure 的权限模型中被归类为扩展操作因此当该属性为false时Azure 会直接拒绝 Teleport 发起的 Run Command 请求即使 VM Agent 本身完全健康。这正是错误描述中Azure reported that extension operations are disallowed的含义。检查方法Azure CLI使用官方排查文档提供的命令查询当前值azure-vm-agent-not-available.mdaz vm show \ --resource-group resource-group \ --name vm-name \ --query osProfile.allowExtensionOperations输出为true扩展操作允许问题应继续向原因一或其他方向排查输出为false或null扩展操作被禁用需要开启后才能让 Run Command 生效。修复方法通过 Azure CLI 更新 VM 配置需要在az login后执行az vm update \ --resource-group resource-group \ --name vm-name \ --set osProfile.allowExtensionOperationstrue通过 ARM 模板 / Bicep / Terraform在 VM 资源的osProfile中显式设置allowExtensionOperations: true然后重新部署。通过 Azure 门户在 VM 的 Extensions applications 页面尝试安装或管理扩展若页面提示扩展操作被禁用则需要在 VM 配置中启用该属性。需要注意该属性通常在 VM 创建时通过osProfile设定。若 VM 由组织模板统一创建且该属性被置为false可能需要修改创建模板或走变更流程而不是直接对单个 VM 打补丁。原因三Azure Policy 强制禁用了扩展操作错误描述文档的最后一句特别强调如果某个策略policy禁用了扩展操作Run Command 将无法工作。 这是原因二在组织级层面的常见体现企业可能通过 Azure Policy 强制将 VM 的Microsoft.Compute/virtualMachines/extensions或 Run Command 相关操作设为 Deny此时即便单台 VM 的osProfile.allowExtensionOperations为true策略仍会拒绝扩展类操作Run Command 同样无法执行。排查建议在 Azure 门户中查看该 VM 所属订阅/资源组上生效的 Policy 与 Initiative尤其关注 Compute 相关的 Deny 策略通过az policy相关命令列出策略分配与合规状态确认是否存在命中该 VM 的拒绝策略若命中组织策略需要与基础设施团队协调为 Teleport 自动注册场景申请豁免exemption或调整策略范围而不能绕过策略直接执行。完整排查清单与相邻问题综合以上分析当你在 Teleport 中看到 VM agent not available 用户任务时可按以下顺序排查步骤检查项判定依据处理方式1VM 电源状态Instance View 显示 VM 处于 Running若未运行属于 VM not running 问题先启动 VM2VM Agent 状态az vm get-instance-view中vmAgent为 Ready未就绪则重装/重启 Agent检查出站网络3allowExtensionOperationsaz vm show --query osProfile.allowExtensionOperations为true为false时按上文方法开启4Azure Policy订阅/资源组上是否存在 Deny 扩展操作的策略协调豁免或调整策略5集成身份权限集成所用的 Azure 身份是否具备 Run Command 权限若缺失属于 Missing Run Command permissions 问题其中第 5 步的权限问题与本文主题紧密相邻即使 Agent 健康且扩展操作允许若 Teleport 集成身份缺少Microsoft.Compute/virtualMachines/runCommand/action等权限注册同样会失败但会以另一条用户任务azure-vm-missing-run-commands-permission呈现其完整权限清单可参考 azure-vm-missing-run-commands-permission.md。另外Teleport 在生成 Azure VM 相关用户任务时还会为每台失败 VM 附带一个直达 Azure 门户的ResourceURL格式为https://portal.azure.com/#resourceresource-id实现在 lib/usertasks/urls.go并有 urls_test.go 中的TestAzureVMURLs覆盖验证。你可以直接从用户任务中跳转到对应 VM 的 Azure 门户页面快速执行上述检查。小结VM agent not available 是 Teleport Azure VM 自动注册链路中一个可预期、可排查的失败类型Teleport 通过checkVMStatus主动探测 VM Agent 就绪状态vm.go将VMAgentNotAvailableError分类为azure-vm-agent-not-availableazure_vm_error_parser.go并通过 User Task 机制把官方排查文档 azure-vm-agent-not-available.md 呈现给管理员。修复的关键在于保证 VM Agent 健康运行、确保osProfile.allowExtensionOperations为true、确认没有策略拦截扩展操作同时留意集成身份的 Run Command 权限。逐项核对上述检查清单后绝大多数注册失败场景都能得到解决若仍未恢复可结合服务端日志中classifyAzureVMEnrollmentError落入默认分支azure-vm-enrollment-error时的原始错误信息继续深入分析。赞分享网络安全认证鉴权运维后端【免费下载链接】teleportThe easiest, and most secure way to access and protect all of your infrastructure.项目地址https://gitcode.com/gh_mirrors/tel/teleport点击查看免费下载相关推荐Teleport Azure VM 自动注册故障排查集成身份缺少 Run Command 权限Teleport Azure VM 自动注册故障排查集成身份缺少 Run Command 权限 Teleport 在 Azure VM 自动注册auto e网络安全认证鉴权运维后端Bend 报 CUDA not available 错误怎么排查Bend 报 CUDA not available 错误怎么排查 在 Bend 上用 bend run cu file.bend 启动 CUDA 解释器时编程语言编译器语言运行时高性能计算3个技巧快速掌握CryptoMiniSat高效解决约束满足问题的终极指南3个技巧快速掌握CryptoMiniSat高效解决约束满足问题的终极指南 CryptoMiniSat是一个先进的增量SAT求解器专门用于解决布尔可满足性问题网络安全认证鉴权运维后端上一篇数据主权革命WeChatMsg如何让你真正拥有微信聊天记忆下一篇aiomultiprocess 源码解析深入理解协程与多进程的完美结合创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表