Kurz: Konfigurace mostu MQTT mezi Azure IoT MQ Preview a Azure Event Gridem

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.

V tomto kurzu se dozvíte, jak nakonfigurovat IoT MQ pro obousměrný most MQTT pomocí zprostředkovatele Azure Event Grid MQTT Broker PaaS. Tuto funkci můžete použít ke zpracování dat IoT na hraničních zařízeních a v cloudu. IoT MQ můžete například použít ke zpracování telemetrických dat na hraničních zařízeních a následnému přemostění dat do Azure Event Gridu pro další zpracování v cloudu.

Požadavky

Nastavení proměnných prostředí

Přihlaste se pomocí Azure CLI:

az login

Nastavte proměnné prostředí pro zbytek nastavení. Nahraďte hodnoty <> platnými hodnotami nebo názvy podle vašeho výběru. Ve vašem předplatném Azure se vytvoří nový obor názvů a téma služby Azure Event Grid na základě vámi zadaných názvů:

# For this tutorial, the steps assume the IoT Operations cluster and the Event Grid
# are in the same subscription, resource group, and location.

# Name of the resource group of Azure Event Grid and IoT Operations cluster 
export RESOURCE_GROUP=<RESOURCE_GROUP_NAME>

# Azure region of Azure Event Grid and IoT Operations cluster
export LOCATION=<LOCATION>

# Name of the Azure Event Grid namespace
export EVENT_GRID_NAMESPACE=<EVENT_GRID_NAMESPACE>

# Name of the Arc-enabled IoT Operations cluster 
export CLUSTER_NAME=<CLUSTER_NAME>

# Subscription ID of Azure Event Grid and IoT Operations cluster
export SUBSCRIPTION_ID=<SUBSCRIPTION_ID>

Vytvoření oboru názvů Event Gridu s povoleným zprostředkovatelem MQTT

Vytvoření oboru názvů Event Gridu pomocí Azure CLI Umístění by mělo být stejné jako umístění, které jste použili k nasazení operací Azure IoT.

az eventgrid namespace create \
  --namespace-name $EVENT_GRID_NAMESPACE \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION \
  --topic-spaces-configuration "{state:Enabled,maximumClientSessionsPerAuthenticationName:3}"

Nastavením tohoto topic-spaces-configurationpříkazu vytvoří obor názvů s:

  • Povolený zprostředkovatel MQTT
  • Maximální počet klientských relací na název ověřování je 3.

Možnost maximálního počtu relací klientů umožňuje ioT MQ vytvořit více instancí a stále se připojit. Další informace najdete v tématu podpora více relací.

Vytvoření prostoru tématu

V oboru názvů Event Grid vytvořte prostor tématu pojmenovaný tutorial šablonou tématu telemetry/#.

az eventgrid namespace topic-space create \
  --resource-group $RESOURCE_GROUP \
  --namespace-name $EVENT_GRID_NAMESPACE \
  --name tutorial \
  --topic-templates "telemetry/#"

Pomocí zástupné # znaky v šabloně tématu můžete publikovat do libovolného telemetry tématu v prostoru tématu. Například telemetry/temperature nebo telemetry/humidity.

Udělení přístupu k prostoru témat Event Gridu službě Azure IoT MQ Preview

Pomocí az k8s-extension showfunkce vyhledejte ID objektu zabezpečení pro rozšíření Azure IoT MQ Arc. Příkaz uloží ID objektu zabezpečení do proměnné pro pozdější použití.

export PRINCIPAL_ID=$(az k8s-extension show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name mq \
  --cluster-type connectedClusters \
  --query identity.principalId -o tsv)
echo $PRINCIPAL_ID

Poznamenejte si výstupní hodnotu , identity.principalIdcož je hodnota GUID s následujícím formátem:

d84481ae-9181-xxxx-xxxx-xxxxxxxxxxxx

Pak pomocí Azure CLI přiřaďte roli vydavatele a odběratele k IoT MQ pro prostor témat, který jste vytvořili.

Přiřaďte roli vydavatele:

az role assignment create \
  --assignee $PRINCIPAL_ID \
  --role "EventGrid TopicSpaces Publisher" \
  --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.EventGrid/namespaces/$EVENT_GRID_NAMESPACE/topicSpaces/tutorial

Přiřaďte roli odběratele:

az role assignment create \
  --assignee $PRINCIPAL_ID \
  --role "EventGrid TopicSpaces Subscriber" \
  --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.EventGrid/namespaces/$EVENT_GRID_NAMESPACE/topicSpaces/tutorial

Tip

Obor odpovídá id prostoru tématu, který jste vytvořili az eventgrid namespace topic-space create v předchozím kroku, a ve výstupu příkazu ho najdete.

Název hostitele zprostředkovatele Event Grid MQTT

Pomocí Azure CLI získejte název hostitele zprostředkovatele Event Grid MQTT.

