重要事項
本頁包含使用 Kubernetes 部署清單管理 Azure IoT Operations 元件的說明,該清單已在預覽中。 此功能的提供具有數項限制,因此不應用於生產工作負載。
請參閱 Microsoft Azure 預覽版增補使用規定,以了解適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未正式發行的版本) 的法律條款。
Azure IoT 作業包含符合企業級和標準的 MQTT 訊息代理程式。 MQTT 訊息代理程式可調整、高可用性和 Kubernetes 原生。 它提供 IoT 營運的訊息傳遞層,可啟用邊緣與雲端之間的雙向通訊,並在邊緣支援事件驅動應用程式。
MQTT 合規性
MQTT 是IoT空間中的常見通訊協定。 其簡單的設計允許單一代理商能同時為數千個用戶端提供服務,並且創建和管理簡約的發行-訂閱主題。 許多IoT裝置原生支援 MQTT。 下游轉譯網關會將各種IoT通訊協定轉換成 MQTT。
MQTT 訊息代理程式支援IoT作業中的傳訊層,並與 MQTT v3.1.1 和 MQTT v5 相容。 如需支援 MQTT 功能的詳細資訊,請參閱 MQTT 代理程式中的 MQTT 功能支援。
架構
MQTT 代理程式有兩個主要層:
- 無狀態前端層
- 具狀態和分區化後端層
前端層會處理用戶端連線和要求,並將其路由傳送至後端。 後端層會依索引鍵分割數據,例如用戶端會話的用戶端標識碼,以及主題訊息的主題名稱。 後端層會使用鏈結複寫來複製每個分割區中的數據。
架構的目標如下:
- 容錯和隔離:如果後端 Pod 失敗,訊息發佈會繼續,而且失敗不會傳播到系統的其餘部分。
- 失敗復原:自動失敗復原,而無需操作員介入。
- 沒有訊息遺失:如果分割區中至少有一個前端 Pod 和一個後端 Pod 正在執行,則會傳遞訊息。
- 彈性調整:水平調整發佈和訂閱輸送量支援邊緣和雲端部署。
- 大規模一致的效能:限制因鏈結複寫而造成的訊息延遲額外負荷。
- 作簡單性:減少對外部元件的相依性,以簡化維護和複雜性。
組態
針對設定,MQTT 訊息代理程式會使用數個 Kubernetes 自定義資源來定義訊息代理程式行為和功能的不同層面:
- 主要資源是 Broker,其會定義全域設定,例如基數、記憶體使用量設定檔和診斷設定。
- 一個 Broker 資源最多可以有三個 BrokerListener,每個都會在指定的服務類型 (
NodePort、LoadBalancer或ClusterIP) 上接聽傳入的 MQTT 連線。 每個 BrokerListener 資源可以有多個連接埠。 - BrokerListener 資源中的每個連接埠都可以與 BrokerAuthentication 資源和 BrokerAuthorization 資源相關聯。 這些驗證和授權原則會決定哪些用戶端可以連線到連接埠,以及它們在代理程式上可以執行哪些動作。
Broker 與 BrokerListener 之間的關聯性是 一對多,而 BrokerListener 與 BrokerAuthentication/BrokerAuthorization 之間的關聯性是 多對多。 這些資源的實體關係圖如下:
根據預設,IoT 作業部署預設代理程式、預設 BrokerListener 和預設 BrokerAuthentication。 所有這些資源都會命名為 default。 這些資源會一起提供 IoT 操作運作所需的基本 MQTT 代理程式設定。 預設設定為:
重要事項
為了避免中斷IoT作業內部元件之間的通訊,請勿修改任何預設組態。
若要自定義 MQTT 訊息代理程式部署,請將 BrokerListeners、BrokerAuthentication 和 BrokerAuthorization 等新資源新增至預設 Broker。
Broker 資源是不可變的,無法在部署之後修改,但只有在進階案例中才需要自定義。 若要深入了解自訂 Broker 資源,請參閱自訂預設 Broker。
在完整部署中,您可以擁有多個 BrokerListener,每個都可包含多個連接埠,而且每個連接埠可以有與其相關聯的不同 BrokerAuthentication 和 BrokerAuthorization 資源。
例如,從預設設定開始,您可以新增:
- 一個名為 example-lb-listener 的 LoadBalancer BrokerListener,包含兩個埠:1883 和 8883。
- 一個名為 example-nodeport-listener 的 NodePort BrokerListener,包含單一埠:1884 (
nodePort31884)。 - 一個名為 example-authn 的 BrokerAuthentication 資源,使用自訂驗證方法。
- 一個名為 example-authz 的 BrokerAuthorization 資源,使用您的自訂授權設定。
如果您使用相同的 BrokerAuthentication 和 BrokerAuthorization 資源來設定所有新的埠,安裝程式看起來會像這樣:
此方法會保持預設設定完整,並可讓您新增資源以自訂 MQTT broker 的部署。
預設 Broker 資源
每個 IoT 作業部署只能有一個訊息代理程式,而且必須命名 為預設值。 IoT 作業需要預設的訊息代理程序資源才能運作。 這是不可變的,無法在部署後修改。
注意
請勿刪除預設仲介資源。 這樣做會中斷 IoT 操作內部元件之間的通訊,而部署會停止運作。
自訂預設 Broker
大部分的設定不需要自訂預設代理程序資源。 需要自訂的設定包括:
- 基數:判斷代理程式處理更多連線和訊息的能力,並在 Pod 或節點失敗時增強高可用性。
- 記憶體設定檔:設定代理程式的最大記憶體使用量,以及如何在代理程式擴充規模時處理記憶體使用量。
- 磁碟支援的訊息緩衝區:當 RAM 滿時,用於將訊息緩衝到磁碟的組態。
- 診斷設定:用於診斷設定的組態,例如記錄層級和計量端點。
- 進階 MQTT 用戶端選項:用於進階 MQTT 用戶端選項的組態,例如工作階段到期、訊息到期和保持存活設定。
- 內部流量的加密:用於加密代理程式前端與後端 Pod 之間內部流量的組態。
您只能在初始部署期間自定義預設代理程式,方法是使用 Azure CLI 或 Azure 入口網站。 如果您需要不同的訊息代理程式組態設定,則需要新的部署。
若要在部署期間自訂預設的代理程式:
當您遵循部署 IoT 操作的指南時,請在 [設定] 區段中查看 [MQTT 代理程式設定]。 在這裏,您可以自訂基數和記憶體設定檔設定。 若要設定其他設定,包括磁碟支援的訊息緩衝區和進階 MQTT 用戶端選項,請使用 Azure CLI。
重要事項
在初始部署之後,您無法更新代理資源。 部署后不允許對基數、記憶體配置檔或磁碟緩衝區進行設定變更。
因應措施是在使用 az iot ops init 命令部署 Azure IoT 操作時,使用 MQTT 代理程式 JSON 設定檔來包含 --broker-config-file 參數。 如需詳細資訊,請參閱進階 MQTT 代理程式設定和設定核心 MQTT 代理程式設定。
檢視預設的 Broker 設定
若要檢視預設訊息代理程式的設定:
- 在 Azure 入口網站中,移至您的 IoT 操作執行個體。
- 在 [元件] 底下,選取 [MQTT 代理程式]。
- 在代理程式詳細資訊 下,選取 [JSON 檢視]。