Руководство по настройке моста MQTT между предварительной версией Azure IoT MQ и Сетка событий Azure

Внимание

Предварительная версия операций Интернета вещей Azure, включенная Azure Arc в настоящее время находится в предварительной версии. Не следует использовать это программное обеспечение предварительной версии в рабочих средах.

Юридические условия, применимые к функциям Azure, которые находятся в состоянии бета-версии, предварительной версии или иным образом еще не выпущены в общедоступной версии, см. на странице Дополнительные условия использования предварительных версий в Microsoft Azure.

В этом руководстве вы узнаете, как настроить MQ Интернета вещей для двунаправленного моста MQTT с помощью Сетка событий Azure брокера MQTT PaaS. Эту функцию можно использовать для обработки данных Интернета вещей на границе и в облаке. Например, можно использовать IoT MQ для обработки данных телеметрии на границе, а затем мостить данные к Сетка событий Azure для дальнейшей обработки в облаке.

Необходимые компоненты

Настройка переменных среды

Войдите с помощью Azure CLI:

az login

Задайте переменные среды для остальной части программы установки. Замените значения в <> допустимых значениях или именах. Новое пространство имен Сетка событий Azure и пространство тем создаются в подписке Azure на основе указанных имен:

# 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>

Создание пространства имен Сетки событий с включенным брокером MQTT

Создайте пространство имен Сетки событий с помощью Azure CLI. Расположение должно совпадать с расположением, используемым для развертывания операций Интернета вещей Azure.

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

Задав topic-spaces-configurationкоманду, эта команда создает пространство имен с:

  • Включен брокер MQTT
  • Максимальное количество клиентских сеансов на имя проверки подлинности как 3.

Параметр максимального числа клиентских сеансов позволяет MQ Интернета вещей создавать несколько экземпляров и по-прежнему подключаться. Дополнительные сведения см . в разделе поддержки нескольких сеансов.

Создание пространства разделов

В пространстве имен Сетки событий создайте пространство тем с именем tutorial шаблона раздела telemetry/#.

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

Используя дикую # карта в шаблоне раздела, вы можете опубликовать в любой теме в telemetry пространстве тем. Например, telemetry/temperature или telemetry/humidity.

Предоставление предварительной версии Azure IoT MQ доступ к разделу "Сетка событий"

С помощью az k8s-extension showнайдите идентификатор субъекта для расширения Azure IoT MQ Arc. Команда сохраняет идентификатор субъекта в переменной для последующего использования.

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

Запишите выходное значение для identity.principalId, которое является значением GUID со следующим форматом:

d84481ae-9181-xxxx-xxxx-xxxxxxxxxxxx

Затем используйте Azure CLI, чтобы назначить роли издателя и подписчика MQ IoT для созданного пространства тем.

Назначьте роль издателя:

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

Назначьте роль подписчика:

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

Совет

Область соответствует id пространству тем, созданному az eventgrid namespace topic-space create на предыдущем шаге, и вы можете найти его в выходных данных команды.

Имя узла брокера MQTT сетки событий

Используйте Azure CLI, чтобы получить имя узла брокера MQTT сетки событий.

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

Запишите выходное значение для topicSpacesConfiguration.hostname этого значения имени узла, которое выглядит следующим образом:

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

Создание соединителя моста MQTT и ресурсов карты раздела

В новом файле с именем bridge.yamlукажите соединитель моста MQTT и конфигурацию карты раздела. Замените пример значения заполнителя в remoteBroker Подключение ionendpoint именем узла Сетки событий MQTT из предыдущего шага. Включите номер порта 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

Соединитель моста MQTT настраивает следующим способом:

  • Использование брокера MQTT сетки событий в качестве удаленного брокера
  • Использование локального брокера MQ IoT в качестве локального брокера
  • Использование TLS для удаленных и локальных брокеров
  • Использование управляемого удостоверения, назначаемого системой, для проверки подлинности в удаленном брокере
  • Использование учетной записи службы Kubernetes для проверки подлинности в локальном брокере
  • Сопоставление раздела с темой удаленного брокера с telemetry/iot-mq помощью tutorial/local карты разделов
  • telemetry/# Сопоставление раздела с удаленным брокером с tutorial/cloud разделом на локальном брокере

