Anslut Azure IoT MQ Preview MQTT Bridge Cloud Connector till andra MQTT-koordinatorer

Viktigt!

Förhandsversion av Azure IoT Operations – aktiverad av Azure Arc finns för närvarande i FÖRHANDSVERSION. Du bör inte använda den här förhandsgranskningsprogramvaran i produktionsmiljöer.

Juridiska villkor för Azure-funktioner i betaversion, förhandsversion eller som av någon annan anledning inte har gjorts allmänt tillgängliga ännu finns i kompletterande användningsvillkor för Microsoft Azure-förhandsversioner.

Du kan använda Azure IoT MQ Preview MQTT-bryggan för att ansluta till Azure Event Grid eller andra MQTT-koordinatorer. MQTT-bryggning är processen att ansluta två MQTT-koordinatorer tillsammans så att de kan utbyta meddelanden.

  • När två koordinatorer bryggs vidarebefordras meddelanden som publiceras på en asynkron meddelandekö automatiskt till den andra och vice versa.
  • MQTT-bryggning hjälper till att skapa ett nätverk av MQTT-koordinatorer som kommunicerar med varandra och expanderaR MQTT-infrastrukturen genom att lägga till ytterligare asynkrona koordinatorer efter behov.
  • MQTT-bryggning är användbart för flera fysiska platser, delning av MQTT-meddelanden och ämnen mellan gränsen och molnet, eller när du vill integrera MQTT med andra meddelandesystem.

Om du vill överbrygga till en annan koordinator måste Azure IoT MQ känna till url:en för fjärrkoordinatorslutpunkten, vilken MQTT-version, hur du autentiserar och vilka ämnen som ska mappas. För att maximera sammansättning och flexibilitet på ett Kubernetes-inbyggt sätt konfigureras dessa värden som anpassade Kubernetes-resurser (CRD: er) som kallas MqttBridge Anslut or och MqttBridgeTopicMap. Den här guiden beskriver hur du skapar MQTT-brygganslutningen med hjälp av dessa resurser.

  1. Skapa en YAML-fil som definierar MqttBridge Anslut eller resurs. Du kan använda yaml-exemplet, men se till att ändra namespace så att det matchar det som har Azure IoT MQ distribuerat och remoteBrokerConnection.endpoint för att matcha url:en för fjärrkoordinatorslutpunkten.

  2. Skapa en YAML-fil som definierar MqttBridgeTopicMap-resursen . Du kan använda YAML-exempel, men se till att ändra namespace så att det matchar det som har Azure IoT MQ distribuerat och mqttBridgeConnectorRef för att matcha namnet på MqttBridge Anslut eller-resursen som du skapade i det tidigare steget.

  3. Distribuera MQTT-bryggans anslutningsapp och ämneskarta med kubectl apply -f <filename>.

    $ 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
    

När du har distribuerat använder du kubectl get pods för att verifiera att meddelanden börjar flöda till och från slutpunkten.

Konfigurera MqttBridge Anslut or

MqttBridge Anslut or-resursen definierar MQTT-brygganslutningen som kan kommunicera med en fjärrkoordinator. Den innehåller följande komponenter:

  • En eller flera MQTT-brygganslutningsinstanser. Varje instans är en container som kör MQTT-brygganslutningen.
  • En fjärranslutning för asynkron meddelandekö.
  • En valfri lokal koordinatoranslutning.

I följande exempel visas en exempelkonfiguration för bryggning till en Azure Event Grid MQTT-koordinator. Den använder systemtilldelad hanterad identitet för autentisering och TLS-kryptering.

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: {}

I följande tabell beskrivs fälten i MqttBridge Anslut eller-resursen:

Fält Obligatoriskt Beskrivning
bild Ja Avbildningen av Kafka-anslutningsappen. Du kan ange pullPolicy, repositoryoch tag för avbildningen. Rätt värden visas i föregående exempel.
Protokollet Ja MQTT-protokollversion. Det kan vara v5 eller v3. Se MQTT v3.1.1-stöd.
bridgeInstances Nej Antal instanser för brygganslutningen. Standard är 1. Se Antal instanser.
clientIdPrefix Nej Prefixet för det dynamiskt genererade klient-ID:t. Standardvärdet är inget prefix. Se Konfiguration av klient-ID.
logLevel Nej Loggnivå. Det kan vara debug eller info. Standard är info.
remoteBroker Anslut ion Ja Anslut information om fjärrkoordinatorn att överbrygga till. Se Anslutning till fjärrkoordinator.
localBroker Anslut ion Nej Anslut information om den lokala mäklaren att överbrygga till. Standardvärdet visas. Se Lokal koordinatoranslutning.

Stöd för MQTT v3.1.1

Brygganslutningen kan konfigureras för att använda MQTT v3.1.1 med både den lokala koordinatoranslutningen för Azure IoT MQ och fjärranslutningen. Detta bryter dock delade prenumerationer om fjärrkoordinatorn inte stöder det. Om du planerar att använda delade prenumerationer lämnar du det som standard v5.

Antal instanser

För hög tillgänglighet och skalning konfigurerar du MQTT-brygganslutningen så att den använder flera instanser. Meddelandeflöde och vägar balanseras automatiskt mellan olika instanser.

spec:
  bridgeInstances: 2

Konfiguration av klient-ID

Azure IoT MQ genererar ett klient-ID för varje MqttBridge Anslut eller-klient med hjälp av {clientIdPrefix}-{routeName}ett prefix som du anger i formatet . Det här klient-ID:t är viktigt för Azure IoT MQ för att minska meddelandeförlusten och undvika konflikter eller kollisioner med befintliga klient-ID:er eftersom MQTT-specifikationen endast tillåter en anslutning per klient-ID.

Om till exempel clientIdPrefix: "client-", och det finns två routes i ämneskartan, är klient-ID:na: client-route1 och client-route2.

Fjärranslutning för asynkron koordinator

Fältet remoteBrokerConnection definierar anslutningsinformationen för att brygga till fjärrkoordinatorn. Den innehåller följande fält:

Fält Obligatoriskt Beskrivning
slutpunkt Ja Url för fjärrkoordinatorslutpunkt med port. Exempel: example.westeurope-1.ts.eventgrid.azure.net:8883
Tls Ja Anger om anslutningen krypteras med TLS och betrott CA-certifikat. Se TLS-stöd
autentisering Ja Autentiseringsinformation för Azure IoT MQ som ska användas med koordinatorn. Måste vara något av följande värden: systemtilldelad hanterad identitet eller X.509. Se Autentisering.
Protokollet Nej Strängvärde som definierar att använda MQTT eller MQTT över WebSockets. Det kan vara mqtt eller webSocket. Standard är mqtt.

Autentisering

Autentiseringsfältet definierar autentiseringsmetoden för Azure IoT MQ som ska användas med fjärrkoordinatorn. Den innehåller följande fält:

Fält Obligatoriskt Beskrivning
systemAssignedManagedIdentity Nej Autentisera med systemtilldelad hanterad identitet. Se Hanterad identitet.
x509 Nej Autentiseringsinformation med X.509-certifikat. Se X.509.

Hanterad identitet

Fältet systemAssignedManagedIdentity innehåller följande fält:

Fält Obligatoriskt Beskrivning
Publik Ja Målgruppen för token. Krävs om du använder hanterad identitet. För Event Grid är https://eventgrid.azure.netdet .

Om Azure IoT MQ distribueras som ett Azure Arc-tillägg hämtar det en systemtilldelningshanterad identitet som standard. Du bör använda en hanterad identitet för Azure IoT MQ för att interagera med Azure-resurser, inklusive Event Grid MQTT-koordinator, eftersom det gör att du kan undvika hantering av autentiseringsuppgifter och behålla hög tillgänglighet.

Om du vill använda hanterad identitet för autentisering med Azure-resurser tilldelar du först en lämplig Azure RBAC-roll som EventGrid TopicSpaces Publisher till Azure IoT MQ:s hanterade identitet som tillhandahålls av Arc.

Ange sedan och MQTTBridge Anslut eller med hanterad identitet som autentiseringsmetod:

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

När du använder hanterad identitet kan inte klient-ID:t konfigureras och motsvarar Azure IoT MQ Azure Arc-tilläggets Azure Resource Manager-resurs-ID i Azure.

Den systemtilldelade hanterade identiteten tillhandahålls av Azure Arc. Certifikatet som är associerat med den hanterade identiteten måste förnyas minst var 90:e dag för att undvika en manuell återställningsprocess. Mer information finns i Hur gör jag för att adress som har upphört att gälla för Azure Arc-aktiverade Kubernetes-resurser?

X.509

Fältet x509 innehåller följande fält:

Fält Obligatoriskt Beskrivning
secretName Ja Kubernetes-hemligheten som innehåller klientcertifikatet och den privata nyckeln. Du kan använda Azure Key Vault för att hantera hemligheter för Azure IoT MQ i stället för Kubernetes-hemligheter. Mer information finns i Hantera hemligheter med Hjälp av Azure Key Vault eller Kubernetes-hemligheter.

Många MQTT-koordinatorer, till exempel Event Grid, stöder X.509-autentisering. Azure IoT MQ:s MQTT-brygga kan presentera ett X.509-klientcertifikat och förhandla om TLS-kommunikationen. Använd en Kubernetes-hemlighet för att lagra X.509-klientcertifikatet, den privata nyckeln och den mellanliggande certifikatutfärdaren.

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

Och referera till den med secretName:

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

Anslutning till lokal asynkron meddelandekö

Fältet localBrokerConnection definierar anslutningsinformationen för att överbrygga till den lokala koordinatorn.

Fält Obligatoriskt Beskrivning
slutpunkt Ja Url för fjärrkoordinatorslutpunkt med port.
Tls Ja Anger om anslutningen krypteras med TLS och betrott CA-certifikat. Se TLS-stöd
autentisering Ja Autentiseringsinformation för Azure IoT MQ som ska användas med koordinatorn. Den enda metod som stöds är Kubernetes-tjänstkontotoken (SAT). Om du vill använda SAT anger du kubernetes: {}.

Som standard distribueras IoT MQ i namnområdet azure-iot-operations med TLS aktiverat och SAT-autentisering.

Sedan måste anslutningsinställningen MqttBridge Anslut eller lokal koordinator konfigureras så att den matchar. Distributions-YAML för MqttBridge Anslut eller måste ha localBrokerConnection på samma nivå som remoteBrokerConnection. Om du till exempel vill använda TLS med SAT-autentisering för att matcha standarddistributionen av IoT MQ:

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

trustedCaCertifcateName Här är ConfigMap för rotcertifikatutfärdare för Azure IoT MQ, som ConfigMap för rotcertifikatutfärdare för fjärrkoordinatorn. Standardrotcertifikatutfärdare lagras i en ConfigMap med namnet aio-ca-trust-bundle-test-only.

Mer information om hur du hämtar rotcertifikatutfärdare finns i Konfigurera TLS med automatisk certifikathantering för att skydda MQTT-kommunikation.

TLS-support

Fältet tls definierar TLS-konfigurationen för fjärranslutningen eller den lokala koordinatoranslutningen. Den innehåller följande fält:

Fält Obligatoriskt Beskrivning
tlsEnabled Ja Om TLS är aktiverat eller inte.
trustedCaCertificateConfigMap Nej Certifikatutfärdarcertifikatet som ska lita på när du ansluter till asynkron meddelandekö. Krävs om TLS är aktiverat.

Stöd för TLS-kryptering är tillgängligt för både fjärranslutningar och lokala koordinatoranslutningar.

  • För anslutning till fjärrkoordinator: Om TLS är aktiverat ska ett betrott CA-certifikat anges som en Kubernetes ConfigMap-referens . Annars misslyckas TLS-handskakningen förmodligen om inte fjärrslutpunkten är allmänt betrodd Ett betrott CA-certifikat finns redan i OS-certifikatarkivet. Event Grid använder till exempel brett betrodd CA-rot, så det krävs inte att ange.
  • För lokal (Azure IoT MQ)-koordinatoranslutning: om TLS är aktiverat för Azure IoT MQ-koordinatorlyssnare bör CA-certifikat som utfärdade lyssnarservercertifikatet anges som en Kubernetes ConfigMap-referens .

