Руководство по настройке моста 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 Интернета вещей.
Совет
Вы можете проверка конфигурации карт разделов, QoS и маршрутов сообщений с расширением az iot ops check --detail-level 2
CLI.
Следующие шаги
В этом руководстве вы узнали, как настроить MQ Интернета вещей для двунаправленного моста MQTT с помощью брокера MQTT Сетка событий Azure MQTT. В следующих случаях изучите следующие сценарии:
- Чтобы использовать клиент MQTT для публикации сообщений непосредственно в брокере MQTT Сетки событий, см. статью "Публикация сообщений MQTT" в брокере MQTT Сетки событий. Предоставьте клиенту привязку разрешений издателя к созданному пространству тем, и вы можете публиковать сообщения в любой
telemetry
теме, напримерtelemetry/temperature
илиtelemetry/humidity
. Все эти сообщения связаны с темойtutorial/cloud
на локальном брокере MQ Интернета вещей. - Сведения о настройке правил маршрутизации для брокера MQTT сетки событий см. в разделе "Настройка правил маршрутизации для брокера MQTT сетки событий". Правила маршрутизации можно использовать для маршрутизации сообщений в разные разделы на основе имени раздела или фильтрации сообщений на основе содержимого сообщения.