При публикации tutorial/local в разделе на локальном брокере MQ Интернета вещей сообщение переместится на telemetry/iot-mq раздел удаленного брокера MQTT сетки событий. Затем сообщение перемыкается обратно в tutorial/cloud раздел на локальном брокере MQ Интернета вещей. Аналогичным образом, когда вы публикуете telemetry/iot-mq статью в удаленном брокере MQTT сетки событий, сообщение переместится на tutorial/cloud раздел на локальный брокер MQ Интернета вещей.

Примените файл развертывания с kubectl.

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

Проверка развертывания моста MQTT

Используйте kubectl, чтобы проверка два экземпляра моста готовы и запущены.

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

Теперь вы можете опубликовать на локальном брокере и подписаться на брокер MQTT Сетки событий и проверить поток сообщений должным образом.

Развертывание клиента MQTT

Чтобы убедиться, что мост MQTT работает, разверните клиент MQTT в том же пространстве имен, что и MQ Интернета вещей. В новом файле с именем client.yamlукажите развертывание клиента:

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

Примените файл развертывания с kubectl.

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

Запуск подписчика

Используется kubectl exec для запуска оболочки в модуле pod клиента Mosquitto.

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

В оболочке запустите подписчик брокера IoT MQ в tutorial/# пространстве тем с mqttui.

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

Оставьте команду запущенной и откройте новое окно терминала.

Публикация сообщений MQTT в облаке через мост

В новом окне терминала запустите другую оболочку в модуле клиента Mosquitto.

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

В оболочке используйте mosquitto для публикации пяти сообщений в tutorial/local раздел.

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

Просмотр сообщений в подписчике

В оболочке подписчика отображаются опубликованные сообщения.

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!

Здесь вы увидите, что сообщения публикуются в локальном брокере MQ Интернета вещей, tutorial/local мостом к брокеру MQTT Сетки событий, а затем снова перемыкаются на локальный брокер MQ MQ Интернета вещей снова в tutorial/cloud этой теме. Затем сообщения доставляются подписчику. В этом примере время кругового пути составляет около 80 мс.

Проверка метрик сетки событий для проверки доставки сообщений

Вы также можете проверка метрики сетки событий для проверки доставки сообщений в брокер MQTT сетки событий. В портал Azure перейдите к созданному пространству имен Сетки событий. В разделе Метрики MQTT: успешные опубликованные>сообщения. Вы должны увидеть количество опубликованных и доставленных сообщений при публикации сообщений в локальном брокере MQ Интернета вещей.

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

Совет

Вы можете проверка конфигурации карт разделов, QoS и маршрутов сообщений с расширением az iot ops check --detail-level 2CLI.

Следующие шаги

В этом руководстве вы узнали, как настроить MQ Интернета вещей для двунаправленного моста MQTT с помощью брокера MQTT Сетка событий Azure MQTT. В следующих случаях изучите следующие сценарии:

  • Чтобы использовать клиент MQTT для публикации сообщений непосредственно в брокере MQTT Сетки событий, см. статью "Публикация сообщений MQTT" в брокере MQTT Сетки событий. Предоставьте клиенту привязку разрешений издателя к созданному пространству тем, и вы можете публиковать сообщения в любой telemetryтеме, например telemetry/temperature или telemetry/humidity. Все эти сообщения связаны с темой tutorial/cloud на локальном брокере MQ Интернета вещей.
  • Сведения о настройке правил маршрутизации для брокера MQTT сетки событий см. в разделе "Настройка правил маршрутизации для брокера MQTT сетки событий". Правила маршрутизации можно использовать для маршрутизации сообщений в разные разделы на основе имени раздела или фильтрации сообщений на основе содержимого сообщения.