共用方式為


設定 IoT Edge 裝置以透過 Proxy 伺服器進行通訊

適用於:IoT Edge 1.5 複選標記 IoT Edge 1.5 IoT Edge 1.4 複選標記 IoT Edge 1.4

重要

支援 IoT Edge 1.5 LTS 和 IoT Edge 1.4 LTS 版本。 IoT Edge 1.4 LTS 於 2024 年 11 月 12 日結束生命週期。 如果您是舊版,請參閱更新 IoT Edge

IoT Edge 裝置會傳送 HTTPS 要求,以與 IoT 中樞 通訊。 如果您將裝置連線到使用 Proxy 伺服器的網路,您必須設定 IoT Edge 執行時間以透過伺服器進行通訊。 如果 Proxy 伺服器提出 HTTP 或 HTTPS 要求,而您尚未透過 IoT Edge 中樞路由傳送,Proxy 伺服器也會影響個別的 IoT Edge 模組。

本文將逐步解說下列四個步驟,以設定及管理 Proxy 伺服器後方的 IoT Edge 裝置:

  1. 在裝置上安裝IoT Edge運行時間

    IoT Edge 安裝腳本會從因特網提取套件和檔案,因此您的裝置必須透過 Proxy 伺服器進行通訊,才能提出這些要求。 針對 Windows 裝置,安裝腳本也會提供離線安裝選項。

    此步驟是當您第一次設定IoT Edge裝置時設定IoT Edge裝置的一次性程式。 當您更新IoT Edge運行時間時,也需要這些相同的連線。

  2. 在裝置上設定IoT Edge和容器運行時間

    IoT Edge 負責與 IoT 中樞 的通訊。 容器運行時間負責容器管理,因此會與容器登錄進行通訊。 這兩個元件都需要透過 Proxy 伺服器提出 Web 要求。

    此步驟是當您第一次設定IoT Edge裝置時設定IoT Edge裝置的一次性程式。

  3. 在裝置上的組態檔中設定IoT Edge代理程序屬性

    IoT Edge 精靈一開始會啟動 edgeAgent 模組。 然後,edgeAgent 模組會從 IoT 中樞 擷取部署指令清單,並啟動所有其他模組。 在裝置本身手動設定edgeAgent模組環境變數,讓IoT Edge代理程式能夠對IoT 中樞進行初始連線。 初始連線之後,您可以從遠端設定edgeAgent模組。

    此步驟是當您第一次設定IoT Edge裝置時設定IoT Edge裝置的一次性程式。

  4. 針對所有未來的模組部署,針對透過 Proxy 通訊的任何模組設定環境變數

    設定 IoT Edge 裝置並透過 Proxy 伺服器連線到 IoT 中樞 之後,您必須在所有未來的模組部署中維護連線。

    此步驟是遠端完成的進行中程式,因此每個新的模組或部署更新都會維護裝置透過 Proxy 伺服器進行通訊的能力。

瞭解您的 Proxy URL

開始本文中的任何步驟之前,您必須知道 Proxy URL。

Proxy URL 採用下列格式: protocol://proxy_hostproxy_port

  • 通訊 協定 為 HTTP 或 HTTPS。 Docker 精靈可以使用任一通訊協議,視您的容器登錄設定而定,但 IoT Edge 精靈和運行時間容器應該一律使用 HTTP 來聯機到 Proxy。

  • proxy_host是 Proxy 伺服器的位址。 如果您的 Proxy 伺服器需要驗證,您可以以下列格式提供認證作為 Proxy 主機的一部分:userpassword@proxy_host。

  • proxy_port是 Proxy 回應網路流量的網路埠。

透過 Proxy 安裝 IoT Edge

不論 IoT Edge 裝置是在 Windows 或 Linux 上執行,您都需要透過 Proxy 伺服器存取安裝套件。 根據您的作業系統,請遵循步驟,透過 Proxy 伺服器安裝 IoT Edge 運行時間。

Linux 裝置

如果您要在 Linux 裝置上安裝 IoT Edge 執行時間,請將套件管理員設定為透過 Proxy 伺服器存取安裝套件。 例如, 設定apt-get 以使用 HTTP-proxy。 設定套件管理員之後,請依照一般方式安裝 Azure IoT Edge 運行時間中的指示操作。

在 Windows 上使用適用於 Linux 的 IoT Edge 的 Windows 裝置