az eventgrid namespace show \
  --resource-group $RESOURCE_GROUP \
  --namespace-name $EVENT_GRID_NAMESPACE \
  --query topicSpacesConfiguration.hostname \
  -o tsv

Poznamenejte si výstupní hodnotu, topicSpacesConfiguration.hostname která je hodnotou názvu hostitele, která vypadá takto:

example.region-1.ts.eventgrid.azure.net

Vytvoření konektoru mostu MQTT a prostředků map témat

V novém souboru s názvem bridge.yamlzadejte konektor mostu MQTT a konfiguraci mapování témat. Nahraďte příklad zástupné hodnoty ve remoteBroker Připojení ionendpoint názvem hostitele Event Grid MQTT z předchozího kroku. Uveďte číslo portu 8883.

apiVersion: mq.iotoperations.azure.com/v1beta1
kind: MqttBridgeConnector
metadata:
  name: tutorial-bridge
  namespace: azure-iot-operations
spec:
  image: 
    repository: mcr.microsoft.com/azureiotoperations/mqttbridge
    tag: 0.4.0-preview
    pullPolicy: IfNotPresent
  protocol: v5
  bridgeInstances: 2
  logLevel: debug
  remoteBrokerConnection:
    endpoint: example.region-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: {}
---
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: MqttBridgeTopicMap
metadata:
  name: tutorial-topic-map
  namespace: azure-iot-operations 
spec:
  mqttBridgeConnectorRef: tutorial-bridge
  routes:
    - direction: local-to-remote
      name: publish
      source: tutorial/local
      target: telemetry/iot-mq
      qos: 1
    - direction: remote-to-local
      name: subscribe
      source: telemetry/#
      target: tutorial/cloud
      qos: 1

Konektor mostu MQTT nakonfigurujete na:

  • Použití zprostředkovatele Event Grid MQTT jako vzdáleného zprostředkovatele
  • Použití místního zprostředkovatele IoT MQ jako místního zprostředkovatele
  • Použití protokolu TLS pro vzdálené i místní zprostředkovatele
  • Použití spravované identity přiřazené systémem pro ověřování pro vzdáleného zprostředkovatele
  • Použití účtu služby Kubernetes pro ověřování u místního zprostředkovatele
  • Mapování tématu na tutorial/local téma na vzdáleném zprostředkovateli pomocí mapy témat telemetry/iot-mq
  • Mapování tématu na vzdáleném zprostředkovateli pomocí telemetry/#tutorial/cloud mapy tématu na místním zprostředkovateli

Když publikujete do tutorial/local tématu na místním zprostředkovateli IoT MQ, zpráva se přemísní na telemetry/iot-mq téma na vzdáleném zprostředkovateli Event Grid MQTT. Pak se zpráva přemísní zpět na tutorial/cloud téma místního zprostředkovatele IoT MQ. Podobně když publikujete do telemetry/iot-mq tématu na vzdáleném zprostředkovateli Event Grid MQTT, zpráva se přemísní na tutorial/cloud téma místního zprostředkovatele IoT MQ.

Použijte soubor nasazení s kubectl.

kubectl apply -f bridge.yaml
mqttbridgeconnector.mq.iotoperations.azure.com/tutorial-bridge created
mqttbridgetopicmap.mq.iotoperations.azure.com/tutorial-topic-map created

Ověření nasazení mostu MQTT

Pomocí kubectl zkontrolujte, jestli jsou dvě instance mostu připravené a spuštěné.

kubectl get pods -n azure-iot-operations -l app=aio-mq-mqttbridge
NAME                       READY   STATUS    RESTARTS   AGE
aio-mq-tutorial-bridge-0   1/1     Running   0          45s
aio-mq-tutorial-bridge-1   1/1     Running   0          45s

Teď můžete publikovat na místním zprostředkovateli a přihlásit se k odběru zprostředkovatele Event Grid MQTT a ověřit tok zpráv podle očekávání.

Nasazení klienta MQTT

Pokud chcete ověřit, že most MQTT funguje, nasaďte klienta MQTT do stejného oboru názvů jako IoT MQ. V novém souboru s názvem client.yamlzadejte nasazení klienta:

apiVersion: v1
kind: Pod
metadata:
  name: mqtt-client
  namespace: azure-iot-operations
spec:
  serviceAccountName: mqtt-client
  containers:
  - image: alpine
    name: mqtt-client
    command: ["sh", "-c"]
    args: ["apk add mosquitto-clients mqttui && sleep infinity"]
    volumeMounts:
    - name: mq-sat
      mountPath: /var/run/secrets/tokens
    - name: trust-bundle
      mountPath: /var/run/certs
  volumes:
  - name: mq-sat
    projected:
      sources:
      - serviceAccountToken:
          path: mq-sat
          audience: aio-mq
          expirationSeconds: 86400
  - name: trust-bundle
    configMap:
      name: aio-ca-trust-bundle-test-only

