Připojení cloudového konektoru mostu MQTT Azure IoT MQT Preview do jiných zprostředkovatelů MQTT

Důležité

Azure IoT Operations Preview – Služba Azure Arc je aktuálně ve verzi PREVIEW. Tento software ve verzi Preview byste neměli používat v produkčních prostředích.

Právní podmínky, které platí pro funkce Azure, které jsou ve verzi beta, verzi Preview nebo které zatím nejsou veřejně dostupné, najdete v Dodatečných podmínkách použití pro Microsoft Azure verze Preview.

K připojení ke službě Azure Event Grid nebo jiným zprostředkovatelům MQTT můžete použít most Azure IoT MQT Preview MQTT. Přemostění MQTT je proces propojení dvou zprostředkovatelů MQTT, aby mohly vyměňovat zprávy.

  • Při přemostění dvou zprostředkovatelů se zprávy publikované na jednom zprostředkovateli automaticky přeposílají druhé a naopak.
  • Přemostění MQTT pomáhá vytvořit síť zprostředkovatelů MQTT, které vzájemně komunikují, a podle potřeby rozšířit infrastrukturu MQTT přidáním dalších zprostředkovatelů.
  • Přemostění MQTT je užitečné pro více fyzických umístění, sdílení zpráv MQTT a témat mezi hraničními zařízeními a cloudem nebo v případě, že chcete integrovat MQTT s jinými systémy zasílání zpráv.

Aby bylo možné přemístit na jiného zprostředkovatele, musí Azure IoT MQQ znát adresu URL koncového bodu vzdáleného zprostředkovatele, jakou verzi MQTT, jak ověřit a jaká témata se mají mapovat. Pro maximalizaci kompozability a flexibility nativním pro Kubernetes se tyto hodnoty konfigurují jako vlastní prostředky Kubernetes (CRD), které se nazývají MqttBridge Připojení or a MqttBridgeTopicMap. Tato příručka vás provede postupem vytvoření konektoru mostu MQTT pomocí těchto prostředků.

  1. Vytvořte soubor YAML, který definuje prostředek MqttBridge Připojení or. Můžete použít příklad YAML, ale nezapomeňte změnit namespace nastavení tak, aby odpovídalo tomu, který má nasazený Azure IoT MQ, a remoteBrokerConnection.endpoint aby odpovídalo adrese URL koncového bodu vzdáleného zprostředkovatele.

  2. Vytvořte soubor YAML, který definuje prostředek MqttBridgeTopicMap . Můžete použít příklad YAML, ale nezapomeňte změnit namespace tak, aby odpovídala prostředku Azure IoT MQ nasazeného a mqttBridgeConnectorRef aby odpovídal názvu prostředku MqttBridge Připojení oru, který jste vytvořili v předchozím kroku.

  3. Nasaďte konektor mostu MQTT a mapu témat pomocí kubectl apply -f <filename>nástroje .

    $ kubectl apply -f my-mqtt-bridge.yaml 
    mqttbridgeconnectors.mq.iotoperations.azure.com my-mqtt-bridge created
    $ kubectl apply -f my-topic-map.yaml
    mqttbridgetopicmaps.mq.iotoperations.azure.com my-topic-map created
    

Po nasazení použijte kubectl get pods k ověření, že zprávy začnou proudit do a z vašeho koncového bodu.

Konfigurace MqttBridge Připojení or

Prostředek MqttBridge Připojení or definuje konektor mostu MQTT, který může komunikovat se vzdáleným zprostředkovatelem. Zahrnuje následující součásti:

  • Jedna nebo více instancí konektoru mostu MQTT Každá instance je kontejner, na kterém běží konektor mostu MQTT.
  • Připojení vzdáleného zprostředkovatele.
  • Volitelné připojení místního zprostředkovatele.

Následující příklad ukazuje příklad konfigurace přemostění na zprostředkovatele Azure Event Grid MQTT. Používá spravovanou identitu přiřazenou systémem k ověřování a šifrování TLS.

apiVersion: mq.iotoperations.azure.com/v1beta1
kind: MqttBridgeConnector
metadata:
  name: my-mqtt-bridge
  namespace: azure-iot-operations