如果您要在 Windows 上使用適用於 Linux 的 IoT Edge 安裝 IoT Edge 運行時間,則預設會在 Linux 虛擬機上安裝 IoT Edge。 您不需要安裝或更新任何其他步驟。

使用 Windows 容器的 Windows 裝置

如果您要在 Windows 裝置上安裝 IoT Edge 執行時間,您必須經過 Proxy 伺服器兩次。 第一個聯機會下載安裝程式腳本檔案,而第二個連接是在安裝期間下載必要的元件。 您可以在 Windows 設定中設定 Proxy 資訊,或直接在 PowerShell 命令中包含 Proxy 資訊。

下列步驟示範使用 -proxy 自變數安裝 Windows 的範例:

  1. Invoke-WebRequest 命令需要 Proxy 資訊才能存取安裝程式腳本。 接著,Deploy-IoTEdge 命令需要 Proxy 資訊才能下載安裝檔案。

    . {Invoke-WebRequest -proxy <proxy URL> -useb aka.ms/iotedge-win} | Invoke-Expression; Deploy-IoTEdge -proxy <proxy URL>
    
  2. Initialize-IoTEdge 命令不需要通過 Proxy 伺服器,因此第二個步驟只需要 Invoke-WebRequest 的 Proxy 資訊。

    . {Invoke-WebRequest -proxy <proxy URL> -useb aka.ms/iotedge-win} | Invoke-Expression; Initialize-IoTEdge
    

如果您有無法包含在 URL 中的 Proxy 伺服器的複雜認證,請使用 -ProxyCredential 中的 -InvokeWebRequestParameters參數。 例如,

$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 }

如需 Proxy 參數的詳細資訊,請參閱 Invoke-WebRequest

設定 IoT Edge 和 Moby

IoT Edge 依賴在 IoT Edge 裝置上執行的兩個精靈。 Moby 精靈會提出 Web 要求,以從容器登錄提取容器映射。 IoT Edge 精靈會提出 Web 要求,以與 IoT 中樞 通訊。

您必須同時設定 Moby 和 IoT Edge 精靈,才能使用 Proxy 伺服器進行中的裝置功能。 此步驟會在初始裝置設定期間於IoT Edge裝置上執行。

Moby 精靈

由於Moby建置在 Docker 上,請參閱 Docker 檔,以使用環境變數設定 Moby 精靈。 大部分的容器登錄(包括 DockerHub 和 Azure Container Registries)都支援 HTTPS 要求,因此您應該設定的參數HTTPS_PROXY。 如果您要從不支援傳輸層安全性的登錄提取映像(TLS),則您應該設定 HTTP_PROXY 參數。

選擇適用於 IoT Edge 裝置作業系統的文章:

  • 在 Linux 上設定 Docker 精靈 Linux 上的 Moby 精靈會保留 Docker 名稱。
  • 在 Windows 裝置上的 Moby 精靈上設定 Docker 精靈,稱為 iotedge-moby。 名稱不同,因為可以在 Windows 裝置上平行執行 Docker Desktop 和 Moby。

IoT Edge 精靈

IoT Edge 精靈類似於Moby精靈。 使用下列步驟,根據操作系統設定服務的環境變數。

IoT Edge 精靈一律會使用 HTTPS 將要求傳送至 IoT 中樞。

Linux

在終端機中開啟編輯器,以設定IoT Edge精靈。

sudo systemctl edit aziot-edged

輸入下列文字,將 <Proxy URL> 取代為您的 Proxy 伺服器位址和埠。 然後,儲存並結束。

[Service]
Environment="https_proxy=<proxy URL>"

從 1.2 版開始,IoT Edge 會使用 IoT 身分識別服務來處理裝置布建 IoT 中樞 或 IoT 中樞 裝置布建服務。 在終端機中開啟編輯器,以設定IoT身分識別服務精靈。

sudo systemctl edit aziot-identityd

輸入下列文字,將 <Proxy URL> 取代為您的 Proxy 伺服器位址和埠。 然後,儲存並結束。

[Service]
Environment="https_proxy=<proxy URL>"

重新整理服務管理員以挑選新的組態。

sudo systemctl daemon-reload

重新啟動IoT Edge系統服務,讓這兩個精靈的變更生效。

sudo iotedge system restart

確認您的環境變數和新組態都存在。

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

在 Windows 上使用適用於 Linux 的 IoT Edge 的 Windows

在 Windows 虛擬機上登入適用於 Linux 的 IoT Edge:

Connect-EflowVm

請遵循本文的Linux一節相同的步驟來設定IoT Edge精靈。

使用 Windows 容器的 Windows

以系統管理員身分開啟 PowerShell 視窗,然後執行下列命令,以使用新的環境變數編輯登錄。 將 Proxy URL> 取代<為您的 Proxy 伺服器地址和埠。

reg add HKLM\SYSTEM\CurrentControlSet\Services\iotedge /v Environment /t REG_MULTI_SZ /d https_proxy=<proxy URL>

重新啟動IoT Edge,讓變更生效。

Restart-Service iotedge

設定 IoT Edge 代理程式

IoT Edge 代理程式是在任何 IoT Edge 裝置上啟動的第一個模組。 此課程模組會根據IoT Edge組態檔中的資訊,第一次啟動。 IoT Edge 代理程式接著會連線到 IoT 中樞,以擷取部署指令清單。 指令清單會宣告裝置應該部署的其他模組。

在初始裝置設定期間,此步驟會在IoT Edge裝置上執行一次。

  1. 在您的IoT Edge裝置上開啟組態檔: /etc/aziot/config.toml。 您需要系統管理許可權才能存取組態檔。 在 Linux 系統上,在慣用文字編輯器中開啟檔案之前,請先使用 sudo 命令。

  2. 在組態檔中,尋找 [agent] 區段,其中包含啟動時要使用的edgeAgent模組的所有組態資訊。 檢查以確定區 [agent] 段沒有批注。 [agent]如果區段遺失,請將它新增至 config.toml。 IoT Edge 代理程式定義包含一個 [agent.env] 子區段,您可以在其中新增環境變數。

  3. https_proxy 參數新增至環境變數區段,並將 Proxy URL 設定為其值。

    [agent]
    name = "edgeAgent"
    type = "docker"
    
    [agent.config]
    image = "mcr.microsoft.com/azureiotedge-agent:1.5"
    
    [agent.env]
    # "RuntimeLogLevel" = "debug"
    # "UpstreamProtocol" = "AmqpWs"
    "https_proxy" = "<proxy URL>"
    
  4. IoT Edge 執行時間預設會使用AMQP與 IoT 中樞 通訊。 某些 Proxy 伺服器會封鎖AMQP埠。 如果是這種情況,則您也需要設定 edgeAgent 以透過 WebSocket 使用 AMQP。 取消 UpstreamProtocol 批注 參數。

    [agent.config]
    image = "mcr.microsoft.com/azureiotedge-agent:1.5"
    
    [agent.env]
    # "RuntimeLogLevel" = "debug"
    "UpstreamProtocol" = "AmqpWs"
    "https_proxy" = "<proxy URL>"
    
  5. https_proxy 參數新增至環境變數區段,並將 Proxy URL 設定為其值。

    [agent]
    name = "edgeAgent"
    type = "docker"
    
    [agent.config]
    image = "mcr.microsoft.com/azureiotedge-agent:1.5"
    
    [agent.env]
    # "RuntimeLogLevel" = "debug"
    # "UpstreamProtocol" = "AmqpWs"
    "https_proxy" = "<proxy URL>"
    
  6. IoT Edge 執行時間預設會使用AMQP與 IoT 中樞 通訊。 某些 Proxy 伺服器會封鎖AMQP埠。 如果是這種情況,則您也需要設定 edgeAgent 以透過 WebSocket 使用 AMQP。 取消 UpstreamProtocol 批注 參數。

    [agent.config]
    image = "mcr.microsoft.com/azureiotedge-agent:1.5"
    
    [agent.env]
    # "RuntimeLogLevel" = "debug"
    "UpstreamProtocol" = "AmqpWs"
    "https_proxy" = "<proxy URL>"
    
  7. 儲存變更並關閉編輯器。 套用最新的變更。

    sudo iotedge config apply
    
  8. 確認您的 Proxy 設定已在 區Env段中使用 docker inspect edgeAgent 傳播。 如果沒有,您必須重新建立容器。

    sudo docker rm -f edgeAgent
    
  9. IoT Edge 運行時間應在一分鐘內重新建立 edgeAgentedgeAgent一旦容器再次執行,請使用 docker inspect edgeAgent 命令來確認 Proxy 設定是否符合組態檔。

設定部署資訊清單

