Skip to main content

在使用HTTP代理服务器的网络环境中安装和配置Azure IoT Edge设备

分类:  Azure物联网 标签:  #Azure #IoT Edge # 发布于: 2023-06-14 22:42:42

大部分IoT设备会被部署到严酷的生产环境中。这些环境可能包括工厂,实验室,车间,车站等等各种网络受限的环境,这些环境的网络大都会限制公共网络的访问,规则相当严格。HTTP代理服务器在类似的环境中应用最多,因为它容易配置和监控。要代理服务环境中配置Azure IoT Edge设备,需要更多额外的步骤, 我们本章来学些这些配置步骤。

开始配置之前

在开始配置之前一定要检查一下HTTP代理服务器的限制,检查一下代理服务器中是否有添加对端口5671, 443的阻止或者通过规则,确保HTTP代理服务器可用。

另外如果要使用HTTP代理服务器,那么对于Azure IoT Edge的设备要使用AmqpWS 即amqp-with-websocket协议的支持,否者是无法成功链接到Azure IoT Hub

您已经有了Azure账号,如果没有,请参考文章注册一个免费的:
您已经创建了Azure IoT Hub, 如果没有,请参考文章:
您已经创建了一个Azure IoT Edge设备,如果没有,请参考文章:

配置的步骤

我们这里以Ubuntu 20.04作为运行Azure IoT Edge的操作系统。

  • 配置Ubuntu 20.04apt使用代理服务器
  • 配置wget使用代理服务器。
  • 安装moby 容器服务。并配置容器服务使用代理服务器。
  • 安装Azure IoT Edge服务,并配置Azure IoT Edge服务使用代理服务器
  • 配置Azure IoT Edge,使其通过Azure IoT Hub上创建的Azure IoT Edge DeviceSAS链接字符串链接到Azure IoT Hub
  • 更改配置Azure IoT Edge配置文件使得使用edgeAgent系统模块使用amqpws协议和添加Http代理服务器
  • 通过Azure Portal安装edgeHub系统模块。

以上就是我们配置的步骤, 接下来我们一一详解:

配置Ubuntu 20.04apt使用代理服务器

ssh到服务器,使用命令:

sudo nano /etc/apt/apt.conf

编辑该文件,添加内容:

Acquire::http::Proxy "http://yourproxyaddress:proxyport";

注意代理服务器改成您自己的。

保存后,运行:

sudo apt-get update
sudo apt-get upgrade

如果这里可以正常的更新,那么说明apt的代理服务器配置成功了。

配置wget使用代理服务器

我们需要使用wget下载微软提供的安装包,这个包会更新微软的软件库源信息以及签名。要在代理服务器的环境下使用wget就需要也需要配置代理服务器

export use_proxy=yes
export http_proxy="http://yourproxyaddress:proxyport"
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb

这样会下载回来一个deb包,我们使用如下的命令来安装该包

sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

然后再次更新

sudo apt-get update
sudo apt-get upgrade

安装moby容器服务,并配置该服务使用代理服务器

默认使用moby容器服务,由于我们安装Azure IoT Edge的模块都是需要Docker从库里抓取镜像,因此是需要给moby配置代理服务器的。

我们先来安装:

sudo apt-get update; \
  sudo apt-get install moby-engine

安装完成后,配置一下log driver, 编辑文件:

sudo nano /etc/docker/daemon.json

在该文件中输入如下的内容:

    {
      "log-driver": "local"
    }

跟着我们来配置docker的代理服务器。

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf

在该文件里输入如下的内容配置代理服务器:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80"
Environment="HTTPS_PROXY=https://proxy.example.com:443"

如果你的代理服务器就是一个,那就这两个填一样的url就好了, 注意更换代理服务器的地址。

刷新配置,重启服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

检查一下是否配置成功了。

sudo systemctl show --property=Environment docker

安装Azure IoT Edge服务,并配置Azure IoT Edge服务使用代理服务器

我们这一节使用apt安装Azure IoT Edgeruntime, 然后配置两个系统服务使用Http代理服务

sudo apt-get update; \
  sudo apt-get install aziot-edge defender-iot-micro-agent-edge

安装完成后,配置系统服务aziot-edgedaziot-identityd使用代理服务器

