你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

配置注册表终结点(预览版)

重要

本页包含有关使用 Kubernetes 部署清单文件管理 Azure IoT Operations 组件的说明,功能目前处于预览版。 此功能提供 多个限制,不应用于生产工作负荷。

有关适用于 Beta 版、预览版或尚未正式发布的 Azure 功能的法律条款,请参阅 适用于 Microsoft azure 预览版的补充使用条款

数据流图使用注册表终结点从容器注册表拉取 WebAssembly (WASM) 模块和图定义。 你可以配置终结点设置、身份验证及其他设置,以连接到 Azure 容器注册表 (ACR) 或其他兼容 OCI 的注册表。

先决条件

  • 一个 Azure IoT 操作实例,版本为 1.2 预览版或更高版本
  • 对容器注册表(例如 Azure 容器注册表)的访问权限

注册表终结点概述

注册表终结点定义用于访问容器注册表的连接详细信息和身份验证方法。 注册表终结点由以下项使用:

  • 数据流图:用于拉取 WASM 模块和图定义
  • Akri 连接器:获取自定义连接器模板

注册表终结点支持通过以下方法进行身份验证:

  • 系统分配的托管标识
  • 用户分配的管理标识
  • 工件拉取机密(用户名和密码)
  • 匿名访问(适用于公共注册表)

创建注册表终结点

可以使用 Bicep 或 Kubernetes 创建注册表终结点。

重要

目前,将注册表终结点资源与 Akri 连接器配合使用时存在一个已知问题。 有关详细信息,请参阅 Akri 连接器不适用于注册表终结点资源

创建包含以下内容的 Bicep .bicep 文件:

param aioInstanceName string = '<AIO_INSTANCE_NAME>'
param customLocationName string = '<CUSTOM_LOCATION_NAME>'
param registryEndpointName string = '<REGISTRY_ENDPOINT_NAME>'
param registryHost string = '<REGISTRY_HOST>' // For example, myregistry.azurecr.io

resource aioInstance 'Microsoft.IoTOperations/instances@2024-11-01' existing = {
  name: aioInstanceName
}

resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
  name: customLocationName
}

resource registryEndpoint 'Microsoft.IoTOperations/instances/registryEndpoints@2025-07-01-preview' = {
  parent: aioInstance
  name: registryEndpointName
  extendedLocation: {
    name: customLocation.id
    type: 'CustomLocation'
  }
  properties: {
    host: registryHost
    authentication: {
      method: 'SystemAssignedManagedIdentity'
      systemAssignedManagedIdentitySettings: {
        audience: 'https://management.azure.com/'
      }
    }
  }
}

使用 Azure CLI 部署该 Bicep 文件:

az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep

配置选项

本部分介绍了可用于注册表终结点的配置选项。

主机

host 属性指定容器注册表主机名。 对于 Azure 容器注册表,请使用格式 <registry-name>.azurecr.io。 主机属性支持 HTTPS URL 或仅主机名。

示例

  • myregistry.azurecr.io
  • https://myregistry.azurecr.io

模式:对于 Azure 容器注册表,必须匹配模式 ^(https:\/\/)?[a-zA-Z0-9\-]+\.azurecr\.io$

身份验证方法

注册表终结点支持使用多种身份验证方法来安全地访问容器注册表。

系统分配的托管标识

系统分配的托管标识使用 Azure IoT 操作实例的内置标识向注册表进行身份验证。 这是适用于 Azure 容器注册表的建议方法,因为它无需管理凭据。

在配置注册表终结点之前,请确保 Azure IoT 操作的系统分配托管标识具有所需的权限:

  1. 在 Azure 门户中,转到 Azure IoT 操作实例并选择“概述”
  2. 复制“Azure IoT 操作 Arc 扩展”后列出的扩展名称。 例如 azure-iot-operations-xxxx7
  3. 转到你的容器注册表 >“访问控制 (IAM)”“添加角色分配”。>
  4. 在“角色”选项卡上,选择 角色。AcrPull
  5. 在“成员”选项卡上,对于“将访问权限分配给”,选择“用户、组或服务主体”,然后选择“+ 选择成员”并搜索 Azure IoT 操作 Arc 扩展名称。 选择该扩展并选择“选择”。
  6. 选择“查看 + 分配”以完成角色分配。