spec:
  image: 
    repository: mcr.microsoft.com/azureiotoperations/mqttbridge 
    tag: 0.4.0-preview
    pullPolicy: IfNotPresent
  protocol: v5
  bridgeInstances: 1
  clientIdPrefix: factory-gateway-
  logLevel: debug
  remoteBrokerConnection:
    endpoint: example.westeurope-1.ts.eventgrid.azure.net:8883
    tls:
      tlsEnabled: true
    authentication:
      systemAssignedManagedIdentity:
        audience: https://eventgrid.azure.net
  localBrokerConnection:
    endpoint: aio-mq-dmqtt-frontend:8883
    tls:
      tlsEnabled: true
      trustedCaCertificateConfigMap: aio-ca-trust-bundle-test-only
    authentication:
      kubernetes: {}

Následující tabulka popisuje pole v prostředku MqttBridge Připojení or:

Pole Požadováno Popis
image Ano Obrázek konektoru Kafka Můžete zadat , pullPolicyrepositorya tag image. Správné hodnoty jsou uvedeny v předchozím příkladu.
Protokol Ano Verze protokolu MQTT. Může být v5 nebo v3. Viz podpora MQTT v3.1.1.
bridgeInstances No Počet instancí pro spojnici mostu Výchozí hodnota je 1. Viz Počet instancí.
clientIdPrefix No Předpona dynamicky generovaného ID klienta. Výchozí hodnota není předpona. Viz konfigurace ID klienta.
Loglevel No Úroveň protokolu. Může být debug nebo info. Výchozí hodnota je info.
remoteBroker Připojení ion Ano Připojení podrobností o vzdáleném zprostředkovateli, na který se má přemostit. Viz Připojení vzdáleného zprostředkovatele.
localBroker Připojení ion No Připojení podrobností místního zprostředkovatele, na který se má přemostit. Výchozí hodnota je zobrazená. Viz Připojení místního zprostředkovatele.

Podpora MQTT v3.1.1

Konektor mostu je možné nakonfigurovat tak, aby používal MQTT v3.1.1 s místním připojením zprostředkovatele pro připojení Azure IoT MQ i vzdáleného zprostředkovatele. Pokud ho ale vzdálený zprostředkovatel nepodporuje, přeruší se tím sdílená předplatná. Pokud plánujete používat sdílená předplatná, ponechte ji jako výchozí v5.

Počet instancí

Pro zajištění vysoké dostupnosti a škálování nakonfigurujte konektor mostu MQTT tak, aby používal více instancí. Tok zpráv a trasy jsou mezi různými instancemi automaticky vyváženy.

spec:
  bridgeInstances: 2

Konfigurace ID klienta

Azure IoT MQ vygeneruje ID klienta pro každého klienta MqttBridge Připojení or pomocí předpony, kterou zadáte, ve formátu {clientIdPrefix}-{routeName}. Toto ID klienta je důležité pro Azure IoT MQ, aby se zmírnit ztráta zpráv a zabránilo konfliktům nebo kolizím se stávajícími ID klientů, protože specifikace MQTT umožňuje pouze jedno připojení na ID klienta.

Pokud jsou například clientIdPrefix: "client-"v mapě tématu dva routes id klienta: client-route1 a client-route2.

Vzdálené připojení zprostředkovatele

Pole remoteBrokerConnection definuje podrobnosti připojení pro přemístění na vzdáleného zprostředkovatele. Obsahuje následující pole:

Pole Požadováno Popis
endpoint Ano Adresa URL koncového bodu vzdáleného zprostředkovatele s portem Například example.westeurope-1.ts.eventgrid.azure.net:8883.
Tls Ano Určuje, jestli je připojení šifrované pomocí protokolu TLS a certifikátu důvěryhodné certifikační autority. Viz podpora protokolu TLS
ověřování Ano Podrobnosti o ověřování pro Azure IoT MQ, které se mají použít se zprostředkovatelem. Musí to být jedna z následujících hodnot: spravovaná identita přiřazená systémem nebo X.509. Viz Ověřování.
Protokol No Řetězcová hodnota definující použití MQTT nebo MQTT přes WebSockets. Může být mqtt nebo webSocket. Výchozí hodnota je mqtt.

Ověřování

Ověřovací pole definuje metodu ověřování pro Azure IoT MQ, která se má použít se vzdáleným zprostředkovatelem. Obsahuje následující pole:

