準備在生產環境中部署 IoT Edge 解決方案

適用於:IoT Edge 1.4 checkmark IoT Edge 1.4

重要

支援的版本是 IoT Edge 1.4。 如果您是舊版,請參閱更新 IoT Edge

當您準備好將IoT Edge解決方案從開發帶入生產環境時,請確定其已設定為持續效能。

本文中提供的資訊並不完全相等。 為了協助您排定優先順序,每個區段都會以將工作分成兩個區段的清單開始:請務必在進入生產環境之前完成,或對您有所説明

裝置設定

IoT Edge 裝置可以是任何項目,包括 Raspberry Pi、膝上型電腦或伺服器上執行的虛擬機器。 您可以實際或透過虛擬連線存取裝置,或者裝置可能長時間受到隔離。 無論是哪種方式,您都想確保其設定為能妥善執行。

  • 重要

    • 安裝生產憑證
    • 研擬裝置管理方案
    • 使用 Moby 當作容器引擎
  • 有用

    • 選擇上游通訊協定

安裝生產憑證

生產環境中的每個 IoT Edge 裝置都要安裝裝置憑證授權單位 (CA) 的憑證。 該 CA 憑證接著會在組態檔中宣告至 IoT Edge 運行時間。 針對開發和測試案例,如果組態檔中未宣告任何憑證,IoT Edge 運行時間就會建立暫存憑證。 不過,這些暫時憑證三個月後就會過期,而且對於生產情節並不安全。 針對生產案例,您應該從自我簽署的證書頒發機構單位或從商業證書頒發機構單位購買自己的裝置 CA 憑證。

若要了解裝置 CA 憑證的角色,請參閱 Azure IoT Edge 如何使用憑證

如需如何在IoT Edge裝置上安裝憑證並從組態檔參考憑證的詳細資訊,請參閱 管理IoT Edge裝置上的憑證。

研擬裝置管理方案

在生產環境中設置任何裝置前,應先了解如何管理未來的更新作業。 若是 IoT Edge 裝置,要更新的元件清單可能包含:

  • 裝置韌體
  • 操作系統連結庫
  • 容器引擎,例如Moby
  • IoT Edge
  • CA 憑證

IoT 中樞的裝置更新是一項服務,可讓您部署IoT Edge裝置的無線更新(OTA)。

更新IoT Edge的替代方法需要實體或 SSH 存取IoT Edge裝置。 如需詳細資訊,請參閱 更新IoT Edge運行時間。 若要更新多個裝置,請考慮將更新步驟新增至腳本,或使用 Ansible 之類的自動化工具。

使用 Moby 當作容器引擎

容器引擎是所有 IoT Edge 裝置的先決條件。 生產環境僅支援 Moby 引擎。 Docker 等其他容器引擎可搭配 IoT Edge 使用,也可以使用這些引擎進行開發。 搭配 Azure IoT Edge 使用時可重新分配 Moby 引擎,而且 Microsoft 可提供此引擎的相關服務。

選擇上游通訊協定

您可以針對IoT Edge代理程式和IoT Edge中樞,設定用於上游通訊的通訊協定(決定所使用的埠),以 IoT 中樞。 預設的通訊協定是 AMQP,但您可以根據網路設定變更。

這兩個執行階段模組都有 UpstreamProtocol 環境變數。 有效的變數值為:

  • MQTT
  • AMQP
  • MQTTWS
  • AMQPWS

在裝置本身的組態檔中,設定 IoT Edge 代理程式的 UpstreamProtocol 變數。 舉例來說,如果您的 IoT Edge 裝置位於封鎖 AMQP 連接埠的 Proxy 伺服器後方,可能需要設定 IoT Edge 代理程式,使用透過 WebSocket 的 AMQP (AMQPWS),建立 IoT 中樞的初始連線。

一旦您的 IoT Edge 裝置連線,請務必在未來的部署中繼續設定這兩個執行階段模組的 UpstreamProtocol 變數。 設定IoT Edge裝置以透過 Proxy 伺服器通訊中提供了此程式的範例。