authentication: {
  method: 'SystemAssignedManagedIdentity'
  systemAssignedManagedIdentitySettings: {
    audience: 'https://management.azure.com/'
    extensionName: null  // Optional: specific extension name
    tenantId: null       // Optional: specific tenant ID
  }
}

系统分配的托管标识设置

资产 DESCRIPTION 必选 类型
audience 要对其进行身份验证的服务受众。 字符串
extensionName 要使用的特定扩展名称。 字符串
tenantId 用于身份验证的租户 ID。 字符串

如果未提供,操作程序会尝试从终结点推断受众。 对于 Azure 容器注册表,受众通常是 https://management.azure.com/

用户分配的管理标识

用户分配的托管标识允许你使用自己创建的、并已配置了必要权限的特定托管标识。

在配置注册表终结点之前,请确保用户分配的托管标识在容器注册表上具有 AcrPull 角色。

authentication: {
  method: 'UserAssignedManagedIdentity'
  userAssignedManagedIdentitySettings: {
    clientId: '<CLIENT_ID>'
    tenantId: '<TENANT_ID>'
    scope: null  // Optional: specific scope
  }
}

用户分配的托管标识设置

资产 DESCRIPTION 必选 类型
clientId 用户分配的托管标识的客户端 ID。 是的 字符串
tenantId 托管标识所在的租户 ID。 是的 字符串
scope 资源的作用域,使用 .default 后缀。 字符串

如果未提供,操作程序会尝试从终结点推断作用域。

工件拉取机密

工件拉取机密允许对不支持托管标识身份验证的注册表使用用户名和密码身份验证。

首先,创建一个包含注册表凭据的 Kubernetes 机密:

kubectl create secret docker-registry my-registry-secret \
  --docker-server=myregistry.azurecr.io \
  --docker-username=<USERNAME> \
  --docker-password=<PASSWORD> \
  -n azure-iot-operations
authentication: {
  method: 'ArtifactPullSecret'
  artifactPullSecretSettings: {
    secretRef: 'my-registry-secret'
  }
}

匿名身份验证

匿名身份验证用于不要求进行身份验证的公共注册表。

authentication: {
  method: 'Anonymous'
  anonymousSettings: {}
}

Azure 容器注册表集成

Azure 容器注册表 (ACR) 是适用于 Azure IoT 操作的建议容器注册表。 ACR 提供安全、专用的 Docker 容器注册表,并通过 Microsoft Entra ID 实现集成身份验证。

ACR 的先决条件

  1. 创建 ACR 实例:如果没有 ACR 实例,请在订阅中创建 Azure 容器注册表实例。
  2. 配置权限:请确保 Azure IoT 操作托管标识对注册表具有 AcrPull 权限。
  3. 推送工件:使用 ORAS CLI 等工具将 WASM 模块和图定义上传到注册表。

ACR 配置示例

下面是配置 ACR 注册表终结点的完整示例:

param aioInstanceName string = 'my-aio-instance'
param customLocationName string = 'my-custom-location'
param acrName string = 'myregistry'

resource aioInstance 'Microsoft.IoTOperations/instances@2024-11-01' existing = {
  name: aioInstanceName
}

resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
  name: customLocationName
}

resource acrRegistryEndpoint 'Microsoft.IoTOperations/instances/registryEndpoints@2025-07-01-preview' = {
  parent: aioInstance
  name: 'acr-endpoint'
  extendedLocation: {
    name: customLocation.id
    type: 'CustomLocation'
  }
  properties: {
    host: '${acrName}.azurecr.io'
    authentication: {
      method: 'SystemAssignedManagedIdentity'
      systemAssignedManagedIdentitySettings: {
        audience: 'https://management.azure.com/'
      }
    }
  }
}

其他容器注册表

注册表终结点还支持其他兼容 OCI 的容器注册表,例如:

  • Docker Hub
  • Harbor
  • AWS 弹性容器注册表 (ECR)
  • Google 容器注册表 (GCR)

对于这些注册表,通常使用工件拉取机密进行身份验证,除非它们支持 Azure 托管标识。

后续步骤