設定 IoT Edge 裝置以使用 Proxy 伺服器之後,請在未來的部署指令清單中宣告HTTPS_PROXY環境變數。 您可以使用 Azure 入口網站 精靈或編輯部署指令清單 JSON 檔案來編輯部署指令清單。

請一律設定兩個運行時間模組edgeAgent和edgeHub,以透過 Proxy 伺服器進行通訊,讓它們能夠維持與 IoT 中樞的連線。 如果您從edgeAgent模組移除 Proxy資訊,重新建立連線的唯一方法是在裝置上編輯組態檔,如上一節所述。

除了edgeAgent和edgeHub模組之外,其他模組可能需要 Proxy 設定。 除了 blob 記憶體等 IoT 中樞 以外,需要存取 Azure 資源的模組必須具有部署指令清單檔中指定的HTTPS_PROXY變數。

下列程式適用於IoT Edge裝置的整個生命週期。

Azure 入口網站

當您使用 [ 設定模組 精靈] 來建立 IoT Edge 裝置的部署時,每個模組都有一個 [環境變數 ] 區段,您可以在其中設定 Proxy 伺服器連線。

若要設定 IoT Edge 代理程式和 IoT Edge 中樞模組,請在精靈的第一個步驟中選取 [運行時間 設定]。

如何設定進階Edge運行時間設定的螢幕快照。

https_proxy 環境變數新增至 IoT Edge代理程式和IoT Edge中樞模組 運行時間設定定義。 如果您在 IoT Edge裝置的組態檔中包含UpstreamProtocol 環境變數,請將它新增至IoT Edge代理程式模組定義。

您新增至部署指令清單的其他所有模組都遵循相同的模式。 選取 [套用] 以儲存變更。

JSON 部署指令清單檔案

如果您使用 Visual Studio Code 中的範本或手動建立 JSON 檔案,為 IoT Edge 裝置建立部署,您可以將環境變數直接新增至每個模組定義。 如果您未在 Azure 入口網站 中新增它們,請將它們新增至您的 JSON 指令清單檔案。 以您自己的值取代 <proxy URL>

使用下列 JSON 格式:

"env": {
    "https_proxy": {
        "value": "<proxy URL>"
    }
}

包含環境變數之後,您的模組定義看起來應該像下列edgeHub範例:

"edgeHub": {
    "type": "docker",
    "settings": {
        "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
        "createOptions": "{}"
    },
    "env": {
        "https_proxy": {
            "value": "http://proxy.example.com:3128"
        }
    },
    "status": "running",
    "restartPolicy": "always"
}

如果您在 IoT Edge裝置的 confige.yaml 檔案中包含 UpstreamProtocol 環境變數,請將它新增至 IoT Edge 代理程式模組定義。

"env": {
    "https_proxy": {
        "value": "<proxy URL>"
    },
    "UpstreamProtocol": {
        "value": "AmqpWs"
    }
}

使用流量檢查 Proxy

Zscaler 之類的某些 Proxy 可以檢查 TLS 加密的流量。 在 TLS 流量檢查期間,Proxy 傳回的憑證不是來自目標伺服器的憑證,而是 Proxy 本身跟證書所簽署的憑證。 根據預設,IoT Edge 模組(包括 edgeAgentedgeHub)不會信任此 Proxy 的憑證,TLS 交握會失敗。

若要解決失敗的交握,請設定操作系統和IoT Edge模組,以使用下列步驟信任 Proxy 的跟證書。

  1. 在主機操作系統的受信任跟證書存儲中設定 Proxy 憑證。 如需如何安裝跟證書的詳細資訊,請參閱 將根 CA 安裝到 OS 證書存儲

  2. 藉由參考信任套件組合中的憑證,將您的IoT Edge裝置設定為透過 Proxy 伺服器通訊。 如需如何設定信任套件組合的詳細資訊,請參閱管理受信任的根 CA(信任套件組合)。

若要為IoT Edge未管理的容器設定流量檢查 Proxy支援,請連絡您的 Proxy 提供者。

IoT Edge 與通訊目的地的完整功能變數名稱 (FQDN)

如果您的 Proxy 防火牆要求您將所有 FQDN 新增至因特網連線的允許清單,請檢閱來自 允許來自 IoT Edge 裝置 連線的清單,以判斷要新增的 FQDN。

下一步

深入瞭解IoT Edge運行時間的角色

針對 Azure IoT Edge 的常見問題和解決方案,針對安裝和設定錯誤進行疑難解答