部署

  • 有用
    • 與上游的通訊協定一致
    • 為系統模組設定主機儲存體
    • 減少IoT Edge中樞所使用的記憶體空間
    • 在部署指令清單中使用正確的模組映像
    • 請注意使用自定義模組時的對應項大小限制
    • 設定如何套用模組的更新

與上游的通訊協定一致

如果您已在 IoT Edge 裝置上設定 IoT Edge 代理程式,使用預設 AMQP 以外的其他通訊協定,就應在所有後續部署中宣告相同通訊協定。 舉例來說,如果您的 IoT Edge 裝置位於封鎖 AMQP 連接埠的 Proxy 伺服器後方,可能是設定該裝置透過 WebSocket (AMQPWS) 使用 AMQP 連線。 將模組部署到裝置時,請為 IoT Edge 代理程式和 IoT Edge 中樞設定相同 AMQPWS 通訊協定,否則預設 AMQP 會覆寫此設定,並阻止您再次連線。

您只需要為 IoT Edge 代理程式和 IoT Edge 中樞模組設定 UpstreamProtocol 環境變數。 任何其他模組都會採用運行時間模組中設定的任何通訊協定。

設定IoT Edge裝置以透過 Proxy 伺服器通訊中提供了此程式的範例。

為系統模組設定主機儲存體

IoT Edge 中樞和代理程式模組會使用本機儲存體來維護狀態,並啟用模組、裝置和雲端之間的傳訊。 為了提升可靠性和效能,請將系統模組設定為使用主機檔案系統上的儲存體。

如需詳細資訊,請參閱 系統模組的主機記憶體。

減少 IoT Edge 中樞使用的記憶體空間

如果您正在以有限的可用記憶體,部署限制裝置,可以將 IoT Edge 中樞設定為以更少容量執行,並減少使用的磁碟空間。 但這些設定確實會限制 IoT Edge 中樞的效能,所以請找到適用於您解決方案的最佳平衡。

請勿針對受限制裝置上的效能進行優化

IoT Edge 中樞預設會針對效能進行優化,因此會嘗試配置大量的記憶體區塊。 此設定可能會對 Raspberry Pi 等小型裝置造成穩定性問題。 如果您要部署具有限制資源的裝置,您可能會想要在IoT Edge中樞上將 OptimizeForPerformance 環境變數設定為 false

當 OptimizeForPerformance 設定為 true,MQTT 通訊協定前端會使用 PooledByteBufferAllocator,其效能較佳,但會配置更多記憶體。 配置器無法在32位操作系統或記憶體不足的裝置上運作良好。 此外,針對效能優化時,RocksDb 會為其作為本機記憶體提供者的角色配置更多記憶體。

如需詳細資訊,請參閱 較小裝置上的穩定性問題。

停用未使用的通訊協定

優化IoT Edge中樞效能並降低其記憶體使用量的另一種方式,是關閉您未在解決方案中使用之任何通訊協定的通訊協定前端。

在部署指令清單中設定IoT Edge 中樞模組的布爾環境變數,即可設定通訊協定前端。 這三個變數包括:

  • amqp 設定__enabled
  • mqtt 設定__enabled
  • HTTP 設定__enabled

這三個變數都有 兩個底線 ,而且可以設定為 true 或 false。

減少訊息的儲存時間

IoT Edge 中樞模組會因為任何原因而無法傳遞至 IoT 中樞 時,暫時儲存訊息。 您可以設定 IoT Edge 中樞在讓訊息過期之前保留多久的時間。 如果您的裝置上有記憶體考慮,則可以降低 IoT Edge中樞模組對應項中的timeToLiveSecs 值。

timeToLiveSecs 參數的預設值為 7200 秒,也就是兩小時。

在部署指令清單中使用正確的模組映像

如果使用空白或錯誤的模組映像,Edge 代理程式會重試載入映像,這會導致產生額外的流量。 將正確的映像新增至部署指令清單,以避免產生不必要的流量。

請勿使用模組映像的偵錯版本

