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

使用 X.509 证书大规模创建和预配 IoT Edge for Linux on Windows 设备

适用于:IoT Edge 1.5 复选标记IoT Edge 1.5

重要

IoT Edge 1.5 LTS 是受支持的版本。 IoT Edge 1.4 LTS 的生命周期结束日期为 2024 年 11 月 12 日。 如果你使用的是早期版本,请参阅更新 IoT Edge

本文提供使用 X.509 证书在 Windows 设备上自动预配一个或多个 适用于 Linux 的 IoT Edge 的分步说明。 使用 Azure IoT 中心设备预配服务 (DPS)自动预配 Azure IoT Edge 设备。 如果不熟悉自动预配,请在继续之前查看 预配概述

以下是主要任务:

  1. 生成证书和密钥。
  2. 为单个设备创建 单个注册 ,或为一组设备创建 组注册
  3. 部署安装了 IoT Edge 运行时的 Linux 虚拟机,并将其连接到 IoT 中心。

X.509 证书允许缩放生产并简化设备预配。 X.509 证书通常排列在证书信任链中。 该链以自签名或受信任的根证书开头,链中的每个证书对下一个较低证书进行签名。 此模式创建了从设备上安装的根证书到每个中间证书,再到最终的下游设备证书的委托信任链。

先决条件

云资源

  • 一个活动的 IoT 中心
  • Azure 中的一个 IoT 中心设备预配服务实例,该实例已链接到 IoT 中心

设备要求

具有以下最低要求的 Windows 设备:

  • 系统要求

    • Windows 101/11(专业版、企业版、IoT Enterprise)
    • Windows Server 20191/2022
      1 Windows 10 和 Windows Server 2019 最低内部版本 17763,并且安装了所有当前累积更新。
  • 硬件要求

    • 最小可用内存:1 GB
    • 最小可用磁盘空间:10 GB
  • 虚拟化支持

  • 网络支持

    • Windows Server 不附带默认开关。 需要创建一个虚拟交换机,然后才能将 EFLOW 部署到 Windows Server 设备。 有关详细信息,请参阅 创建 Windows 虚拟交换机上的 Azure IoT Edge for Linux
    • Windows 桌面版本附带了可用于 EFLOW 安装的默认交换机。 如果需要,可以创建自己的自定义虚拟交换机。

提示

如果要在 Azure IoT Edge for Linux on Windows 部署中使用 GPU 加速的 Linux 模块,则需要考虑多个配置选项。

你需要根据 GPU 体系结构安装正确的驱动程序,并且可能需要访问 Windows 预览体验计划内部版本。 若要确定配置需求并满足这些先决条件,请参阅 适用于 Azure IoT Edge for Linux on Windows 的 GPU 加速

现在务必要花点时间来满足 GPU 加速的先决条件。 如果决定在安装过程中需要 GPU 加速,则需要重启安装过程。

开发人员工具

准备目标设备,以便安装 Azure IoT Edge for Linux on Windows 并部署 Linux 虚拟机:

  1. 在目标设备上将执行策略设置为 AllSigned。 可以在已提升权限的 PowerShell 提示符下使用以下命令检查当前执行策略:

    Get-ExecutionPolicy -List
    

    如果执行策略 local machine 不是 AllSigned,可以使用以下命令设置执行策略:

    Set-ExecutionPolicy -ExecutionPolicy AllSigned -Force
    

若要详细了解 Azure IoT Edge for Linux on Windows PowerShell 模块,请参阅 PowerShell 函数参考

生成设备标识证书

设备标识证书是通过证书信任链连接到顶级 X.509 证书颁发机构 (CA) 证书的下游证书。 将设备标识证书的公用名(CN)设置为希望设备在 IoT 中心中使用的设备 ID。

仅使用设备标识证书预配 IoT Edge 设备和使用 Azure IoT 中心对设备进行身份验证。 设备标识证书不是签名证书,这与 CA 证书不同,后者是 IoT Edge 设备向模块或下游设备提供的用于验证的证书。 有关详细信息,请参阅 Azure IoT Edge 证书用法详细信息