Použijte soubor nasazení s kubectl.

kubectl apply -f client.yaml
pod/mqtt-client created

Zahájit předplatitele

Slouží kubectl exec ke spuštění prostředí v podu klienta mosquitto.

kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh

Uvnitř prostředí spusťte předplatitele zprostředkovatele IoT MQ v tutorial/# prostoru témat pomocí mqttui.

mqttui log "tutorial/#" \
-b mqtts://aio-mq-dmqtt-frontend:8883 \
-u '$sat' \
--password $(cat /var/run/secrets/tokens/mq-sat) \
--insecure

Nechte příkaz spuštěný a otevřete nové okno terminálu.

Publikování zpráv MQTT do cloudu prostřednictvím mostu

V novém okně terminálu spusťte v podu klienta mosquitto další prostředí.

kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh

Uvnitř prostředí použijte mosquitto k publikování pěti zpráv do tutorial/local tématu.

mosquitto_pub -h aio-mq-dmqtt-frontend -p 8883 \
-m "This message goes all the way to the cloud and back!" \
-t "tutorial/local" -u '$sat' -P $(cat /var/run/secrets/tokens/mq-sat) \
--cafile /var/run/certs/ca.crt \
--repeat 5 --repeat-delay 1 -d

Zobrazení zpráv odběratele

V prostředí pro předplatitele se zobrazí zprávy, které jste publikovali.

23:17:50.802 QoS:AtMostOnce  tutorial/local     Payload( 52): This message goes all the way to the cloud and back!
23:17:51.086 QoS:AtMostOnce  tutorial/cloud     Payload( 52): This message goes all the way to the cloud and back!
23:17:51.803 QoS:AtMostOnce  tutorial/local     Payload( 52): This message goes all the way to the cloud and back!
23:17:51.888 QoS:AtMostOnce  tutorial/cloud     Payload( 52): This message goes all the way to the cloud and back!
23:17:52.804 QoS:AtMostOnce  tutorial/local     Payload( 52): This message goes all the way to the cloud and back!
23:17:52.888 QoS:AtMostOnce  tutorial/cloud     Payload( 52): This message goes all the way to the cloud and back!
23:17:53.805 QoS:AtMostOnce  tutorial/local     Payload( 52): This message goes all the way to the cloud and back!
23:17:53.895 QoS:AtMostOnce  tutorial/cloud     Payload( 52): This message goes all the way to the cloud and back!
23:17:54.807 QoS:AtMostOnce  tutorial/local     Payload( 52): This message goes all the way to the cloud and back!
23:17:54.881 QoS:AtMostOnce  tutorial/cloud     Payload( 52): This message goes all the way to the cloud and back!

Tady vidíte, že se zprávy publikují do místního zprostředkovatele IoT MQ do tutorial/local tématu, přemístit na zprostředkovatele Event Grid MQTT a pak se znovu přemístit k místnímu zprostředkovateli IoT MQ v tutorial/cloud tématu. Zprávy se pak doručí odběrateli. V tomto příkladu je doba odezvy přibližně 80 ms.

Kontrola metrik Event Gridu a ověření doručení zpráv

Můžete také zkontrolovat metriky Event Gridu a ověřit, že se zprávy doručují do zprostředkovatele Event Grid MQTT. Na webu Azure Portal přejděte do oboru názvů Event Gridu, který jste vytvořili. V části Metriky>MQTT: Úspěšné publikované zprávy Při publikování zpráv do místního zprostředkovatele IoT MQ by se měl zobrazit počet publikovaných a doručovaných zpráv.

Screenshot of the metrics view in Azure portal to show successful MQTT messages.

Další kroky

V tomto kurzu jste zjistili, jak nakonfigurovat IoT MQ pro obousměrný most MQTT pomocí zprostředkovatele Azure Event Grid MQTT. Při dalších krocích prozkoumejte následující scénáře:

  • Pokud chcete použít klienta MQTT k publikování zpráv přímo do zprostředkovatele Event Grid MQTT, přečtěte si téma Publikování zpráv MQTT do zprostředkovatele Event Grid MQTT. Dejte klientovi vazbu oprávnění vydavatele k prostoru tématu, který jste vytvořili, a můžete publikovat zprávy do libovolného tématu pod položkou telemetry, like telemetry/temperature nebo telemetry/humidity. Všechny tyto zprávy jsou přemíscené na tutorial/cloud téma místního zprostředkovatele IoT MQ.
  • Pokud chcete nastavit pravidla směrování pro zprostředkovatele Event Grid MQTT, přečtěte si téma Konfigurace pravidel směrování pro zprostředkovatele Event Grid MQTT. Pravidla směrování můžete použít ke směrování zpráv do různých témat na základě názvu tématu nebo k filtrování zpráv na základě obsahu zprávy.