När du anger att en betrodd ca krävs skapar du en ConfigMap som innehåller den offentliga potionen för certifikatmottagaren och anger configmap-namnet i trustedCaCertificateConfigMap egenskapen. Till exempel:

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

Konfigurera MqttBridgeTopicMap

MqttBridgeTopicMap-resursen definierar ämnesmappningen mellan lokala och fjärranslutna koordinatorer. Den måste användas tillsammans med en MqttBridge Anslut eller resurs. Den innehåller följande komponenter:

  • Namnet på MqttBridge Anslut eller-resursen som du vill länka till.
  • En lista över vägar för bryggning.
  • En valfri konfiguration av delad prenumeration.

En MqttBridge Anslut or kan använda flera MqttBridgeTopic Kartor länkade med den. När en MqttBridge Anslut or-resurs distribueras börjar Azure IoT MQ-operatorn genomsöka namnområdet efter eventuella MqttBridgeTopic Kartor länkade med den och automatiskt hantera meddelandeflödet mellan MqttBridge Anslut eller-instanserna. När MqttBridgeTopicMap har distribuerats länkas den sedan till MqttBridge Anslut or. Varje MqttBridgeTopicMap kan bara länkas till en MqttBridge Anslut or.

I följande exempel visas en MqttBridgeTopicMap-konfiguration för bryggning av meddelanden från fjärravsnittet remote-topic till det lokala ämnet 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

I följande tabell beskrivs fälten i MqttBridgeTopicMap-resursen:

Fält Obligatoriskt Beskrivning
mqttBridge Anslut orRef Ja Namnet på resursen som MqttBridgeConnector ska länkas till.
Vägar Ja En lista över vägar för bryggning. Mer information finns i Vägar.

Vägar

En MqttBridgeTopicMap kan ha flera vägar. Fältet routes definierar listan över vägar. Den innehåller följande fält:

Fält Obligatoriskt Beskrivning
riktning Ja Meddelandeflödets riktning. Det kan vara remote-to-local eller local-to-remote. Mer information finns i Riktning.
name Ja Namnet på vägen.
Qos Nej MQTT-tjänstkvalitet (QoS). Standardvärdet är 1.
source Ja MQTT-källavsnitt. Kan ha jokertecken som # och +. Se Jokertecken i källavsnittet.
mål Nej MQTT-målämne. Det går inte att ha jokertecken. Om det inte anges är det samma som källan. Se referenskällans ämne i målet.
sharedSubscription Nej Konfiguration av delad prenumeration. Aktiverar ett konfigurerat antal klienter för ytterligare skalning. Mer information finns i Delade prenumerationer.

Riktning

Om riktningen till exempel är local-to-remote publicerar Azure IoT MQ alla meddelanden i det angivna lokala ämnet till fjärravsnittet:

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

Om riktningen är omvänd tar Azure IoT MQ emot meddelanden från en fjärrkoordinator. Här utelämnas målet och alla meddelanden från commands/factory ämnet på fjärrkoordinatorn publiceras på samma ämne lokalt.

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

Jokertecken i källavsnittet

Om du vill överbrygga från icke-statiska ämnen använder du jokertecken för att definiera hur ämnesmönstren ska matchas och regeln för ämnesnamnöversättningen. Om du till exempel vill överbrygga alla meddelanden i alla underavsnitt under telemetryanvänder du jokertecknet på flera nivåer # :

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

I exemplet, om ett meddelande publiceras till något ämne under telemetry, till exempel telemetry/furnace/temperature, publicerar Azure IoT MQ det till den fjärranslutna asynkrona asynkron meddelandekö under det statiska factory/telemetry ämnet.

För jokertecken för enstaka ämnen använder du + i stället, t.ex telemetry/+/temperature. .

MQTT-brygganslutningen måste känna till det exakta ämnet i målkoordinatorn, antingen fjärr- eller Azure IoT MQ utan tvetydighet. Jokertecken är endast tillgängliga som en del av source ämnet.

Referenskällans ämne i målet

Om du vill referera till hela källavsnittet utelämnar du målämneskonfigurationen helt och hållet i vägen. Jokertecken stöds.

Till exempel överbryggs alla meddelanden som publiceras under ämnet my-topic/#, t.ex my-topic/foo . eller my-topic/bar, till fjärrkoordinatorn under samma ämne:

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

Andra metoder för källämnesreferens stöds inte.

Delade prenumerationer

Fältet sharedSubscription definierar konfigurationen av den delade prenumerationen för vägen. Den innehåller följande fält:

Fält Obligatoriskt Beskrivning
groupMinimumShareNumber Ja Antal klienter som ska användas för delad prenumeration.
Gruppnamn Ja Namn på delad prenumerationsgrupp.

Delade prenumerationer hjälper Azure IoT MQ att skapa fler klienter för MQTT-bryggan. Du kan konfigurera en annan delad prenumeration för varje väg. Azure IoT MQ prenumererar på meddelanden från källavsnittet och skickar dem till en klient i taget med resursallokering. Sedan publicerar klienten meddelandena till den bryggade asynkron meddelandekö.

Om du till exempel konfigurerar en väg med en delad prenumeration och anger som groupMinimumShareNumber3:

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

Azure IoT MQ:s MQTT-brygga skapar tre prenumerantklienter oavsett hur många instanser. Endast en klient hämtar varje meddelande från $share/sub-group/shared-sub-topic. Sedan publicerar samma klient meddelandet till den bryggade fjärrkoordinatorn under ämnet remote/topic. Nästa meddelande går till en nästa klient.

På så sätt kan du balansera meddelandetrafiken för bryggan mellan flera klienter med olika ID:er. Detta är användbart om din bryggade asynkron meddelandekö begränsar hur många meddelanden varje klient kan skicka.

Stöd för Azure Event Grid MQTT-koordinator

För att minimera hantering av autentiseringsuppgifter är användning av den systemtilldelade hanterade identiteten och Azure RBAC det rekommenderade sättet att överbrygga Azure IoT MQ med Azure Event Grids MQTT-koordinatorfunktion.

En självstudiekurs från slutpunkt till slutpunkt finns i Självstudie: Konfigurera MQTT-brygga mellan Azure IoT MQ Preview och Azure Event Grid.

Anslut till Event Grid MQTT-koordinator med hanterad identitet

Leta först upp huvud-ID:t för Azure IoT MQ Arc-tillägget med hjälp av az k8s-extension show. Anteckna utdatavärdet för identity.principalId, som bör se ut som 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

Använd sedan Azure CLI för att tilldela rollerna till den hanterade identiteten för Azure IoT MQ Arc-tillägget. Ersätt <MQ_ID> med huvud-ID:t som du hittade i föregående steg. Om du till exempel vill tilldela rollen EventGrid TopicSpaces Publisher :

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>

Dricks

Om du vill optimera principen om minsta behörighet kan du tilldela rollen till ett ämnesutrymme i stället för hela Event Grid-namnområdet. Mer information finns i Event Grid RBAC och Ämnesutrymmen.

Skapa slutligen en MQTTBridge Anslut eller och välj hanterad identitet som autentiseringsmetod. Skapa MqttBridgeTopic Kartor och distribuera MQTT-bryggan med kubectl.

Maximalt antal klientsessioner per autentiseringsnamn

Om bridgeInstances har angetts som högre än 1konfigurerar du Event Grid MQTT Broker Configuration>Maximum client sessions per authentication name (Högsta klientsessioner per autentiseringsnamn) så att det matchar antalet instanser. Den här konfigurationen förhindrar problem som att fel 151-kvoten har överskridits.

Gräns per anslutning

Om det inte går att använda hanterad identitet bör du ha gränserna per anslutning för Event Grid MQTT-koordinatorn i åtanke när du utformar konfigurationen. Vid publiceringstillfället är gränsen 100 meddelanden/sekund varje riktning för en anslutning. Om du vill öka MQTT-bryggdataflödet använder du delade prenumerationer för att öka antalet klienter som betjänar varje väg.

Brygga från en annan asynkron meddelandekö till Förhandsversion av Azure IoT MQ

Azure IoT MQ är en kompatibel MQTT-koordinator och andra asynkrona koordinatorer kan brygga till den med lämpliga autentiserings- och auktoriseringsuppgifter. Se till exempel MQTT-bridgedokumentationen för HiveMQ, VerneMQ, EMQX och Mosquitto.