创建设备标识证书后,有两个文件:具有证书公共部分的.cer或 .pem 文件,以及具有证书私钥的.cer或 .pem 文件。 如果在 DPS 中使用组注册,则还需要同一信任证书链中间或根 CA 证书的公钥部分。

若要使用 X.509 设置自动预配,需要以下文件:

  • 设备标识证书及其私钥证书。 如果创建单个注册,请将设备标识证书上传到 DPS。 私钥会传递到 IoT Edge 运行时。
  • 完整的链证书至少包含设备标识和中间证书。 完整链证书会传递到 IoT Edge 运行时。
  • 证书信任链中的中间或根 CA 证书。 如果创建组注册,则此证书会上传到 DPS。

注意

目前存在一个 libiothsm 限制,会阻止使用在 2038 年 1 月 1 日或之后到期的证书。

使用测试证书(可选)

如果没有可用于创建新的标识证书的证书颁发机构,并且想要试用此方案,Azure IoT Edge git 存储库包含可用于生成测试证书的脚本。 仅使用这些证书进行开发测试,请勿在生产环境中使用这些证书。

若要创建测试证书,请遵循创建演示证书用于测试 IoT Edge 设备功能中的步骤。 完成两个必需部分以设置证书生成脚本并创建根 CA 证书。 然后,遵循相应的步骤创建设备标识证书。 完成后,将具有以下证书链和密钥对:

  • <WRKDIR>\certs\iot-edge-device-identity-<name>-full-chain.cert.pem
  • <WRKDIR>\private\iot-edge-device-identity-<name>.key.pem

需要在 IoT Edge 设备上使用这两个证书。 如果在 DPS 中使用单个注册,请上传 .cert.pem 文件。 如果在 DPS 中使用组注册,则还要在同一证书信任链中上传中间或根 CA 证书。 如果使用演示证书,请使用 <WRKDIR>\certs\azure-iot-test-only.root.ca.cert.pem 证书进行组注册。

创建 DPS 注册

使用生成的证书和密钥在 DPS 中为一个或多个 IoT Edge 设备创建注册。

如果要预配单个 IoT Edge 设备,请创建单个注册。 如果需要预配多个设备,请按照创建 DPS 组注册的步骤进行操作。

在 DPS 中创建注册时,可以声明“初始设备孪生状态”。 在设备孪生中可以设置标记,以便按解决方案中所需的任何指标(例如区域、环境、位置或设备类型)将设备分组。 这些标记用于创建自动部署

有关设备预配服务中的注册的详细信息,请参阅如何管理设备注册

创建 DPS 单独注册

单独注册采用设备标识证书的公共部分,并将其与设备上的证书进行匹配。

提示

本文中的步骤适用于 Azure 门户,但你也可使用 Azure CLI 创建单个注册。 有关详细信息,请参阅 az iot dps enrollment。 作为 CLI 命令的一部分,使用 edge-enabled 标志指定注册适用于单个 IoT Edge设备。

  1. Azure 门户中,导航到 IoT 中心设备预配服务实例。

  2. 在“设置”下,选择“管理注册”。

  3. 选择“添加个人注册”,然后完成以下步骤以配置注册:

    • 机制:选择“X.509”。

    • 主要证书 .pem 或 .cer 文件:上传设备标识证书中的公共文件。 如果使用脚本生成了测试证书,请选择以下文件:

      <WRKDIR>\certs\iot-edge-device-identity-<name>.cert.pem

    • IoT 中心设备 ID:根据需要,为设备提供一个 ID。 可以使用设备 ID 将单个设备指定为模块部署的目标。 如果未提供设备 ID,将使用 X.509 证书中的公用名 (CN)。

    • IoT Edge 设备:选择“True”,声明该注册适用于 IoT Edge 设备。

    • 选择此设备可分配到的 IoT 中心:选择要将设备连接到的链接 IoT 中心。 可以选择多个中心,设备将根据所选的分配策略分配到其中的一个中心。

    • 初始设备孪生状态:如果需要,请添加要添加到设备孪生的标记值。 可以使用标记将设备组指定为自动部署的目标。 例如:

      {
          "tags": {
             "environment": "test"
          },
          "properties": {
             "desired": {}
          }
      }
      
  4. 选择“保存” 。