Pole Požadováno Popis
systemAssignedManagedIdentity No Ověřte se pomocí spravované identity přiřazené systémem. Viz Spravovaná identita.
x509 No Podrobnosti o ověřování pomocí certifikátů X.509 Viz X.509.

Spravovaná identita

Pole systemAssignedManagedIdentity obsahuje následující pole:

Pole Požadováno Popis
Publikum Ano Cílová skupina tokenu. Vyžaduje se, pokud používáte spravovanou identitu. Pro Event Grid je https://eventgrid.azure.netto .

Pokud se Azure IoT MQ nasadí jako rozšíření Azure Arc, ve výchozím nastavení získá spravovanou identitu přiřazení systému. Spravovanou identitu pro Azure IoT MQ byste měli použít k interakci s prostředky Azure, včetně zprostředkovatele Event Grid MQTT, protože umožňuje vyhnout se správě přihlašovacích údajů a zachovat vysokou dostupnost.

Pokud chcete použít spravovanou identitu pro ověřování s prostředky Azure, nejprve přiřaďte odpovídající roli Azure RBAC, jako je EventGrid TopicSpaces Publisher , ke spravované identitě Azure IoT MQ poskytované službou Arc.

Pak jako metodu ověřování zadejte a MQTTBridge Připojení or se spravovanou identitou:

spec:
  remoteBrokerConnection:
    authentication:
      systemAssignedManagedIdentity:
        audience: https://eventgrid.azure.net

Když používáte spravovanou identitu, ID klienta není konfigurovatelné a odpovídá ID prostředku Azure IoT MQ Azure Arc v rámci Azure Resource Manageru.

Spravovanou identitu přiřazenou systémem poskytuje Azure Arc. Certifikát přidružený ke spravované identitě se musí obnovit alespoň každých 90 dnů, aby se zabránilo ručnímu procesu obnovení. Další informace najdete v tématu Návody vypršení platnosti prostředků Kubernetes s podporou Služby Azure Arc?

X.509

Pole x509 obsahuje následující pole:

Pole Požadováno Popis
secretName Ano Tajný klíč Kubernetes obsahující klientský certifikát a privátní klíč. Službu Azure Key Vault můžete použít ke správě tajných kódů pro Azure IoT MQ místo tajných kódů Kubernetes. Další informace najdete v tématu Správa tajných kódů pomocí služby Azure Key Vault nebo tajných kódů Kubernetes.

Mnoho zprostředkovatelů MQTT, jako je Event Grid, podporuje ověřování X.509. Most MQT MQ MQ pro Azure IoTT může předložit klientský certifikát X.509 a vyjednat komunikaci TLS. Tajný klíč Kubernetes slouží k uložení klientského certifikátu X.509, privátního klíče a zprostředkující certifikační autority.

kubectl create secret generic bridge-client-secret \
--from-file=client_cert.pem=mqttbridge.pem \
--from-file=client_key.pem=mqttbridge.key \
--from-file=client_intermediate_certs.pem=intermediate.pem

A odkazovat na secretName:

spec:
  remoteBrokerConnection:
    authentication:
      x509:
        secretName: bridge-client-cert

Připojení místního zprostředkovatele

Pole localBrokerConnection definuje podrobnosti připojení pro přemístění na místního zprostředkovatele.

Pole Požadováno Popis
endpoint Ano Adresa URL koncového bodu vzdáleného zprostředkovatele s portem
Tls Ano Určuje, jestli je připojení šifrované pomocí protokolu TLS a certifikátu důvěryhodné certifikační autority. Viz podpora protokolu TLS
ověřování Ano Podrobnosti o ověřování pro Azure IoT MQ, které se mají použít se zprostředkovatelem. Jedinou podporovanou metodou je token účtu služby Kubernetes (SAT). Chcete-li použít sat, zadejte kubernetes: {}.

Ve výchozím nastavení se IoT MQ nasadí v oboru názvů azure-iot-operations s povoleným protokolem TLS a ověřováním SAT.

Nastavení připojení místního zprostředkovatele MqttBridge Připojení or musí být nakonfigurováno tak, aby odpovídalo. YAML nasazení pro MqttBridge Připojení or musí mít localBrokerConnection stejnou úroveň jako remoteBrokerConnection. Pokud například chcete použít protokol TLS s ověřováním SAT, aby se shodovaly s výchozím nasazením IoT MQ:

spec:
  localBrokerConnection:
    endpoint: aio-mq-dmqtt-frontend:8883
    tls:
      tlsEnabled: true
      trustedCaCertificateConfigMap: aio-ca-trust-bundle-test-only
    authentication:
      kubernetes: {}

trustedCaCertifcateName Tady je ConfigMap pro kořenovou certifikační autoritu Azure IoT MQ, jako je ConfigMap pro kořenovou ca vzdáleného zprostředkovatele. Výchozí kořenová certifikační autorita je uložena v objektu ConfigMap s názvem aio-ca-trust-bundle-test-only.

Další informace o získání kořenové certifikační autority najdete v tématu Konfigurace protokolu TLS s automatickou správou certifikátů pro zabezpečení komunikace MQTT.

Podpora TLS

Pole tls definuje konfiguraci protokolu TLS pro vzdálené nebo místní připojení zprostředkovatele. Obsahuje následující pole:

Pole Požadováno Popis
tlsEnabled Ano Bez ohledu na to, jestli je protokol TLS povolený nebo ne.
trustedCaCertificateConfigMap No Certifikát certifikační autority, který se má při připojování ke zprostředkovateli důvěřovat. Vyžaduje se, pokud je povolený protokol TLS.

Podpora šifrování TLS je dostupná pro připojení vzdáleného i místního zprostředkovatele.

  • Pro připojení ke vzdálenému zprostředkovateli: Pokud je povolený protokol TLS, měl by být jako odkaz na objekt ConfigMap Kubernetes zadán důvěryhodný certifikát certifikační autority. Pokud ne, metoda handshake protokolu TLS pravděpodobně selže, pokud vzdálený koncový bod není široce důvěryhodný certifikát důvěryhodné certifikační autority již v úložišti certifikátů operačního systému. Event Grid například používá široce důvěryhodný kořen certifikační autority, takže není nutné zadávat.
  • Pro místní zprostředkovací připojení (Azure IoT MQ): Pokud je pro naslouchací proces zprostředkovatele Azure IoT MQ povolený protokol TLS, musí být certifikát certifikační autority, který vystavil certifikát serveru naslouchacího procesu, zadán jako odkaz Kubernetes ConfigMap .

Pokud zadáte důvěryhodnou certifikační autoritu, vytvořte objekt ConfigMap obsahující veřejnou adresu CA a zadejte název objektu trustedCaCertificateConfigMap configmap ve vlastnosti. Příklad:

kubectl create configmap client-ca-configmap --from-file ~/.step/certs/root_ca.crt

Konfigurace MqttBridgeTopicMap

Prostředek MqttBridgeTopicMap definuje mapování témat mezi místními a vzdálenými zprostředkovateli. Musí se používat společně s prostředkem MqttBridge Připojení or. Zahrnuje následující součásti:

  • Název prostředku MqttBridge Připojení or pro propojení.
  • Seznam tras přemostění.
  • Volitelná konfigurace sdíleného předplatného.

MqttBridge Připojení or může používat více MqttBridgeTopic Mapy propojených s ním. Když se nasadí prostředek MqttBridge Připojení or, operátor Azure IoT MQ začne prohledát obor názvů pro všechny MqttBridgeTopic Mapy propojené s ním a automaticky spravovat tok zpráv mezi instancemi MqttBridge Připojení or. Po nasazení je objekt MqttBridgeTopicMap propojený s MqttBridge Připojení orem. Každý MqttBridgeTopicMap lze propojit pouze s jedním MqttBridge Připojení orem.

Následující příklad ukazuje konfiguraci MqttBridgeTopicMap pro přemostění zpráv ze vzdáleného tématu remote-topic do místního tématu local-topic:

apiVersion: mq.iotoperations.azure.com/v1beta1
kind: MqttBridgeTopicMap
metadata:
  name: my-topic-map
  namespace: azure-iot-operations 
