Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
本文介绍如何使用 Ansible Galaxy azure.azcollection 中包含的 Azure Arc onboarding role 将 Linux 和 Windows 计算机大规模连接到 Azure Arc。 Azure Arc载入角色可自动安装 Azure Connected Machine 代理,并将每个目标计算机注册到 Azure Arc。这样就可以跨大型环境实现一致的可重复载入,而无需交互式登录或手动安装步骤。
Azure Arc入门角色可与 Ansible 核心版或 Ansible 自动化平台(AAP)配合使用。 本文介绍了这两个选项,并说明如何利用每个选项将设备大规模载入到 Azure Arc 中。
概述
azure_arc 角色安装 Azure Connected Machine 代理,并将每个主机注册到指定的资源组和订阅中的Azure Arc。 注册后,计算机将作为已启用 Arc 的服务器显示在Azure中,可以使用 Azure 服务(如 Azure Policy、更新管理器和监视器)进行管理。 Azure Arc Ansible 角色用于将计算机载入到Azure Arc。它不会在载入后自动发现计算机或替换基于Azure Policy的管理。
先决条件
在使用 Azure Arc 加入角色之前,请确保满足以下要求:
Azure权限
使用 Ansible(Azure CLI 用户、服务主体或托管标识)的身份必须在订阅或资源组范围内被分配Azure Connected Machine Onboarding 角色。
此外,订阅必须 注册以下资源提供程序:
- Microsoft。HybridCompute
- Microsoft.GuestConfiguration
Ansible 先决条件
在运行 Azure Arc 入门角色之前,请确保:
要使计算机能够使用 Arc,需要确保与所需 Azure Arc URL 的网络连接。 查看并解决适用的 网络要求。
Ansible 用于连接到目标计算机的帐户必须具有管理员权限才能安装软件和管理系统服务(例如 Linux 上的根或 sudo 访问权限)。
角色变量
Azure Arc引入角色支持以下变量:
| Variable | Description |
|---|---|
azure_arc_resource_group |
将进行注册的设备所在的资源组 |
azure_arc_subscription_id |
Azure订阅 ID |
azure_arc_tenant_id |
Azure租户 ID |
azure_arc_location |
默认情况下,Azure Arc 资源的区域为资源组位置。 |
azure_arc_cloud |
Azure 云默认使用(默认值:AzureCloud) |
azure_arc_tags |
应用于 Arc 资源的标记(默认值: { archost: "true" } |
proxy |
可选代理配置(主机名和端口)。 示例: http://proxy.contoso.com:8080 |
身份验证选项
Azure Arc 入门角色支持在自动化场景中使用多种身份验证方法。 本文介绍最常见的选项,包括基于Azure CLI的身份验证和托管标识。
Azure CLI凭据
在 Ansible 控制节点上使用当前已登录的Azure CLI标识。 对于交互式使用和开发环境,建议使用此选项。 在您的操作手册中设置以下内容:
auth_source: cli
运行 playbook 之前,请使用此Azure CLI命令登录到Azure(这将打开用于登录的新浏览器窗口):
az cloud set -n AzureChinaCloud
az login
# az cloud set -n AzureCloud //means return to Azure Public Cloud.
如果没有用于登录的浏览器,请使用以下Azure CLI命令使用设备登录到Azure:
az cloud set -n AzureChinaCloud
az login --use-device-code
# az cloud set -n AzureCloud //means return to Azure Public Cloud.
登录后,可以验证和/或设置订阅:
az account show
az account set --subscription "<subscription-id-or-name>"
托管标识身份验证
如果 Ansible 控制节点在Azure虚拟机或启用了Azure Arc的服务器上运行,则可以使用系统分配的托管标识进行身份验证。 每个启用Azure Arc的服务器在连接到Azure Arc时自动接收其系统分配的托管标识。此标识特定于计算机,在向Azure服务进行身份验证时表示该服务器。 默认情况下,托管标识没有Azure RBAC 权限。 在使用 Azure Arc Ansible 角色进行托管标识身份验证之前,必须显式授予托管标识引导计算机的权限。 托管标识是生产自动化的推荐身份验证方法,因为它无需存储凭据或机密。
将托管标识分配给入门角色
在运行 playbook 之前,必须在订阅或资源组范围内为 Ansible 控制节点的托管标识分配Azure 已连接的机器加入角色。
选项 1:Azure门户
在 Azure 门户中将所需的角色分配给 Ansible 控制节点的托管标识。 此选项适用于 Azure VM 托管标识或已启用 Arc 的服务器托管标识。 已启用 Arc 的服务器标识支持此流,因为 Arc 在 Microsoft Entra ID 中为机器标识创建了一个服务主体。
转到 Azure 门户
导航到你要将计算机加入到的订阅或资源组。
选择 “访问控制”(IAM)。
选择 “添加” → “添加角色分配”。
选择角色:Azure Connected Machine Onboarding.
若要 分配访问权限,请选择 “托管标识”。
选择 虚拟机(如果控制节点是 Azure VM),或者 Azure Arc 启用的服务器。
选取控制节点资源。
单击“保存”。
选项 2:Azure CLI
使用Azure CLI命令将所需的角色分配给 Ansible 控制节点的托管标识。
获取托管标识主体 ID
托管标识的主体 ID 是 Ansible 控制节点系统分配的托管标识的 Microsoft Entra 对象 ID(主体 ID)。
如果 Ansible 控制节点是已启用 Arc 的服务器,请使用以下Azure CLI命令:
az connectedmachine show \
--name \<arc-server-name\> \
--resource-group \<rg-name\> \
--query identity.principalId \
-o tsv
如果 Ansible 控制节点是Azure VM,请使用以下Azure CLI命令:
az vm show \
--name \<vm-name\> \
--resource-group \<rg-name\> \
--query identity.principalId \
-o tsv
将角色分配给托管标识
基于您的 Arc 入门体验范围,您需要为订阅或资源组分配相应的角色。 您需要上一步中的托管标识主体 ID 作为--assignee的值。 下面是基于所选作用域的相应Azure CLI命令:
订阅范围:这将在订阅级别上设置 Azure Connected Machine Onboarding角色:
az role assignment create \
--assignee \<identity-principal-id> \
--role "Azure Connected Machine Onboarding" \
--scope /subscriptions/<subscription-id>
资源组范围:这将在资源组级别设置Azure连接机器入门角色。
az role assignment create \
--assignee \<identity-principal-id> \
--role "Azure Connected Machine Onboarding" \
--scope /subscriptions/<subscription-id>/resourceGroups/<rg-name>
将 playbook 设置为使用托管标识
Ansible 控制节点的托管标识具有所需的角色后,可以在 playbook 中将其用作身份验证来源 - 无需交互式登录、密钥或环境变量。 若要在 playbook 中使用托管标识身份验证,请按如下所示设置身份验证源:
auth_source: msi
托管标识身份验证的工作原理
运行 playbook 时,Azure SDK通过从本地元数据服务请求令牌进行身份验证。 Azure虚拟机使用Azure实例元数据服务。 启用Azure Arc的服务器使用Azure Arc混合实例元数据服务。 令牌表示控制节点的托管标识。 然后,Azure评估该标识是否有权创建和注册Azure Arc资源。
使用 Ansible 大规模部署Azure Arc
Azure Arc Ansible 角色可以与 Ansible Core 或 Ansible 自动化平台配合使用,以大规模启用具有 Arc 功能的计算机。 本部分介绍如何在这两种情况下使用Azure Arc角色。 Azure Arc角色是幂等的。 您可以在将新计算机添加到库存后重新运行 Playbook。 已经连接到 Azure Arc 的计算机会被跳过。
使用 Ansible Core 大规模部署Azure Arc
使用 Ansible Core 时,可以通过在清单中定义计算机组并跨这些组运行同一 playbook 来实现大规模载入。 Azure Arc Ansible 角色在每个主机上执行一次,并可以安全地跨大量机器运行。
选择身份验证方法
在运行 playbook 之前,请确定控制节点将使用的身份验证方法。 以下步骤示例显示了 Azure CLI(建议用于开发)和托管身份验证(建议用于生产)的选项设置。
定义清单
按环境或操作系统以逻辑方式对计算机进行分组。 清单文件可以是静态的(INI 或 YAML),也可以使用脚本或清单插件动态生成。 建议将计算机分组以轻松定位它们。 示例清单文件:
[arc_linux]
linux-01
linux-02
linux-03
[arc_windows]
win-01
win-02
配置角色变量
创建组变量文件以定义计算机将加入Azure环境。 这样可以确保您的 playbook 在不同环境中保持干净且可复用。 示例:group_vars/arc_linux.yml
azure_arc_resource_group: "my-arc-rg"
azure_arc_subscription_id: "<your-subscription-id\>"
azure_arc_tenant_id: "<your-tenant-id\>"
azure_arc_location: "chinaeast2"
azure_arc_tags:
environment: "production"
archost: "true"
编写行动方案
选择与环境匹配的身份验证选项。
选项 A:Azure CLI身份验证(建议用于开发)
在 Ansible 控制节点上使用已登录的 Azure CLI 标识。 运行 playbook 之前,需要登录到Azure CLI。
示例:arc-onboard.yml
- name: Connect Linux machines to Azure Arc (CLI auth)
hosts: arc_linux
gather_facts: true
vars:
auth_source: cli
roles:
- role: azure.azcollection.azure_arc
vars:
azure_arc_resource_group: "{{ azure_arc_resource_group }}"
azure_arc_subscription_id: "{{ azure_arc_subscription_id }}"
azure_arc_tenant_id: "{{ azure_arc_tenant_id }}"
azure_arc_location: "{{ azure_arc_location }}"
azure_arc_tags: "{{ azure_arc_tags }}"
选项 B:托管身份认证(推荐用于生产环境)
如果 Ansible 控制节点是启用了托管标识的Azure VM 或已启用 Arc 的服务器,则无需执行其他登录步骤。 示例:arc-onboard.yml
- name: Connect Linux machines to Azure Arc (Managed Identity auth)
hosts: arc_linux
gather_facts: true
vars:
auth_source: msi
roles:
- role: azure.azcollection.azure_arc
vars:
azure_arc_resource_group: "{{ azure_arc_resource_group }}"
azure_arc_subscription_id: "{{ azure_arc_subscription_id }}"
azure_arc_tenant_id: "{{ azure_arc_tenant_id }}"
azure_arc_location: "{{ azure_arc_location }}"
azure_arc_tags: "{{ azure_arc_tags }}"
使用 Ansible 自动化平台大规模部署Azure Arc
使用 Ansible 自动化平台(AAP)时,清单和主机组在平台中集中管理。 使用 AAP 时,无需维护本地清单文件。 建议对大型或动态环境使用 AAP。 AAP 支持自动从外部源(如虚拟化平台、云提供商或 CMDB 系统)发现计算机的清单。
设置用于Azure身份验证的 AAP 凭据
AAP 集中管理凭据。 使用以下身份验证方法之一在 AAP 中创建Azure 资源管理器凭据。
| 身份验证方法 | 何时使用 | 备注 |
|---|---|---|
| 托管的标识 | 生产;AAP 执行环境在Azure VM 或已启用 Arc 的服务器上运行 | 推荐用于生产 |
| 服务主体 | 生产; 常规用途或用于Azure外部的 AAP | 需要客户端 ID 和机密 |
Azure CLI凭据在 AAP 中不适用。 使用托管标识或服务主体实现基于 AAP 的自动化。 若要在 AAP 中创建Azure凭据,
- 在 AAP Web UI 中,转到 “凭据 ”并选择“ 添加”。
- 将 Credential Type 设置为 Azure 资源管理器。
- 对于 托管标识:启用 使用环境的托管标识。 对于 服务主体:输入订阅 ID、客户端 ID、客户端密码和租户 ID。
- 选择“保存”。
配置库存
AAP 清单可以是静态的,也可以是动态的。 对于大型或动态环境,请使用构造的清单根据主机元数据自动对计算机进行分组。
选项 A:包含主机组的静态清单
- 在 AAP 中,转到清单> 添加> 清单,然后手动添加主机或从文件导入。
- 将 Linux 主机添加到名为arc_linux的组:
linux-server-01
linux-server-02
linux-server-03
选项 B:具有构造组的动态清单(建议用于缩放)
使用清单源(例如 VMware vSphere、AWS 或 Azure),并根据主机变量定义构造的组。 例如,自动对所有 Linux 计算机进行分组:
示例:constructed.yml
plugin: constructed
groups:
arc_linux: ansible_os_family == "RedHat" or ansible_os_family == "Debian"
与组条件匹配的新添加的计算机会自动包含在后续作业运行中。
创建项目
在 AAP 中,一个项目链接到一个包含 playbook 和角色要求文件的源代码管理存储库。
- 转到项目>添加。
- 将 SCM 类型设置为 Git。
- 输入存储库 URL。
- 选择“保存”。
- 确保存储库在根目录中包含requirements.yml文件,以安装 azure.azcollection:
示例:requirements.yml
collections:
- name: azure.azcollection
source: https://galaxy.ansible.com
编写 Arc 入职手册
将此操作手册存储在项目代码存储库中。 前面配置的Azure凭据由 AAP 在运行时自动注入 — 无需在 playbook 中硬编码机密。
选项 A:托管标识
在下面的示例中,auth_source 设置为托管身份。
- name: Connect machines to Azure Arc (AAP - Managed Identity)
hosts: arc_linux
gather_facts: true
vars:
auth_source: msi
azure_arc_resource_group: "my-arc-rg"
azure_arc_subscription_id: "<your-subscription-id>"
azure_arc_tenant_id: "<your-tenant-id>"
azure_arc_location: "chinaeast2"
azure_arc_tags:
environment: "production"
archost: "true"
roles:
- role: azure.azcollection.azure_arc
选项 B:服务主体
设置 auth_source: env 时,角色将使用 AAP 作业模板中配置的Azure凭据。 服务主体值由 AAP 自动注入 - 无需在 playbook 中对其进行硬编码。
- name: Connect machines to Azure Arc (AAP - Service Principal)
hosts: arc_linux
gather_facts: true
vars:
auth_source: env
azure_arc_resource_group: "my-arc-rg"
azure_arc_subscription_id: "<your-subscription-id>"
azure_arc_tenant_id: "<your-tenant-id>"
azure_arc_location: "chinaeast2"
azure_arc_tags:
environment: "production"
archost: "true"
roles:
- role: azure.azcollection.azure_arc
创建并运行作业模板
- 在 AAP 中,转到 “模板 > 添加 > 作业模板”。
- 配置作业模板字段,然后保存并启动作业。
AAP 作业模板字段
| 领域 | 价值 |
|---|---|
| 名称 | 将计算机连接到Azure Arc |
| 工作类型 | 运行 |
| 库存 | 您的资产(例如,arc_linux组) |
| 项目 | 您的项目(链接到存储库) |
| 剧本 | arc-onboard.yml |
| Credentials | Azure 资源管理器凭据 |
| Limit | arc_linux(或留空以面向所有主机) |
连续和大规模载入
由于 AAP 清单是动态维护的:
- 新发现的计算机会自动包含在后续作业运行中。
- 已连接到Azure Arc的计算机将被跳过(角色是幂等的)。 可以将相同的作业模板计划为定期运行,以便在将新计算机添加到环境中时持续载入新计算机。 计划作业模板定期运行(例如,夜间)以在将新计算机添加到环境时自动载入新计算机。
验证与Azure Arc的连接
安装代理并将其配置为连接到启用了Azure Arc的服务器后,请转到Azure门户,验证目标主机中的服务器是否已成功连接。 在 Azure 门户中查看你的虚拟机。
后续步骤
- 查看 计划和部署指南,以计划在任何规模上部署启用了Azure Arc的服务器,并实施集中式管理和监视。
- 查看 Connected Machine Agent 故障排除指南中的连接故障排除信息。
- 了解如何使用 Azure Policy 来管理计算机,例如 VM guest 配置、验证计算机是否向预期的Log Analytics工作区报告,等等。