在“管理注册”下,可以查看刚创建的注册的“注册 ID”。 请记下该注册 ID,因为预配设备时可能会使用它。

既然此设备已存在注册,IoT Edge 运行时在安装期间可以自动预配设备。

安装 IoT Edge

在目标设备上部署 Azure IoT Edge for Linux on Windows。

注意

以下 PowerShell 过程概述了如何在 Windows 上将适用于 Linux 的 IoT Edge 部署到本地设备。 若要使用 PowerShell 部署到远程目标设备,请使用远程 PowerShell 与远程设备建立连接,并在该设备上远程运行这些命令。

  1. 在已提升权限的 PowerShell 会话中,根据目标设备体系结构运行以下命令之一,以下载 IoT Edge for Linux on Windows。

    • X64/AMD64

      $msiPath = $([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))
      $ProgressPreference = 'SilentlyContinue'
      Invoke-WebRequest "https://aka.ms/AzEFLOWMSI_1_5_LTS_X64" -OutFile $msiPath
      
    • ARM64

      $msiPath = $([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))
      $ProgressPreference = 'SilentlyContinue'
      Invoke-WebRequest "https://aka.ms/AzEFLOWMSI_1_5_LTS_ARM64" -OutFile $msiPath
      
  2. 在设备上安装 IoT Edge for Linux on Windows。

    Start-Process -Wait msiexec -ArgumentList "/i","$([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))","/qn"
    

    通过向安装命令中添加 INSTALLDIR="<FULLY_QUALIFIED_PATH>"VHDXDIR="<FULLY_QUALIFIED_PATH>" 参数,可以指定自定义 IoT Edge for Linux on Windows 安装和 VHDX 目录。 例如,如果要使用用于安装的 D:\EFLOW 文件夹和用于 VHDX 的 D:\EFLOW-VHDX,可以使用以下 PowerShell cmdlet。

    Start-Process -Wait msiexec -ArgumentList "/i","$([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))","/qn","INSTALLDIR=D:\EFLOW", "VHDXDIR=D:\EFLOW-VHDX"
    
  3. 在目标设备上将执行策略设置为 AllSigned(如果尚未设置)。 请参阅 PowerShell 先决条件,了解用于检查当前执行策略以及将执行策略设置为 AllSigned 的命令。

  4. 创建 IoT Edge for Linux on Windows 部署。 部署将为你创建 Linux 虚拟机并安装 IoT Edge 运行时。

    Deploy-Eflow
    

    提示

    默认情况下,Deploy-Eflow 命令会创建具有 1 GB RAM、1 个 vCPU 核心和 16 GB 磁盘空间的 Linux 虚拟机。 但是,VM 所需的资源高度依赖于部署的工作负荷。 如果 VM 没有足够的内存来支持工作负荷,将无法启动。

    可以使用 Deploy-Eflow 命令的可选参数自定义虚拟机的可用资源。 这是在满足最低硬件要求的设备上部署 EFLOW 所必需的。

    例如,以下命令创建具有 1 个 vCPU 核心、1 GB RAM(以 MB 表示)和 2 GB 磁盘空间的虚拟机:

    Deploy-Eflow -cpuCount 1 -memoryInMB 1024 -vmDataSize 2
    

    有关所有可用的可选参数的信息,请参阅适用于 IoT Edge for Linux on Windows 的 PowerShell 函数

    警告

    默认情况下,EFLOW Linux 虚拟机没有 DNS 配置。 使用 DHCP 的部署将尝试获取由 DHCP 服务器传播的 DNS 配置。 请检查 DNS 配置以确保具有 Internet 连接。 有关详细信息,请参阅 AzEFLOW-DNS

    可以为部署分配 GPU,以启用 GPU 加速的 Linux 模块。 若要获取这些功能的访问权限,需要安装适用于 Azure IoT Edge for Linux on Windows 的 GPU 加速中详细说明的必备组件。

    若要使用 GPU 直通,请将 gpuName、gpuPassthroughType 和 gpuCount 参数添加到 命令中 。 有关所有可用的可选参数的信息,请参阅适用于 IoT Edge for Linux on Windows 的 PowerShell 函数

    警告

    启用硬件设备直通可能会增加安全风险。 Microsoft 建议使用 GPU 供应商提供的设备缓解驱动程序(如果适用)。 有关详细信息,请参阅使用离散设备分配部署图形设备

  5. 输入“Y”接受许可条款。

  6. 根据自己的偏好,输入“O”或“R”以打开或关闭“可选诊断数据”。

  7. 部署完成后,PowerShell 窗口会报告“部署成功”。

    成功的部署会在消息末尾显示“部署成功”,PNG。

    成功部署后,便可以预配设备了。