從測試案例移至生產案例時,請記得從部署指令清單中移除偵錯組態。 檢查部署指令清單中沒有任何模組映像具有 .debug 後綴。 如果您新增了建立選項以在模組中公開埠以進行偵錯,請移除那些建立選項。

請注意使用自定義模組時的對應項大小限制

包含自定義模組的部署指令清單是EdgeAgent對應項的一部分。 檢閱模組對應 項大小的限制。

如果您部署大量模組,可能會耗盡此對應項大小限制。 請考慮此硬性限制的一些常見風險降低:

  • 將任何組態儲存在自定義模組對應項中,其具有自己的限制。
  • 儲存指向非空間有限位置的一些設定(也就是 Blob 存放區)。

設定如何套用模組的更新

當部署更新時,Edge 代理程式會收到新的設定做為對應項更新。 如果新的組態有新的或更新的模組映像,Edge Agent 預設會循序處理每個模組:

  1. 已下載更新的映像
  2. 執行中的模組已停止
  3. 已啟動新的模組實例
  4. 下一個模組更新已處理

在某些情況下,例如,當模組之間的相依性存在時,建議您先下載所有更新的模組映像,再重新啟動任何執行中的模組。 您可以將 IoT Edge 代理程式環境變數 ModuleUpdateMode 設定為字串值 WaitForAllPulls,以設定此模組更新行為。 如需詳細資訊,請參閱 IoT Edge環境變數

