IoT Edge設備將發(fā)送HTTPS請求以與IoT中心進行通信。如果設備已連接到使用代理服務器的網(wǎng)絡,則需要將IoT Edge運行時配置為通過該服務器進行通信。如果代理服務器發(fā)出不通過IoT Edge中心路由的HTTP或HTTPS請求,則可能還會影響各個IoT Edge模塊。
本文將引導你完成以下四個步驟,來配置并管理代理服務器后面的IoT Edge設備:
1.在設備上安裝IoT Edge運行時
IoT Edge安裝腳本從Internet提取包和文件,因此,設備需要通過代理服務器通信,以發(fā)出這些請求。對于Windows設備,安裝腳本還會提供脫機安裝選項。
此步驟是首次設置IoT Edge設備時對其進行配置的一次性過程。更新IoT Edge運行時時,也需要使用相同的連接。
2.在設備上配置Docker守護程序和IoT Edge守護程序
IoT Edge使用設備上的兩個守護程序,這些守護程序需要通過代理服務器發(fā)出Web請求。IoT Edge守護程序負責與IoT中心通信。Moby守護程序負責容器管理,因此將與容器注冊表通信。
此步驟是首次設置IoT Edge設備時對其進行配置的一次性過程。
3.在設備上的config.yaml文件中配置IoT Edge代理屬性
IoT Edge守護程序最初會啟動edgeAgent模塊。然后,edgeAgent模塊從IoT中心檢索部署清單,并啟動其他所有模塊。要使IoT Edge代理能夠與IoT中心建立初始連接,請在設備本身上手動配置edgeAgent模塊環(huán)境變量。建立初始連接后,可以遠程配置edgeAgent模塊。
此步驟是首次設置IoT Edge設備時對其進行配置的一次性過程。
4.針對將來的所有模塊部署設置環(huán)境變量,使任何模塊都可以通過代理進行通信
設置IoT Edge設備并通過代理服務器將其連接到IoT中心后,需要在將來的所有模塊部署中保持該連接。
此步驟是遠程執(zhí)行的持續(xù)過程,目的是在每次更換新模塊或更新部署后,設備仍可通過代理服務器通信。
知道你的代理URL
在開始執(zhí)行本文中的任何步驟之前,需要知道你的代理URL。
代理URL采用以下格式:protocol://proxy_host:proxy_port。
·protocol是HTTP或HTTPS。Docker守護程序可以根據(jù)容器注冊表設置使用任一協(xié)議,但IoT Edge守護程序和運行時容器應始終使用HTTP連接到代理。
·proxy_host是代理服務器的地址。如果代理服務器要求進行身份驗證,則可采用user:password proxy_host格式將憑據(jù)作為proxy_host的一部分提供。
·proxy_port是代理用來響應網(wǎng)絡流量的網(wǎng)絡端口。
通過代理安裝運行時
無論IoT Edge設備是在Windows還是Linux上運行,都需要通過代理服務器訪問安裝包。請據(jù)所用的操作系統(tǒng),遵循相應的步驟通過代理服務器安裝IoT Edge運行時。
Linux設備
若要在Linux設備上安裝IoT Edge運行時,請將包管理器配置為通過代理服務器訪問安裝包。例如,設置apt-get以使用http-proxy。配置包管理器后,請按照安裝Azure IoT Edge運行時中的說明照常進行操作。
Windows設備
若要在Windows設備上安裝IoT Edge運行時,需要兩次通過代理服務器執(zhí)行操作。第一個連接用于下載安裝程序腳本文件,第二個連接用于在安裝過程中下載必需的組件??梢栽赪indows設置中配置代理信息,或直接在PowerShell命令中包含代理信息。
以下步驟演示使用-proxy參數(shù)安裝Windows的示例:
1.Invoke-WebRequest命令需要獲得代理信息才能訪問安裝程序腳本。然后,Deploy-IoTEdge命令需要獲得代理信息才能下載安裝文件。
PowerShell
.{Invoke-WebRequest-proxy<proxy URL>-useb aka.ms/iotedge-win}|Invoke-Expression;Deploy-IoTEdge-proxy<proxy URL>
2.Initialize-IoTEdge命令不需經(jīng)過代理服務器,因此第二步僅需Invoke-WebRequest的代理信息。
PowerShell
.{Invoke-WebRequest-proxy<proxy URL>-useb aka.ms/iotedge-win}|Invoke-Expression;Initialize-IoTEdge
如果擁有不能包含在URL中的復雜代理服務器憑據(jù),請使用-InvokeWebRequestParameters中的-ProxyCredential參數(shù)。例如,
PowerShell
$proxyCredential=(Get-Credential).GetNetworkCredential()
.{Invoke-WebRequest-proxy<proxy URL>-ProxyCredential$proxyCredential-useb aka.ms/iotedge-win}|Invoke-Expression;`
Deploy-IoTEdge-InvokeWebRequestParameters {'-Proxy'='<proxy URL>';'-ProxyCredential'=$proxyCredential}
有關(guān)代理參數(shù)的詳細信息,請參閱Invoke-WebRequest。有關(guān)Windows安裝參數(shù)的詳細信息,請參閱Windows上IoT Edge的PowerShell腳本。
配置守護程序
IoT Edge依賴于IoT Edge設備上運行的兩個守護程序。Moby守護程序發(fā)出Web請求,以從容器注冊表中拉取容器映像。IoT Edge守護程序發(fā)出Web請求,以與IoT中心進行通信。
Moby和IoT Edge守護程序都需要配置為使用代理服務器持續(xù)獲得設備功能。需在最初設置設備期間,在IoT Edge設備上執(zhí)行此步驟。
Moby守護程序
由于Moby是基于Docker的,因此若要使用環(huán)境變量配置Moby守護程序,請參閱Docker文檔。大多數(shù)容器注冊表(包括DockerHub和Azure容器注冊表)支持HTTPS請求,因此,你應當設置的變量為HTTPS_PROXY。如果要從不支持傳輸層安全性(TLS)的注冊表中拉取映像,則應當設置HTTP_PROXY。
選擇適用于IoT Edge設備操作系統(tǒng)的文章:
·在Linux上配置Docker守護程序Linux設備上的Moby守護程序保留“Docker”這一名稱。
·在Windows上配置Docker守護程序Windows設備上的Moby守護程序名為iotedge-moby。之所以讓這些名稱保持不同,是因為可能會在Windows設備上并行運行Docker Desktop和Moby。
IoT Edge守護程序
IoT Edge守護程序以類似的方式配置為Moby守護程序。使用以下步驟根據(jù)所使用的操作系統(tǒng)為服務設置環(huán)境變量。
IoT Edge守護程序始終使用HTTPS將請求發(fā)送到IoT中心。
Linux
在終端中打開編輯器以配置IoT Edge守護程序。
Bash
sudo systemctl edit iotedge
輸入以下文本,將<proxy URL>替換為代理服務器地址和端口。然后,保存并退出。
ini
[Service]
Environment="https_proxy=<proxy URL>"
刷新服務管理器以選取IoT Edge的新配置。
Bash
sudo systemctl daemon-reload
重新啟動IoT Edge以使更改生效。
Bash
sudo systemctl restart iotedge
確認已創(chuàng)建環(huán)境變量并加載了新配置。
Bash
systemctl show--property=Environment iotedge
Windows
以管理員身份打開PowerShell窗口,運行以下命令來使用新的環(huán)境變量編輯注冊表。將<proxy url>替換為代理服務器地址和端口。
PowerShell
reg add HKLMSYSTEMCurrentControlSetServicesiotedge/v Environment/t REG_MULTI_SZ/d https_proxy=<proxy URL>
重新啟動IoT Edge以使更改生效。
PowerShell
Restart-Service iotedge
配置IoT Edge代理
IoT Edge代理是在任意IoT Edge設備上啟動的第一個模塊。該代理基于IoT Edge config.yaml文件中的信息首次啟動,IoT Edge代理隨后連接到IoT中心以檢索部署清單,其中聲明了應在設備上部署的其他模塊。
需在最初設置設備期間,在IoT Edge設備上執(zhí)行此步驟一次。
1.打開IoT Edge設備上的config.yaml文件。在Linux系統(tǒng)上,此文件位于/etc/iotedge/config.yaml。在Windows系統(tǒng)上,此文件位于C:ProgramDataiotedgeconfig.yaml。配置文件是受保護的,因此,你需要管理權(quán)限才能對其進行訪問。在Linux系統(tǒng)上,請使用sudo命令,然后在偏好的文本編輯器中打開該文件。在Windows上,請以管理員身份打開記事本之類的文本編輯器,然后打開該文件。
2.在config.yaml文件中,找到“Edge代理模塊規(guī)范”部分。IoT Edge代理定義包括可以在其中添加環(huán)境變量的env參數(shù)。
3.刪除作為env參數(shù)占位符的大括號,并在新行上添加新變量。請記住,YAML中的縮進為兩個空格。
YAML
https_proxy:"<proxy URL>"
4.默認情況下,IoT Edge運行時使用AMQP與IoT中心通信。某些代理服務器會阻止AMQP端口。如果是這種情況,則還需要將edgeAgent配置為使用基于WebSocket的AMQP。添加第二個環(huán)境變量。
YAML
UpstreamProtocol:"AmqpWs"
5.將更改保存到config.yaml并關(guān)閉編輯器。重新啟動IoT Edge以使更改生效。
·Linux:
Bash
sudo systemctl restart iotedge
·Windows:
PowerShell
Restart-Service iotedge
配置部署清單
將IoT Edge設備配置為與代理服務器配合使用后,還需要在將來的部署清單中聲明HTTPS_PROXY環(huán)境變量??梢允褂肁zure門戶向?qū)Щ蛘咄ㄟ^編輯部署清單JSON文件,來編輯部署清單。
始終配置兩個運行時模塊(edgeAgent和edgeHub),以通過代理服務器進行通信,從而維持與IoT中心的連接。如果從edgeAgent模塊中刪除了代理信息,則重新建立連接的唯一方法是根據(jù)前一部分中所述,編輯設備上的config.yaml文件。
除了edgeAgent和edgeHub模塊外,其他模塊也可能需要代理配置。需要訪問IoT中心以外的Azure資源(例如blob存儲)的模塊必須已在部署清單文件中指定HTTPS_PROXY變量。
以下過程在IoT Edge設備的整個生命周期中適用。
Azure門戶
使用“設置模塊”向?qū)镮oT Edge設備創(chuàng)建部署時,每個模塊都有一個可在其中配置代理服務器連接的“環(huán)境變量”部分。
若要配置IoT Edge代理和IoT Edge中心模塊,請在向?qū)У牡谝徊街羞x擇“運行時設置”。
將https_proxy環(huán)境變量添加到IoT Edge代理和IoT Edge中心模塊定義。如果在IoT Edge設備的config.yaml文件中包括UpstreamProtocol環(huán)境變量,也請將其添加到IoT Edge代理模塊定義。
添加到部署清單的所有其他模塊都遵循相同的模式。
JSON部署清單文件
如果使用Visual Studio Code中的模板或通過手動創(chuàng)建JSON文件來為IoT Edge設備創(chuàng)建部署,則可以將環(huán)境變量直接添加到每個模塊定義。
使用以下JSON格式:
JSON
"env":{
"https_proxy":{
"value":"<proxy URL>"
}
}
如果包括環(huán)境變量,模塊定義應類似以下edgeHub示例:
JSON
"edgeHub":{
"type":"docker",
"settings":{
"image":"mcr.microsoft.com/azureiotedge-hub:1.1",
"createOptions":""
},
"env":{
"https_proxy":{
"value":"http://proxy.example.com:3128"
}
},
"status":"running",
"restartPolicy":"always"
}
如果在IoT Edge設備的confige.yaml文件中包括UpstreamProtocol環(huán)境變量,也請將其添加到IoT Edge代理模塊定義。
JSON
"env":{
"https_proxy":{
"value":"<proxy URL>"
},
"UpstreamProtocol":{
"value":"AmqpWs"
}
}
使用流量檢查代理
如果你嘗試使用的代理對受TLS保護的連接執(zhí)行流量檢查,請務必注意,使用X.509證書的身份驗證無效。IoT Edge建立了一個TLS通道,該通道使用提供的證書和密鑰進行了端到端加密。如果斷開該通道以進行流量檢查,則代理無法使用正確的憑據(jù)重新建立該通道,并且IoT中心和IoT中心設備預配服務會返回“Unauthorized”錯誤。
若要使用執(zhí)行流量檢查的代理,必須使用共享訪問簽名身份驗證,或者將IoT中心和IoT中心設備預配服務添加到允許列表以避免檢查。