spec:
  mqttBridgeConnectorRef: my-mqtt-bridge
  routes:
    - direction: remote-to-local
      name: first-route
      qos: 0
      source: remote-topic
      target: local-topic
      sharedSubscription:
        groupMinimumShareNumber: 3
        groupName: group1
    - direction: local-to-remote
      name: second-route
      qos: 1
      source: local-topic
      target: remote-topic

Následující tabulka popisuje pole v prostředku MqttBridgeTopicMap:

Pole Požadováno Popis
mqttBridge Připojení orRef Ano Název prostředku, na který MqttBridgeConnector chcete vytvořit propojení.
routes Ano Seznam tras přemostění. Další informace naleznete v tématu Trasy.

Trasy

MqttBridgeTopicMap může mít více tras. Pole routes definuje seznam tras. Obsahuje následující pole:

Pole Požadováno Popis
směr Ano Směr toku zpráv Může to být remote-to-local nebo local-to-remote. Další informace naleznete v tématu Směr.
name Ano Název trasy.
Qos No Kvalita služby MQTT (QoS). Výchozí hodnota je 1.
zdroj Ano Zdrojové téma MQTT. Můžou mít zástupné kóty jako # a +. Zobrazení zástupných znaků ve zdrojovém tématu
target No Cílové téma MQTT. Nemůžu mít zástupné cardy. Pokud není zadaný, bude stejný jako zdroj. Viz Referenční zdrojové téma v cíli.
sharedSubscription No Konfigurace sdíleného předplatného Aktivuje nakonfigurovaný počet klientů pro další škálování. Další informace najdete v tématu Sdílená předplatná.

Směr

Pokud je například směr local-to-remote, Azure IoT MQ publikuje všechny zprávy v zadaném místním tématu do vzdáleného tématu:

routes:
  - direction: local-to-remote
    name: "send-alerts"
    source: "alerts"
    target: "factory/alerts"

Pokud je směr obrácený, Azure IoT MQ přijímá zprávy ze vzdáleného zprostředkovatele. Tady je cíl vynechán a všechny zprávy z commands/factory tématu na vzdáleném zprostředkovateli se publikuje na stejném tématu místně.

routes:
  - direction: remote-to-local
    name: "receive-commands"
    source: "commands/factory"

Zástupné cardy ve zdrojovém tématu

Pokud chcete překlenout z nestatických témat, použijte zástupné cardy, abyste definovali, jak se mají vzory témat shodovat, a pravidlo překladu názvů témat. Pokud chcete například přemístit všechny zprávy ve všech dílčích dílčích podtemech, použijte zástupný znak s více úrovněmitelemetry#:

routes:
  - direction: local-to-remote
    name: "wildcard-source"
    source: "telemetry/#"
    target: "factory/telemetry"

V příkladu, pokud je zpráva publikována do libovolného tématu v části telemetry, jako je telemetry/furnace/temperaturenapříklad , Azure IoT MQ ji publikuje do vzdáleného přemístit zprostředkovatele pod statickým factory/telemetry tématem.

Pro zástupný znak tématu na jedné úrovni použijte + místo toho, například telemetry/+/temperature.

Konektor mostu MQTT musí znát přesné téma v cílovém zprostředkovateli, a to buď vzdáleně, nebo Azure IoT MQ bez jakékoli nejednoznačnosti. Zástupné cardy jsou k dispozici pouze v rámci source tématu.

Referenční zdrojové téma v cíli

Pokud chcete odkazovat na celé zdrojové téma, úplně v trase vynecháte konfiguraci cílového tématu. Podporují se zástupné kóty.

Například jakákoli zpráva publikovaná v tématu my-topic/#( my-topic/foo například nebo my-topic/bar) se přemístit na vzdáleného zprostředkovatele ve stejném tématu:

routes:
  - direction: local-to-remote
    name: "target-same-as-source"
    source: "my-topic/#"
    # No target

Jiné metody odkazu na zdrojové téma nejsou podporovány.

Sdílená předplatná

Pole sharedSubscription definuje konfiguraci sdíleného předplatného pro trasu. Obsahuje následující pole:

Pole Požadováno Popis
groupMinimumShareNumber Ano Početklientůch
Groupname Ano Název sdílené skupiny předplatného

