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.
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 ochremoteBrokerConnection.endpoint
för att matcha url:en för fjärrkoordinatorslutpunkten.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 ochmqttBridgeConnectorRef
för att matcha namnet på MqttBridge Anslut eller-resursen som du skapade i det tidigare steget.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 , repository och 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.net det . |
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.
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 telemetry
anvä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 groupMinimumShareNumber
3:
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 1
konfigurerar 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.