为设备预配其云标识

在设备上安装运行时后,请使用供设备用来连接到设备预配服务和 IoT 中心的信息来配置该设备。

确保你具有以下信息:

  • DPS 的“ID 范围”值。 可以在 Azure 门户中 DPS 实例的概述页上找到此值。
  • 设备上的设备标识证书链文件。
  • 设备上的设备标识密钥文件。

在提升的 PowerShell 会话中运行以下命令。 将占位符值替换为你自己的值:

Provision-EflowVm -provisioningType DpsX509 -scopeId PASTE_YOUR_ID_SCOPE_HERE -registrationId PASTE_YOUR_REGISTRATION_ID_HERE -identityCertPath PASTE_ABSOLUTE_PATH_TO_IDENTITY_CERTIFICATE_HERE -identityPrivateKey PASTE_ABSOLUTE_PATH_TO_IDENTITY_PRIVATE_KEY_HERE

验证是否成功安装

检查是否已在 IoT Edge 设备上安装并配置适用于 Windows 的 IoT Edge for Linux。

检查您创建的设备预配服务中的个人注册是否已被使用。 在 Azure 门户中,访问你的设备预配服务实例。 打开创建的个人注册的注册详细信息。 注册状态为“已分配”并且设备 ID 已列出

  1. 在 PowerShell 会话中使用以下命令,登录到 Windows 虚拟机上的 IoT Edge for Linux:

    Connect-EflowVm
    

    注意

    唯一被允许通过 SSH 登录到虚拟机的帐户是创建该虚拟机的用户。

  2. 登录后,可以使用以下 Linux 命令检查正在运行的 IoT Edge 模块的列表:

    sudo iotedge list
    
  3. 如果需要对 IoT Edge 服务进行故障排除,请使用以下 Linux 命令。

    1. 若需排查服务问题,请检索服务日志。

      sudo iotedge system logs
      
    2. 使用 check 工具验证设备的配置和连接状态。

      sudo iotedge check
      

    注意

    在新预配的设备上,你可能会看到与 IoT Edge 中心相关的错误:

    × 生产就绪性:Edge 中心的存储目录持久保存在主机文件系统上- 错误

    无法检查 edgeHub 容器的当前状态

    由于 IoT Edge 中心模块未运行,在新预配的设备上预期会出现此错误。 若要解决此错误,请在 IoT 中心为设备设置模块并创建部署。 为设备创建部署会启动设备上的模块,包括 IoT Edge 中心模块。

创建新的 IoT Edge 设备时,它会在 Azure 门户中显示状态代码 417 -- The device's deployment configuration is not set 。 此状态正常,表示设备已准备好接收模块部署。

卸载 IoT Edge for Linux on Windows

若要从设备中删除 Azure IoT Edge for Linux on Windows 安装,请使用以下命令。

  1. 在 Windows 上打开“设置”
  2. 选择“添加或删除程序”
  3. 选择“Azure IoT Edge”应用
  4. 选择“卸载”

后续步骤

通过设备预配服务注册过程,可以在预配新设备时设置设备 ID 和设备孪生标记。 使用这些值可针对具有自动设备管理的单个设备或设备组。 了解如何使用 Azure 门户或使用 Azure CLI 大规模部署和监视 IoT Edge 模块

也可执行以下操作: