準備在生產環境中部署 IoT Edge 解決方案
適用於: IoT Edge 1.5 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 解決方案從開發層面轉移到生產環境時,請確保其設定可以提供持續性效能。
本文提供的資訊並非完全相同。 為了協助您設定優先權,每個區段都會以清單開始,並將工作分成兩個部分:生產前需完成的重要事項,或是您需要知道的實用事項。
裝置設定
IoT Edge 裝置可以是任何項目,包括 Raspberry Pi、膝上型電腦或伺服器上執行的虛擬機器。 您可以實際或透過虛擬連線存取裝置,或者裝置可能長時間受到隔離。 無論是哪種方式,您都想確保其設定為能妥善執行。
重要
- 安裝生產憑證
- 研擬裝置管理方案
- 使用 Moby 當作容器引擎。 如果您使用 Ubuntu Core Snap,則 Docker Span 由 Canonical 提供服務,並支援生產案例。
實用
- 選擇上游通訊協定
安裝生產憑證
生產環境中的每個 IoT Edge 裝置都要安裝裝置憑證授權單位 (CA) 的憑證。 該 CA 憑證接著會在 config 檔案的 IoT Edge 執行階段中宣告。 對於開發和測試的實務案例,如果 config 檔案中未宣告任何的憑證,則 IoT Edge 執行階段會建立暫時的憑證。 不過,這些暫時憑證三個月後就會過期,而且對於生產情節並不安全。 針對生產的實務案例,您應該提供您自己的 Edge CA 憑證 (從自我簽署的憑證授權單位中,或向商業憑證授權單位購買)。
若要了解 Edge 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 等自動化工具。
容器引擎
容器引擎是所有 IoT Edge 裝置的先決條件。 生產環境支援 Moby 引擎。 如果您使用 Ubuntu Core Snap,則 Docker Span 由 Canonical 提供服務,並支援生產案例。 Docker 等其他容器引擎可搭配 IoT Edge 使用,也可以使用這些引擎進行開發。 搭配 Azure IoT Edge 使用時可重新分配 Moby 引擎,而且 Microsoft 可提供此引擎的相關服務。
選擇上游通訊協定
您可以為 IoT Edge 代理程式和 IoT Edge 中樞設定 IoT 中樞上游通訊用的通訊協定 (其可確定所使用的連接埠)。 預設的通訊協定是 AMQP,但您可以根據網路設定變更。
這兩個執行階段模組都有 UpstreamProtocol 環境變數。 有效的變數值為:
- MQTT
- AMQP
- MQTTWS
- AMQPWS
為裝置本身 config 檔案中的 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 等小型裝置上造成穩定性問題。 如果您正在部署資源有限的裝置,則您可能想要在 Edge 中樞上將 OptimizeForPerformance 環境變數設為 false。
當 OptimizeForPerformance 設定為 true時,MQTT 通訊協定前端會使用 PooledByteBufferAllocator,其效能更好,但會配置更多記憶體。 配置器無法在 32 位的作業系統或記憶體不足的裝置上妥善地運作。 此外,當針對效能優化時,RocksDb 會為其角色配置更多記憶體作為本機儲存體提供者。
如需詳細資訊,請參閱小型裝置上的穩定性問題。
停用未使用的通訊協定
最佳化 IoT Edge 中樞效能並減少其記憶體使用量的另一種方法是,針對解決方案中未使用的任何通訊協定關閉通訊協定標頭 (protocol head)。
通訊協定標頭的設定方式是針對您部署資訊清單中的 IoT Edge 中樞模組,設定布林環境變數設定。 這三個變數分別是:
- amqpSettings__enabled
- mqttSettings__enabled
- httpSettings__enabled
這三個變數都有兩條底線,而且可以設為 true 或 false。
減少訊息的儲存時間
如果訊息因故無法傳遞到 IoT 中樞,則 IoT Edge 中樞模組會暫時儲存訊息。 在未傳遞訊息過期之前,您可以設定 IoT Edge 中樞保留訊息的時間。 如果您的裝置記憶體有問題,可以減少 IoT Edge 中樞模組對應項中的 timeToLiveSecs 值。
timeToLiveSecs 參數的預設值是 7200 秒,也就是兩小時。
在部署資訊清單中使用正確的模組映像
如果使用空白或錯誤的模組映像,則 Edge 代理程式會重試載入映像,這會導致額外流量的產生。 將正確的映像新增至部署資訊清單中,以避免產生不必要的流量。
請勿使用模組映像的偵錯版本
從測試情節轉移至生產環境情節時,請務必移除部署資訊清單中的偵錯設定。 檢查部署資訊清單中的模組映像是否都沒有 .debug 尾碼。 如果您已新增建立選項,以公開模組中的連接埠進行偵錯時,也請移除這些建立選項。
使用自訂模組時請注意對應項大小的限制
包含自訂模組的部署資訊清單是 EdgeAgent 對應項的一部分。 請檢閱模組對應項大小的限制。
如果您部署了大量的模組,則可能會耗用掉此對應項大小的限制量。 請考慮使用一些對此硬式限制的常見緩解措施:
- 將任何組態儲存在自訂模組對應項中,這會有它自己的限制。
- 儲存指向非空間有限位置 (即 blob 存放區) 的一些組態。
設定如何套用模組的更新
在更新部署時,Edge 代理程式會收到新的組態作為對應項更新。 如果新的組態有新的或更新的模組映像,依預設 Edge 代理程式會循序處理每一個模組:
- 已下載更新的映像
- 已停止執行中的模組
- 已啟動新的模組執行個體
- 已處理下一個模組更新
在某些情況下,例如,當模組之間存在相依性時,在重新開機任何執行中的模組之前,可能需要先下載所有更新的模組映像。 可以透過將 IoT Edge Agent 環境變數 ModuleUpdateMode
設為字串值 WaitForAllPulls
來設定此模組更新行為。 如需詳細資訊,請參閱 IoT Edge 環境變數。
"modulesContent": {
"$edgeAgent": {
"properties.desired": {
...
"systemModules": {
"edgeAgent": {
"env": {
"ModuleUpdateMode": {
"value": "WaitForAllPulls"
}
...
容器管理
- 重要
- 使用標籤來管理版本
- 管理磁碟區
- 實用
- 在您的私人登錄中儲存執行時間容器
- 設定映像記憶體回收
使用標籤來管理版本
標籤是 Docker 概念,可用來區別 Docker 容器版本。 標籤是類似 1.5 的尾碼,位於容器存放庫的末端。 例如,mcr.microsoft.com/azureiotedge-agent:1.5。 標籤可以變動,而且可以隨時更改並指向另一個容器,因此當您更新模組映像時,您的團隊應同意要遵循的慣例。
標籤也可協助您強制更新 IoT Edge 裝置。 當您將更新版模組推送至容器登錄時,請以遞增方式處理標記。 接著,將新部署和遞增的標籤一併推送到您的裝置。 容器引擎會將遞增的標籤辨識為新版本,並將最新的模組版本向下提取至您的裝置。
IoT Edge 執行階段的標籤
IoT Edge 代理程式和 IoT Edge 中樞映像會標示與其相關聯的 IoT Edge 版本。 標記可透過兩種不同的使用方式用於執行階段映像上:
累積標記 - 僅使用版本號碼的前兩個值來取得符合這些數字的最新映像。 例如,有新版本指向最新的 1.5.x 版時,就會更新 1.5。 如果 IoT Edge 裝置的容器執行階段重新提取映像,執行階段模組就會更新為最新版本。 從 Azure 入口網站執行的部署預設為累積標記。 進行開發時建議使用此方法。
特定標記 - 版本號碼的三個值全都會使用,以明確設定映像版本。 例如,1.5.0 在其初始版本後將不會變更。 當您準備好要更新時,您可以在部署資訊清單中宣告新的版本號碼。 建議將此方法用於生產用途。
管理磁碟區
IoT Edge 不會移除連結至模組容器的磁碟區。 此行為是根據設計,因為其允許跨容器執行個體保存資料,例如升級案例。 不過,如果這些磁碟區未使用,可能會導致磁碟空間耗盡和後續的系統錯誤。 如果您在案例中使用 Docker 磁碟區,建議您使用 Docker 磁碟區剪除和 Docker 磁碟區 rm 等 Docker 工具,以移除未使用的磁碟區,特別是針對生產案例。
在您的私人登錄中儲存執行時間容器
您知道如何在私人 Azure 登錄中儲存自訂程式碼模組的容器映像,但您也可以用它來儲存公用容器映像,例如針對 edgeAgent 和 edgHub 執行階段模組。 如果您有嚴格的防火牆限制 (如同這些執行階段容器會儲存在 Microsoft Container Registry (MCR) 中),則可能需要這麼做。
下列步驟說明如何將 edgeAgent 和 edgeHub 的映像提取至本機電腦、將其重新標記、推送至您的私人登錄,然後更新組態檔,讓您的裝置知道要從私人登錄提取映像。
從 Microsoft 登錄提取 edgeAgent Docker 映像。 視需要更新版本號碼。
# Pull edgeAgent image docker pull mcr.microsoft.com/azureiotedge-agent:1.5 # Pull edgeHub image docker pull mcr.microsoft.com/azureiotedge-hub:1.5
列出所有的 Docker 映像、尋找 edgeAgent 和 edgeHub 映像,然後複製其映像識別碼。
docker images
重新標記您的 edgeAgent 和 edgeHub 映像。 使用您自己的值取代括弧中的值。
# Retag your edgeAgent image docker tag <my-image-id> <registry-name/server>/azureiotedge-agent:1.5 # Retag your edgeHub image docker tag <my-image-id> <registry-name/server>/azureiotedge-hub:1.5
將您的 edgeAgent 和 edgeHub 映像推送至私人登錄。 使用您自己的值取代括弧中的值。
# Push your edgeAgent image to your private registry docker push <registry-name/server>/azureiotedge-agent:1.5 # Push your edgeHub image to your private registry docker push <registry-name/server>/azureiotedge-hub:1.5
針對 edgeAgent 和 edgeHub 系統模組更新 deployment.template.json 檔案中的映像參考,方法是針對這兩個模組將
mcr.microsoft.com
取代為您自己的 "registry-name/server"。開啟 IoT Edge 裝置上的文字編輯器來變更組態檔,讓它知道您的私人登錄映像。
sudo nano /etc/aziot/config.toml
在文字編輯器中,變更
[agent.config]
底下的映像值。 使用您自己的值取代括弧中的值。[agent.config] image = "<registry-name/server>/azureiotedge-agent:1.5"
如果您的私人登錄需要驗證,請在
[agent.config.auth]
中設定驗證參數。[agent.config.auth] serveraddress = "<login-server>" # Almost always equivalent to <registry-name/server> username = "<username>" password = "<password>"
儲存您的變更並結束文字編輯器。
套用 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 代理程式可能會透過 WebSockets 持續以 AMQP/MQTT 連線方式連線到 IoT 中樞。
- IoT Edge 中樞可能會透過 WebSockets 持續以 AMQP 連線或多種 MQTT 連線方式連線到 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 中樞存取權 (選擇性) |
1開放連接埠 8883 適用於安全的 MQTT,或連接埠 5671 適用於安全的 AMQP。 如果您只能透過埠 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 伺服器設定會套用至引擎啟動的所有容器模組。
在裝置的
/etc/docker
目錄中,編輯daemon.json
檔案。 如果檔案不存在,請加以建立。新增 dns 金鑰,並將 DNS 伺服器位址設定為可公開存取的 DNS 服務。 如果您的邊緣裝置無法存取公用 DNS 伺服器,請使用您的網路中可存取的 DNS 伺服器位址。 例如:
{ "dns": ["1.1.1.1"] }
解決方案管理
- 實用
- 設定記錄與診斷
- 設定預設的記錄驅動程式
- 請考量測試和 CI/CD 管線
設定記錄與診斷
在 Linux 上,IoT Edge 精靈會將日誌當作預設記錄驅動程式。 您可以使用命令列工具 journalctl
查詢精靈記錄。
從 1.2 版開始,IoT Edge 會依賴多個精靈。 雖然可以使用 journalctl
個別查詢每個精靈的記錄,但 iotedge 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
記錄驅動程式會提供預設的記錄大小限制、依預設執行記錄輪換,並使用更有效率的檔案格式來協助防止磁碟空間耗盡。 您也可以選擇使用不同的記錄驅動程式,並根據需求來設定不同的大小限制。
選項:為所有容器模組設定預設的記錄驅動程式
您可以將 log driver
的值設定為 daemon.json
中的記錄驅動程式名稱,來將您的容器引擎設定為使用特定的記錄驅動程式。 下列範例會將預設的記錄驅動程式設定為 local
記錄驅動程式 (建議)。
{
"log-driver": "local"
}
您也可以將您的 log-opts
索引鍵設定為使用 daemon.json
檔案中的適當值。 下列範例會將記錄檔驅動程式設定為 local
,並設定 max-size
和 max-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 系統上的其他選項
將
journald
設定為預設的記錄驅動程式,以設定容器引擎來將記錄傳送至systemd
日誌。安裝 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 中的長期或短期的識別,以及將存取的範圍限制到存放庫的層級。
若要建立服務主體,請執行兩個指令碼,如建立服務主體中所述。 這些指令碼會執行下列工作:
第一個指令碼會建立服務主體。 它會輸出服務主體 ID 和服務主體密碼。 將這些值安全地儲存在您的記錄中。
第二個指令碼會建立角色指派來授與服務主體,以便後續視需要來加以執行。 建議對 參數套用 acrPull
role
使用者角色。 如需角色的清單,請參閱 Azure Container Registry 角色和權限。
若要使用服務主體進行驗證,請提供您從第一個指令碼取得的服務主體 ID 和密碼。 在部署資訊清單中指定這些認證。
針對使用者名稱或用戶端 ID,指定服務主體 ID。
針對密碼或用戶端密碼,指定服務主體密碼。
若要建立以存放庫為範圍的權杖,請遵循建立以存放庫為範圍的權杖。
若要使用以存放庫為範圍的權杖進行驗證,請提供您在建立以存放庫為範圍的權杖之後取得的權杖名稱和密碼。 在部署資訊清單中指定這些認證。
針對使用者名稱,指定權杖的使用者名稱。
針對密碼,指定其中一個權杖的密碼。
注意
在實作增強式安全性驗證之後,請停用管理員使用者設定,讓預設的使用者名稱/密碼存取不再可用。 在 Azure 入口網站的容器登錄中,從左窗格功能表的 [設定] 底下,選取 [存取金鑰]。
限制容器對主機資源的存取
若要在模組之間平衡共用的主機資源,建議您限制每個模組的資源使用量。 這些限制可確保一個模組不會耗用太多的記憶體或 CPU 使用量,並防止其他程序在裝置上執行。 IoT Edge 平台依預設不會限制模組的資源,因為知道指定模組需要以最佳方式來執行多少資源需要測試。
Docker 提供一些限制,可讓您用來限制記憶體和 CPU 使用量等資源。 如需詳細資訊,請參閱記憶體、CPU 和 GPU 的執行階段選項。
您可以使用部署資訊清單中的建立選項,來將這些限制套用至個別模組。 如需詳細資訊,請參閱如何設定 IoT Edge 模組的容器建立選項。
下一步
- 深入了解 IoT Edge 自動部署。
- 了解 IoT Edge 如何支援持續整合與持續部署。