sudo systemctl edit aziot-edged

输入如下的内容:

[Service]
Environment=https_proxy=<proxy URL>

保存后退出

sudo systemctl edit aziot-identityd

输入如下的内容,保存后退出:

[Service]
Environment=https_proxy=<proxy URL>

重新载入系统配置和重启服务:

sudo systemctl daemon-reload
sudo iotedge system restart

可以使用如下的命令检查配置输出是否正确:

systemctl show --property=Environment aziot-edged
systemctl show --property=Environment aziot-identityd

到这里Azure IoT Edge的系统服务配置完成。

配置Azure IoT Edge,使其通过Azure IoT Hub上创建的Azure IoT Edge DeviceSAS链接字符

在配置Azure IoT Edge链接到Azure IoT Hub之前,我们必须要已经完成了:

  • 创建一个Azure IoT Hub
  • Azure IoT Hub里创建一个IoT Edge设备

关于如何创建这二者,您可以参考我之前的文章:

  1. 我们首先需要拿到Azure IoT Edge的链接字符串

    请遵行如下的步骤拿到链接字符串:

    a. 登录到Azure Portal, 找到您的Azure IoT Hub资源。然后选择左侧菜单的IoT Edge, 如下图:


    b.然后从列表中选择设备名:


    c.取得设备链接字符串:

    拿到链接字符串之后,配置该设备链接到:拿到链接字符串之后,配置该设备链接到:

  2. 拿到链接字符串之后,配置该设备链接到Azure IoT Hub:
        sudo iotedge config mp --connection-string 'PASTE_DEVICE_CONNECTION_STRING_HERE'
        sudo iotedge config apply -c '/etc/aziot/config.toml'

至此我们的设备已经算是可以链接到Azure IoT Hub了。

注意
需要注意的是Azure IoT Edge的运行环境默认情况仅仅是安装了一个必须的系统模块edgeAgent, 该模块要和Azure IoT Hub通讯,我们仍然需要配置http代理服务器。

更改配置Azure IoT Edge配置文件使得使用edgeAgent系统模块使用amqpws协议和添加Http代理服务器

我们通过更改配置文件/etc/aziot/config.toml 来配置系统模块edgeAgent

sudo nano /etc/aziot/config.toml

在该文件中找到区块:

[agent.env]
# "RuntimeLogLevel" = "debug"
UpstreamProtocol = "AmqpWs"
https_proxy = "<proxy URL>"

注意这里必须是协议AmqpWs, 大小写都不能出错。

然后重新刷新配置文件:

sudo iotedge config apply -c '/etc/aziot/config.toml'

重新刷新系统配置,重启服务:

sudo systemctl daemon-reload
sudo iotedge system restart

安装和配置edge Hub系统模块

Azure IoT edge运行时安装时仅仅安装了一个edgeAgent模块,要使得Azure IoT Edge设备可以正常的运行,您还得安装Edge Hub模块,我们可以通过Azure Portal来完成这个步骤。

  1. 登陆到Azure Portal找到您的Azure IoT Hub资源,然后从左侧菜单选择IoT Edge,从列表里找到您的IoT Edge设备,然后如下图:


  2. 选择runtime setting, 如下图:


  3. 如下图配置edgeAgent:

    2处填写:mcr.microsoft.com/azureiotedge-agent:1.3, 注意后面的1.3是当前的版本号,如果你想了解其他的版本号,可以到https://mcr.microsoft.com/en-us/product/azureiotedge-agent/tags, 查看最新的版本号.
    3处填写变量名https_proxy, 4处就是你的代理服务器了

  4. 如下图配置EdgeHub:

    2处填写:mcr.microsoft.com/azureiotedge-hub:1.3, 注意后面的1.3是当前的版本号,如果你想了解其他的版本号,可以到https://mcr.microsoft.com/en-us/product/azureiotedge-hub/tags, 查看最新的版本号. 3处填写变量名https_proxy, 4处就是你的代理服务器了

然后就直接下一步下一步,到最后create完成部署就好了。

在这个过程中要稍等一下,因为拉取镜像,配置镜像都是需要一会儿的。最后在Azure Portal上就可以到配置成功了。