"modulesContent": {
    "$edgeAgent": {
        "properties.desired": {
            ...
            "systemModules": {
                "edgeAgent": {
                    "env": {
                        "ModuleUpdateMode": {
                            "value": "WaitForAllPulls"
                        }
                    ...

容器管理

  • 重要
    • 使用標籤來管理版本
    • 管理磁碟區
  • 有用
    • 在您的私人登錄中儲存執行時間容器
    • 設定映射垃圾收集

使用標籤來管理版本

標籤是 Docker 概念,可用來區別 Docker 容器版本。 卷標是 1.1 等後綴,其位於容器存放庫的結尾。 例如, mcr.microsoft.com/azureiotedge-agent:1.1。 標籤可以變動,而且可以隨時更改並指向另一個容器,因此當您更新模組映像時,您的團隊應同意要遵循的慣例。

標籤也可協助您強制更新 IoT Edge 裝置。 當您將更新版模組推送至容器登錄時,請以遞增方式處理標記。 接著,將新部署和遞增的標籤一併推送到您的裝置。 容器引擎會將遞增的標籤辨識為新版本,並將最新的模組版本向下提取至您的裝置。

IoT Edge 執行階段的標籤

IoT Edge 代理程式和 IoT Edge 中樞映像會標示與其相關聯的 IoT Edge 版本。 標記可透過兩種不同的使用方式用於執行階段映像上:

  • 滾動標籤 - 只使用版本號碼的前兩個值來取得符合這些數位的最新映像。 例如,有新版本指向最新的 1.1.x 版時,就會更新 1.1。 如果 IoT Edge 裝置的容器執行階段重新提取映像,執行階段模組就會更新為最新版本。 從 Azure 入口網站執行的部署預設為累積標記。 為了開發目的,建議使用此方法。

  • 特定標籤 - 使用版本號碼的所有三個值來明確設定映像版本。 例如,1.1.0 在其初始版本後不會變更。 當您準備好要更新時,您可以在部署資訊清單中宣告新的版本號碼。 針對生產用途,建議使用此方法。

管理磁碟區

IoT Edge 不會移除連結至模組容器的磁碟區。 此行為是根據設計,因為其允許跨容器執行個體保存資料,例如升級案例。 不過,如果這些磁碟區未使用,可能會導致磁碟空間耗盡和後續的系統錯誤。 如果您在案例中使用 Docker 磁碟區,建議您使用 Docker 磁碟區剪除Docker 磁碟區 rm 等 Docker 工具,以移除未使用的磁碟區,特別是針對生產案例。

在您的私人登錄中儲存執行時間容器

您知道如何在私人 Azure 登錄中儲存自定義程式代碼模組的容器映射,但您也可以使用它來儲存公用容器映像,例如 edgeAgentedgeHub 運行時間模組。 如果您有非常嚴格的防火牆限制,因為這些運行時間容器儲存在 Microsoft Container Registry (MCR) 中,可能需要這麼做。

下列步驟說明如何將edgeAgentedgeHubDocker映像提取到本機電腦、將其重新標記、推送至您的私人登錄,然後更新組態檔,讓您的裝置知道從私人登錄提取映像。

  1. 從 Microsoft 登錄提取 edgeAgent Docker 映射。 視需要更新版本號碼。

    # Pull edgeAgent image
    docker pull mcr.microsoft.com/azureiotedge-agent:1.4
    
    # Pull edgeHub image
    docker pull mcr.microsoft.com/azureiotedge-hub:1.4
    
  2. 列出您的所有 Docker 映射、尋找 edgeAgentedgeHub 映射,然後複製其映射標識符。

    docker images
    
  3. 重新標記 edgeAgentedgeHub 映像。 將括弧中的值取代為您自己的值。

    # Retag your edgeAgent image
    docker tag <my-image-id> <registry-name/server>/azureiotedge-agent:1.4
    
    # Retag your edgeHub image
    docker tag <my-image-id> <registry-name/server>/azureiotedge-hub:1.4
    
  4. 將您的edgeAgentedgeHub映像推送至您的私人登錄。 將括弧中的值取代為您自己的值。

    # Push your edgeAgent image to your private registry
    docker push <registry-name/server>/azureiotedge-agent:1.4
    
    # Push your edgeHub image to your private registry
    docker push <registry-name/server>/azureiotedge-hub:1.4
    
  5. 更新edgeAgent和edgeHub系統模組deployment.template.json檔案中的映像參考,方法是將 取代mcr.microsoft.com為這兩個模組的您自己的 「registry-name/server」。。

  6. 開啟IoT Edge裝置上的文字編輯器來變更組態檔,讓它知道您的私人登錄映像。

    sudo nano /etc/aziot/config.toml
    
  7. 在文字編輯器中,將影像值變更為 。[agent.config] 將括弧中的值取代為您自己的值。

    [agent.config]
    image = "<registry-name/server>/azureiotedge-agent:1.4"
    
  8. 如果您的私人登錄需要驗證,請在 中 [agent.config.auth]設定驗證參數。

    [agent.config.auth]
    serveraddress = "<login-server>" # Almost always equivalent to <registry-name/server>
    username = "<username>"
    password = "<password>"
    
  9. 儲存變更並結束文字編輯器。

  10. 套用IoT Edge組態變更。

    sudo iotedge config apply
    

    IoT Edge 執行時間會重新啟動。

如需詳細資訊,請參閱

設定映射垃圾收集

映射垃圾收集是IoT Edge v1.4和更新版本中的一項功能,可自動清除IoT Edge模組不再使用的Docker映像。 它只會刪除 IoT Edge 執行時間在部署時提取的 Docker 映像。 刪除未使用的 Docker 映像有助於節省磁碟空間。

此功能會在IoT Edge的主機組件中實作, aziot-edged 且預設為啟用服務。 清除作業會在午夜 (裝置當地時間) 每天完成,並移除過去七天前使用的未使用的 Docker 映像。 控制清除行為的參數會在 中 config.toml 設定,並在本節稍後說明。 如果未在組態檔中指定參數,則會套用預設值。

例如,以下是使用預設值的 config.toml 映射垃圾收集區段:

[image_garbage_collection]
enabled = true
cleanup_recurrence = "1d"
image_age_cleanup_threshold = "7d" 
cleanup_time = "00:00"

下表描述影像垃圾收集參數。 所有參數都是 選擇性 的,而且可以個別設定以變更預設設定。

參數 描述: 必要 預設值
enabled 啟用映射垃圾收集。 您可以選擇將此設定變更為 false來停用此功能。 選擇性 true
cleanup_recurrence 控制清除工作的周期頻率。 必須指定為天數,且不能少於一天。

例如:1d、2d、6d 等。
選擇性 1d
image_age_cleanup_threshold 定義未使用映像的最小存留期閾值,再考慮清除,且必須在天數內指定。 您可以指定為 0d ,以便在映像從部署中移除後立即清除映像。

映射在從部署中移除之後會被視為未使用
選擇性 7d
cleanup_time 當清除工作執行時, 在裝置當地時間的一天時間。 必須是 24 小時 HH:MM 格式。 選擇性 00:00

網路

  • 有用
    • 檢閱輸出/輸入設定
    • 允許來自 IoT Edge 裝置的連線
    • 設定 Proxy 通訊
    • 在容器引擎設定中設定 DNS 伺服器

檢閱輸出/輸入設定

Azure IoT 中樞和 IoT Edge 之間的通訊通道一律會設定為輸出。 在大部分的 IoT Edge 情節下,必要的連線只有三個。 容器引擎必須和容納模組映像的容器登錄連線。 IoT Edge 執行階段需要和 IoT 中樞連線才能擷取裝置組態資訊,以及傳送訊息和遙測。 如果您使用自動布建,IoT Edge 必須連線到裝置布建服務。 如需詳細資訊,請參閱 防火牆和埠設定規則

允許來自 IoT Edge 裝置的連線

如果您的網路設定要求您明確允許來自 IoT Edge 裝置的連線,請檢閱下列 IoT Edge 元件清單:

  • IoT Edge 代理程式會透過 WebSocket 開啟持續 AMQP/MQTT 連線至 IoT 中樞。
  • IoT Edge 中樞會開啟單一持續性AMQP連線或多個 MQTT 連線,以透過 WebSocket 進行 IoT 中樞。
  • IoT Edge 服務會對 IoT 中樞 進行間歇性 HTTPS 呼叫。

在這三種情況下,完整功能變數名稱 (FQDN) 會符合 模式 \*.azure-devices.net

容器登錄

容器 引擎 會透過 HTTPS 呼叫容器登錄。 若要擷取 IoT Edge 執行時間容器映射,FQDN 為 mcr.microsoft.com。 容器引擎會依部署中的設定,連線到其他登錄。

此檢查清單是防火牆規則的起點:

FQDN (* = 通配符) 輸出 TCP 連接埠 使用方式
mcr.microsoft.com 443 Microsoft Container Registry
*.data.mcr.microsoft.com 443 提供內容傳遞的數據端點
*.cdn.azcr.io 443 將模組從 Marketplace 部署到裝置
global.azure-devices-provisioning.net 443 裝置佈建服務 存取權 (選用)
*.azurecr.io 443 個人和第三方容器登錄
*.blob.core.windows.net 443 從 Blob 記憶體下載 Azure Container Registry 映像差異
*.azure-devices.net 5671、8883、4431 IoT 中樞 存取
*.docker.io 443 Docker Hub 存取權 (選擇性)

1針對安全的 MQTT 開啟埠 8883,或安全 AMQP 的埠 5671。 如果您只能透過埠 443 進行連線,則可以透過 WebSocket 通道執行其中一種通訊協定。

由於 IoT 中樞的 IP 位址可以變更而不通知,因此請一律使用 FQDN 來允許清單設定。 若要深入瞭解,請參閱瞭解 IoT 中樞的IP位址。

其中有些防火牆規則繼承自 Azure Container Registry。 如需詳細資訊,請參閱 設定規則以存取防火牆後方的 Azure 容器登錄。

您可以在 Azure Container Registry 中啟用專用數據端點,以避免通配符允許列出 *.blob.core.windows.net FQDN。 如需詳細資訊,請參閱 啟用專用數據端點

注意

若要在 REST 和數據端點之間提供一致的 FQDN,從 2020 年 6 月 15 日起,Microsoft Container Registry 數據端點會從 *.cdn.mscr.io 變更為*.data.mcr.microsoft.com
如需詳細資訊,請參閱 Microsoft Container Registry 用戶端防火牆規則設定

如果您不想將防火牆設定為允許存取公用容器登錄,您可以將映像儲存在私人容器登錄中,如在私人登錄中儲存運行時間容器中所述

Azure IoT 身分識別服務

IoT 身分識別服務提供 Azure IoT 裝置的布建和密碼編譯服務。 身分識別服務會檢查已安裝的版本是否為最新版本。 檢查會使用下列 FQDN 來驗證版本。

FQDN 輸出 TCP 連接埠 使用方式
aka.ms 443 提供重新導向至版本檔案的虛名 URL
raw.githubusercontent.com 443 GitHub 中裝載的身分識別服務版本檔案

設定 Proxy 通訊

如果要在使用 Proxy 伺服器的網路上部署您的裝置,裝置必須能夠透過 Proxy 通訊,以便觸達 IoT 中樞和容器登錄。 如需詳細資訊,請參閱 設定IoT Edge裝置以透過 Proxy 伺服器進行通訊。

在容器引擎設定中設定 DNS 伺服器

在容器引擎設定中為您的環境指定 DNS 伺服器。 DNS 伺服器設定會套用至引擎啟動的所有容器模組。

  1. /etc/docker 裝置上的目錄中,編輯 daemon.json 檔案。 如果檔案不存在,請建立檔案。

  2. 新增 DNS 金鑰,並將 DNS 伺服器地址設定為可公開存取的 DNS 服務。 如果您的邊緣裝置無法存取公用 DNS 伺服器,請在您的網路中使用可存取的 DNS 伺服器位址。 例如:

    {
        "dns": ["1.1.1.1"]
    }
    

解決方案管理

  • 有用
    • 設定記錄與診斷
    • 設定預設記錄驅動程式
    • 請考量測試和 CI/CD 管線

設定記錄與診斷

在 Linux 上,IoT Edge 精靈會將日誌當作預設記錄驅動程式。 您可以使用命令列工具 journalctl 查詢精靈記錄。

從 1.2 版開始,IoT Edge 依賴多個精靈。 雖然每個精靈的記錄都可以個別查詢 journalctliotedge system 但命令會提供方便的方式來查詢合併的記錄。

  • 合併命令 iotedge

    sudo iotedge system logs
    
  • 對等 journalctl 命令:

    journalctl -u aziot-edge -u aziot-identityd -u aziot-keyd -u aziot-certd -u aziot-tpmd
    

正在測試 IoT Edge 部署時,通常可以存取您的裝置來擷取記錄並進行疑難排解。 在部署情節中,可能不提供該選項。 請考慮要如何收集生產環境中的裝置相關資訊。 其中一個選項是使用能夠收集其他模組資訊,並將資訊傳送至雲端的記錄模組。 記錄模組的其中一個範例是 logspout-loganalytics,或者您可以自行設計。

設定預設記錄驅動程式

依預設,Moby 容器引擎不會設定容器記錄大小限制。 經過一段時間之後,這可能會導致裝置充滿記錄,並用盡磁碟空間。 將您的容器引擎設定為使用 local 記錄驅動程式 作為記錄機制。 Local 記錄驅動程式提供預設的記錄大小限制、預設執行記錄輪替,並使用更有效率的檔格式,有助於防止磁碟空間耗盡。 您也可以選擇使用不同的 記錄驅動程式 ,並根據需求設定不同的大小限制。

選項:設定所有容器模組的預設記錄驅動程式

您可以將的值設定為 中的daemon.json記錄驅動程式名稱,將 容器引擎設定log driver為使用特定的記錄驅動程式。 下列範例會將默認記錄驅動程式設定為 local 記錄驅動程式(建議使用)。

{
    "log-driver": "local"
}

您也可以將 log-opts 金鑰設定為在檔案中使用 daemon.json 適當的值。 下列範例會將記錄驅動程式設定為 local ,並設定 max-sizemax-file 選項。

{
    "log-driver": "local",
    "log-opts": {
        "max-size": "10m",
        "max-file": "3"
    }
}

將此資訊新增 (或附加) 至名為 daemon.json 的檔案,並將它放在下列位置:

  • /etc/docker/

容器引擎必須重新啟動,變更才會生效。

選項:調整每個容器模組的記錄設定

您可以在每個模組的 createOptions執行此動作。 例如:

"createOptions": {
    "HostConfig": {
        "LogConfig": {
            "Type": "local",
            "Config": {
                "max-size": "10m",
                "max-file": "3"
            }
        }
    }
}

Linux 系統上的其他選項

  • 將容器引擎設定為默認記錄驅動程式,以將記錄傳送至systemd日誌journald

  • 安裝logrotate工具,定期從您的裝置移除舊的記錄。 使用下列檔案規格:

    /var/lib/docker/containers/*/*-json.log{
         copytruncate
         daily
         rotate7
         delaycompress
         compress
         notifempty
         missingok
    }
    

請考量測試和 CI/CD 管線

若要提高 IoT Edge 部署情節的效率,請考量將您的生產環境部署整合至您的測試和 CI/CD 管線。 Azure IoT Edge 支援 Azure DevOps 等多個 CI/CD 平台。 如需詳細資訊,請參閱 持續整合和持續部署至 Azure IoT Edge

安全性考量

  • 重要
    • 管理容器登錄的存取權
    • 限制容器存取主機資源

管理容器登錄的存取權

將模組部署到生產IoT Edge裝置之前,請確定您控制容器登錄的存取權,讓外部人員無法存取或變更容器映像。 使用私人容器登錄來管理容器映像。

在教學課程和其他檔中,我們會指示您在IoT Edge裝置上使用與開發電腦上相同的容器登錄認證。 這些指示僅供您更輕鬆地設定測試和開發環境,且不應該在生產案例中遵循。

如需更安全的登錄存取權,您可以選擇 驗證選項。 熱門且建議的驗證是使用適合應用程式或服務的 Active Directory 服務主體,以自動化或其他無人看管或無人看管的方式提取容器映像,就像 IoT Edge 裝置一樣。 另一個選項是使用存放庫範圍令牌,這可讓您建立只存在於其所在的 Azure Container Registry 中的長或短存身分識別,以及將存放庫層級的存取範圍設定為範圍。

若要建立服務主體,請執行兩個腳本,如建立服務主體中所述。 這些文稿會執行下列工作:

  • 第一個腳本會建立服務主體。 它會輸出服務主體標識碼和服務主體密碼。 將這些值安全地儲存在您的記錄中。

  • 第二個腳本會建立角色指派,以授與服務主體,並視需要執行。 我們建議為 參數套 用 acrPull 使用者 role 角色。 如需角色清單,請參閱 Azure Container Registry 角色和許可權

若要使用服務主體進行驗證,請提供您從第一個腳本取得的服務主體標識符和密碼。 在部署指令清單中指定這些認證。

  • 針對使用者名稱或用戶端識別碼,指定服務主體標識碼。

  • 針對密碼或客戶端密碼,指定服務主體密碼。


若要建立存放庫範圍的令牌,請遵循 建立存放庫範圍令牌

若要使用存放庫範圍的令牌進行驗證,請提供您在建立存放庫範圍令牌之後取得的令牌名稱和密碼。 在部署指令清單中指定這些認證。

  • 針對使用者名稱,指定令牌的用戶名稱。

  • 針對密碼,指定其中一個令牌的密碼。

注意

實作增強式安全性驗證之後,請停用 管理員 用戶設定,讓預設的使用者名稱/密碼存取不再可用。 在 Azure 入口網站 的容器登錄中,從左窗格功能表的 [設定] 下,選取 [存取密鑰]。

限制容器存取主機資源

若要在模組之間平衡共用的主機資源,建議您限制每個模組的資源使用量。 這些限制可確保一個模組不會耗用太多的記憶體或 CPU 使用量,並防止其他程序在裝置上執行。 IoT Edge 平台依預設不會限制模組的資源,因為知道指定模組需要以最佳方式來執行多少資源需要測試。

Docker 提供一些條件約束,可讓您用來限制記憶體和 CPU 使用量等資源。 如需詳細資訊,請參閱 記憶體、CPU 和 GPU 的運行時間選項。

這些條件約束可以使用部署指令清單中的建立選項,套用至個別模組。 如需詳細資訊,請參閱 如何設定IoT Edge模組的容器建立選項。

下一步