Sdílená předplatná pomáhají Azure IoT MQ vytvářet další klienty pro most MQTT. Pro každou trasu můžete nastavit jiné sdílené předplatné. Azure IoT MQ se přihlásí k odběru zpráv ze zdrojového tématu a odesílá je do jednoho klienta najednou pomocí kruhového dotazování. Potom klient publikuje zprávy do zprostředkovatele přemístit.

Pokud například nastavíte trasu se sdíleným předplatným a nastavíte ji groupMinimumShareNumber jako 3:

routes:
    - direction: local-to-remote
      qos: 1
      source: "shared-sub-topic"
      target: "remote/topic"
      sharedSubscription:
        groupMinimumShareNumber: 3
        groupName: "sub-group"

Most MQT MQ pro Azure IoT MQT vytváří tři klienty předplatitelů bez ohledu na počet instancí. Každý z nich $share/sub-group/shared-sub-topiczíská pouze jeden klient . Pak stejný klient publikuje zprávu do přemíscené vzdáleného zprostředkovatele v tématu remote/topic. Další zpráva přejde na dalšího klienta.

To vám pomůže vyvážit provoz zpráv pro most mezi více klienty s různými ID. To je užitečné v případě, že přemíscený zprostředkovatel omezuje počet zpráv, které může každý klient odeslat.

Podpora zprostředkovatele Azure Event Grid MQTT

Pokud chcete minimalizovat správu přihlašovacích údajů, doporučuje se použití spravované identity přiřazené systémem a Azure RBAC přemístit Azure IoT MQ pomocí funkce zprostředkovatele MQT Azure Event Gridu.

Kompletní kurz najdete v tématu Kurz: Konfigurace mostu MQTT mezi Azure IoT MQ Preview a Azure Event Gridem.

Připojení do zprostředkovatele Event Grid MQTT se spravovanou identitou

Nejprve pomocí az k8s-extension showa vyhledejte ID objektu zabezpečení pro rozšíření Azure IoT MQ Arc. Poznamenejte si výstupní hodnotu , identity.principalIdkterá by měla vypadat jako abcd1234-5678-90ab-cdef-1234567890ab.

az k8s-extension show --resource-group <RESOURCE_GROUP> --cluster-name <CLUSTER_NAME> --name mq --cluster-type connectedClusters --query identity.principalId -o tsv

Pak pomocí Azure CLI přiřaďte role spravované identitě rozšíření Azure IoT MQ Arc. Nahraďte <MQ_ID> ID objektu zabezpečení, které jste našli v předchozím kroku. Pokud chcete například přiřadit roli EventGrid TopicSpaces Publisheru:

az role assignment create --assignee <MQ_ID> --role 'EventGrid TopicSpaces Publisher' --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.EventGrid/namespaces/<EVENT_GRID_NAMESPACE>

Tip

Pokud chcete optimalizovat princip nejnižších oprávnění, můžete roli přiřadit k prostoru tématu místo celého oboru názvů Event Gridu. Další informace najdete v tématech Řízení přístupu na základě role a řízení přístupu na základě role v Event Gridu.

Nakonec vytvořte MQTTBridge Připojení or a jako metodu ověřování zvolte spravovanou identitu. Vytvořte MqttBridgeTopic Mapy a nasaďte most MQTT pomocí kubectl.

Maximální počet relací klienta na název ověřování

Pokud bridgeInstances je nastavená hodnota vyšší než 1, nakonfigurujte maximální počet klientských relací zprostředkovatele >Event Grid MQTT na název ověřování tak, aby odpovídal počtu instancí. Tato konfigurace zabraňuje problémům, jako je chyba 151, překročení kvóty.

Limit počtu připojení

Pokud použití spravované identity není možné, mějte při návrhu nastavení na paměti limity pro zprostředkovatele Event Grid MQTT pro jednotlivé připojení. V době publikování je limit pro připojení 100 zpráv za sekundu. Pokud chcete zvýšit propustnost mostu MQTT, zvyšte počet klientů obsluhujících jednotlivé trasy pomocí sdílených předplatných.

Přemístání z jiného zprostředkovatele do Azure IoT MQ Preview

Azure IoT MQ je kompatibilní zprostředkovatel MQTT a další zprostředkovatelé na něj můžou přemíst příslušné přihlašovací údaje pro ověřování a autorizaci. Viz například dokumentace k mostu MQTT pro HiveMQ, VerneMQ, EMQX a Mosquitto.