适用于: IoT Edge 1.1
重要
IoT Edge 1.1 终止支持日期为 2022 年 12 月 13 日。 请查看 Microsoft 产品生命周期,了解此产品、服务、技术或 API 的受支持情况。 有关更新到最新版本的 IoT Edge 的详细信息,请参阅 更新 IoT Edge。
在本文中,我们将运行 Linux 的 Azure 虚拟机配置为充当透明网关的 Azure IoT Edge 设备。 透明网关配置允许设备通过网关连接到 Azure IoT 中心,而无需知道网关存在。 同时,与 IoT 中心中的设备交互的用户不知道中间网关设备。 最终,我们将通过将 IoT Edge 模块添加到透明网关,将边缘分析添加到系统中。
注释
本教程中的概念适用于所有版本的 IoT Edge,但你创建的示例设备将运行 IoT Edge 版本 1.1。
本文中的步骤通常由云开发人员执行。
本教程此部分,您将学习如何:
- 创建证书以允许网关设备安全地连接到下游设备。
- 创建 IoT Edge 设备。
- 创建 Azure 虚拟机来模拟 IoT Edge 设备。
先决条件
本文是有关在 IoT Edge 上使用 Azure 机器学习的教程的系列教程的一部分。 本系列中的每个文章都基于上一篇文章中的工作。 如果已直接到达本文,请参阅该系列中的 第一篇文章 。
创建证书
若要使设备充当网关,它需要安全地连接到下游设备。 使用 IoT Edge,可以使用公钥基础结构(PKI)在设备之间设置安全连接。 在这种情况下,我们允许下游 IoT 设备连接到充当透明网关的 IoT Edge 设备。 为了保持合理的安全性,下游设备应确认 IoT Edge 设备的标识。 有关 IoT Edge 设备如何使用证书的详细信息,请参阅 Azure IoT Edge 证书使用情况详细信息。
在本部分中,我们将使用生成并运行的 Docker 映像创建自签名证书。 我们选择使用 Docker 映像来完成此步骤,因为它减少了在 Windows 开发计算机上创建证书所需的步骤数。 若要了解使用 Docker 映像自动化的内容,请参阅 创建演示证书以测试 IoT Edge 设备功能。
登录到开发 VM。
使用路径和名称 c:\edgeCertificates 创建新文件夹。
如果尚未运行,请从 Windows“开始”菜单启动 适用于 Windows 的 Docker 。
打开 Visual Studio Code。
选择 “文件>打开文件夹”,然后选择 C:\source\IoTEdgeAndMlSample\CreateCertificates。
在 “资源管理器” 窗格中,右键单击 dockerfile 并选择“ 生成映像”。
在对话框中,接受映像名称和标记的默认值: createcertificates:latest。
等待生成完成。
注释
你可能会看到有关缺少公钥的警告。 可以放心地忽略此警告。 同样,你会看到一条安全警告,建议你检查或重置图像的权限,但对于此图像,这个警告是可以忽略的。
在 Visual Studio Code 终端窗口中,运行 createcertificates 容器。
docker run --name createcertificates --rm -v c:\edgeCertificates:/edgeCertificates createcertificates /edgeCertificates
Docker 将提示访问 c:\ 驱动器。 选择“共享”。
出现提示时提供您的凭据。
容器运行完成后,在 c:\edgeCertificates 中检查以下文件:
- c:\edgeCertificates\certs\azure-iot-test-only.root.ca.cert.pem
- c:\edgeCertificates\certs\new-edge-device-full-chain.cert.pem
- c:\edgeCertificates\certs\new-edge-device.cert.pem
- c:\edgeCertificates\certs\new-edge-device.cert.pfx
- c:\edgeCertificates\private\new-edge-device.key.pem
将证书上传到 Azure Key Vault
为了安全地存储我们的证书,并使这些证书可从多个设备访问,我们将证书上传到 Azure Key Vault。 如上一列表中所示,我们有两种类型的证书文件:PFX 和 PEM。 我们将 PFX 文件视为要上传到 Key Vault 的 Key Vault 证书。 PEM 文件是纯文本,我们将这些文件视为 Key Vault 机密。 我们将使用与通过运行 Jupyter 笔记本创建的 Azure 机器学习工作区关联的 Key Vault 实例。
从 Azure 门户转到 Azure 机器学习工作区。
在机器学习工作区的概述页中,找到 Key Vault 的名称。
在开发计算机上,将证书上传到 Key Vault。 将 <subscriptionId> 和 <keyvaultname> 替换为你的资源信息。
c:\source\IoTEdgeAndMlSample\CreateCertificates\upload-keyvaultcerts.ps1 -SubscriptionId <subscriptionId> -KeyVaultName <keyvaultname>
如果系统提示,请登录到 Azure。
脚本将运行几分钟,其中输出列出了新的 Key Vault 条目。
注册 IoT Edge 设备
若要将 Azure IoT Edge 设备连接到 IoT 中心,我们首先在中心注册设备。 我们从云中的设备标识获取连接字符串,并使用它在 IoT Edge 设备上配置运行时。 配置的设备连接到中心后,我们可以部署模块并发送消息。 我们还可以通过在 IoT 中心更改物理 IoT Edge 设备的相应设备标识来更改其配置。
在本教程中,我们将使用 Visual Studio Code 注册新的设备标识。 还可以使用 Azure 门户或 Azure CLI 完成这些步骤。 无论选择哪种方法,请确保获取 IoT Edge 设备的设备连接字符串。 可以在 Azure 门户上设备的详细信息页上找到设备连接字符串。
在开发计算机上,打开 Visual Studio Code。
从 Visual Studio Code Explorer 视图中展开 Azure IoT 中心框架。
选择省略号,然后选择“ 创建 IoT Edge 设备”。
为设备指定名称。 为方便起见,我们使用名称 aaTurbofanEdgeDevice ,使其排序到列出的设备顶部。
新设备将显示在设备列表中。
部署 Azure 虚拟机
我们使用安装了并配置了 Azure IoT Edge 运行时的 Ubuntu 18.04 LTS 虚拟机。 部署使用 iotedge-vm-deploy 项目存储库中维护的 Azure 资源管理器模板。 它使用模板中提供的连接字符串预配在上一步中注册的 IoT Edge 设备。
可以使用 Azure 门户或 Azure CLI 部署虚拟机。 我们将显示 Azure 门户步骤。 有关详细信息,请参阅 在 Ubuntu 虚拟机上运行 Azure IoT Edge 。
使用“部署到 Azure”按钮进行部署
若要使用
iotedge-vm-deploy
ARM 模板部署 Ubuntu 18.04 LTS 虚拟机,请单击下面的按钮:在新启动的窗口中,填写可用的表单字段。
领域 DESCRIPTION 订阅 要将虚拟机部署到活动的 Azure 订阅中。 资源组 用于包含该虚拟机及其相关资源的现有或新建的资源组。 DNS 标签前缀 您选择的必需值,用于为虚拟机主机名添加前缀。 管理员用户名 在部署中将被赋予根权限的用户名。 设备连接字符串 在您预期的IoT 中心内创建的设备的设备连接字符串。 VM 大小 要部署的虚拟机的大小 Ubuntu OS 版本 要在基础虚拟机上安装的 Ubuntu OS 版本。 位置 要部署虚拟机的地理区域,此值默认为所选资源组的位置。 身份验证类型 根据偏好选择“sshPublicKey”或“密码”。 管理员密码或密钥 SSH 公钥的值或密码的值,具体取决于所选的身份验证类型。 填写所有字段后,选中页面底部的复选框以接受条款,然后选择 “查看 + 创建 和 创建 ”以开始部署。
在 Azure 门户中导航到虚拟机。 可以通过资源组或通过在门户登陆页上选择 Azure 服务下的虚拟机来找到它。
记下虚拟机的 DNS 名称 。 需要它才能登录到虚拟机。
连接到 IoT Edge 设备
打开命令提示符,并使用以下命令登录到虚拟机。 根据上一部分输入自己的用户名和 DNS 名称信息。
ssh <adminUsername>@<DNS_name>
当系统提示验证主机的真实性时,请输入 “是 ”,然后选择 Enter。
出现提示时,请提供密码。
Ubuntu 显示欢迎消息,然后应会看到如下所示
<username>@<machinename>:~$
的提示。
下载 Key Vault 证书
本文前面部分将证书上传到 Key Vault,使其可用于 IoT Edge 设备和下游设备。 下游设备使用 IoT Edge 设备作为网关来与 IoT 中心通信。
本教程稍后将处理下游设备。 在本部分中,将证书下载到 IoT Edge 设备。
在 Linux 虚拟机上的 SSH 会话中,使用 Azure CLI 登录到 Azure。
az login
系统会提示你打开浏览器到 Microsoft设备登录 页并提供唯一代码。 可以在本地计算机上执行这些步骤。 完成身份验证后,关闭浏览器窗口。
成功进行身份验证后,Linux VM 将登录并列出 Azure 订阅。
设置要用于 Azure CLI 命令的 Azure 订阅。
az account set --subscription <subscriptionId>
在 VM 上为证书创建目录。
sudo mkdir /edgeMlCertificates
下载存储在密钥保管库中的证书:new-edge-device-full-chain.cert.pem、new-edge-device.key.pem 和 azure-iot-test-only.root.ca.cert.pem。
key_vault_name="<key vault name>" sudo az keyvault secret download --vault-name $key_vault_name --name new-edge-device-full-chain-cert-pem -f /edgeMlCertificates/new-edge-device-full-chain.cert.pem sudo az keyvault secret download --vault-name $key_vault_name --name new-edge-device-key-pem -f /edgeMlCertificates/new-edge-device.key.pem sudo az keyvault secret download --vault-name $key_vault_name --name azure-iot-test-only-root-ca-cert-pem -f /edgeMlCertificates/azure-iot-test-only.root.ca.cert.pem
更新 IoT Edge 设备配置
IoT Edge 运行时使用文件 /etc/iotedge/config.yaml 来保留其配置。 我们需要更新此文件中的两段信息:
- 证书:用于与下游设备建立连接的证书
- 主机名:VM IoT Edge 设备的完全限定域名 (FQDN)
通过直接编辑 config.yaml 文件更新证书和主机名。
打开 config.yaml 文件。
sudo nano /etc/iotedge/config.yaml
通过删除前导 # 并设置路径来更新 config.yaml 文件的证书部分,以便该文件如以下示例所示:
certificates: device_ca_cert: "/edgeMlCertificates/new-edge-device-full-chain.cert.pem" device_ca_pk: "/edgeMlCertificates/new-edge-device.key.pem" trusted_ca_certs: "/edgeMlCertificates/azure-iot-test-only.root.ca.cert.pem"
确保 证书: 行没有前面的空格,并且每个嵌套证书都缩进两个空格。
右键单击 nano 会将剪贴板的内容粘贴到当前光标位置。 若要替换字符串,请使用键盘箭头转到要替换的字符串,删除字符串,然后右键单击以粘贴缓冲区。
在 Azure 门户中,转到虚拟机。 从 “概述 ”部分复制 DNS 名称(计算机 FQDN)。
将 FQDN 粘贴到config.yml文件的主机名部分。 请确保名称全部为小写。
hostname: '<machinename>.<region>.cloudapp.azure.com'
通过选择 Ctrl+X、 Y 和 Enter 保存并关闭文件。
重启 IoT Edge 守护程序。
sudo systemctl restart iotedge
检查 IoT Edge 守护程序的状态。 命令后,输入 :q 退出。
systemctl status iotedge
故障排除
如果在状态中看到了错误(带“[ERROR]”前缀的彩色文本),请检查守护程序日志以了解详细错误信息。
journalctl -u iotedge --no-pager --no-full
有关解决错误的详细信息,请查看 故障排除 页。
清理资源
本教程是一组的一部分,其中每篇文章都基于上一篇文章中完成的工作。 等待清理所有资源,直到完成最终教程。
后续步骤
我们刚刚完成了将 Azure VM 配置为 IoT Edge 透明网关。 我们首先生成上传到 Key Vault 的测试证书。 接下来,我们使用脚本和资源管理器模板从 Azure 市场部署具有 Ubuntu Server 16.04 LTS + Azure IoT Edge 运行时映像的 VM。 启动并运行 VM 后,我们通过 SSH 进行连接。 然后,我们登录到 Azure 并从 Key Vault 下载了证书。 我们通过更新 config.yaml 文件,对 IoT Edge 运行时的配置进行了多项更新。
继续阅读下一篇文章,生成 IoT Edge 模块。