Подключение azure IoT MQ Preview MQTT bridge cloud connector to other MQTT brokers
Внимание
Предварительная версия операций Интернета вещей Azure, включенная Azure Arc в настоящее время находится в предварительной версии. Не следует использовать это программное обеспечение предварительной версии в рабочих средах.
Юридические условия, применимые к функциям Azure, которые находятся в состоянии бета-версии, предварительной версии или иным образом еще не выпущены в общедоступной версии, см. на странице Дополнительные условия использования предварительных версий в Microsoft Azure.
Чтобы подключиться к Сетка событий Azure или другим брокерам MQTT, можно использовать мост MQTT предварительной версии Azure IoT MQTT. Мост MQTT — это процесс подключения двух брокеров MQTT вместе, чтобы они могли обмениваться сообщениями.
- При перемечении двух брокеров сообщения, опубликованные на одном брокере, автоматически перенаправляются в другой и наоборот.
- Мост MQTT помогает создать сеть брокеров MQTT, взаимодействующих друг с другом, и расширить инфраструктуру MQTT, добавив дополнительные брокеры по мере необходимости.
- Мост MQTT полезен для нескольких физических расположений, совместного использования сообщений MQTT и разделов между пограничными и облачными службами или при необходимости интеграции MQTT с другими системами обмена сообщениями.
Чтобы подключиться к другому брокеру, MQ Azure IoT должен знать URL-адрес конечной точки удаленного брокера, какую версию MQTT, как пройти проверку подлинности и какие разделы необходимо сопоставить. Для максимальной компостности и гибкости в моде Kubernetes эти значения настраиваются как настраиваемые ресурсы Kubernetes (CRD) под названием MqttBridge Подключение or и MqttBridgeTopicMap. В этом руководстве описывается создание соединителя моста MQTT с помощью этих ресурсов.
Создайте файл YAML, определяющий ресурс MqttBridge Подключение or. Вы можете использовать пример YAML, но обязательно измените
namespace
его, чтобы он соответствовал развернутой службе Интернета вещей Azure, аremoteBrokerConnection.endpoint
также в соответствии с URL-адресом конечной точки удаленного брокера.Создайте ФАЙЛ YAML, определяющий ресурс MqttBridgeTopicMap . Вы можете использовать пример YAML, но обязательно измените
namespace
значение, соответствующее развернутному в Azure IoT MQ, иmqttBridgeConnectorRef
имя ресурса MqttBridge Подключение or, созданного на предыдущем шаге.Разверните соединитель моста MQTT и карту раздела с
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
После развертывания используйте kubectl get pods
для проверки начала потока сообщений в конечную точку и из нее.
Настройка MqttBridge Подключение or
Ресурс MqttBridge Подключение or определяет соединитель моста MQTT, который может взаимодействовать с удаленным брокером. В нее входят следующие компоненты:
- Один или несколько экземпляров соединителя моста MQTT. Каждый экземпляр — это контейнер, на котором выполняется соединитель моста MQTT.
- Подключение удаленного брокера.
- Необязательное подключение локального брокера.
В следующем примере показан пример конфигурации для подключения к брокеру MQTT Сетка событий Azure. Он использует управляемое удостоверение, назначаемое системой, для проверки подлинности и шифрования TLS.
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: {}
В следующей таблице описаны поля в ресурсе MqttBridge Подключение or:
Поле | Обязательное поле | Описание |
---|---|---|
Изображение | Да | Изображение соединителя Kafka. Можно указать pullPolicy и repository tag изображение. В предыдущем примере показаны правильные значения. |
protocol | Да | Версия протокола MQTT. Может иметь значение v5 или v3 . См. сведения о поддержке MQTT версии 3.1.1. |
bridgeInstances | No | Количество экземпляров соединителя моста. По умолчанию 1. См . число экземпляров. |
clientIdPrefix | No | Префикс динамического созданного идентификатора клиента. Значение по умолчанию не является префиксом. См . раздел конфигурации идентификатора клиента. |
LogLevel | No | Уровень ведения журнала. Может иметь значение debug или info . По умолчанию — info . |
remoteBroker Подключение ion | Да | Подключение сведения о удаленном брокере для моста. См. сведения о подключении удаленного брокера. |
localBroker Подключение ion | No | Подключение подробности локального брокера для моста. По умолчанию отображается значение. См. сведения о подключении локального брокера. |
Поддержка MQTT версии 3.1.1
Соединитель моста можно настроить для использования MQTT версии 3.1.1 с подключением локального брокера для Azure IoT MQ и подключения к удаленному брокеру. Однако это нарушает общие подписки, если удаленный брокер не поддерживает его. Если вы планируете использовать общие подписки, оставьте его по умолчанию версии 5.
Количество экземпляров
Для обеспечения высокой доступности и масштабирования настройте соединитель моста MQTT для использования нескольких экземпляров. Поток сообщений и маршруты автоматически балансируются между различными экземплярами.
spec:
bridgeInstances: 2
Конфигурация идентификатора клиента
Azure IoT MQ создает идентификатор клиента для каждого клиента MqttBridge Подключение or, используя указанный префикс в формате{clientIdPrefix}-{routeName}
. Этот идентификатор клиента важен для MQ Интернета вещей Azure для устранения потери сообщений и предотвращения конфликтов или конфликтов с существующими идентификаторами клиента, так как спецификация MQTT разрешает только одно подключение для каждого идентификатора клиента.
Например, если clientIdPrefix: "client-"
в карте раздела есть два routes
идентификатора клиента: client-route1 и client-route2.
Подключение удаленного брокера
Поле remoteBrokerConnection
определяет сведения о подключении для моста к удаленному брокеру. Он включает следующие поля.
Поле | Обязательное поле | Описание |
---|---|---|
конечная точка | Да | URL-адрес конечной точки удаленного брокера с портом. Например, example.westeurope-1.ts.eventgrid.azure.net:8883 . |
tls | Да | Указывает, шифруется ли подключение с помощью TLS и доверенного сертификата ЦС. См. сведения о поддержке TLS |
проверка подлинности | Да | Сведения о проверке подлинности для MQ Интернета вещей Azure для использования с брокером. Должно быть одним из следующих значений: назначаемое системой управляемое удостоверение или X.509. См. раздел Аутентификация. |
protocol | No | Строковое значение, определяющее использование MQTT или MQTT через WebSockets. Может иметь значение mqtt или webSocket . По умолчанию — mqtt . |
Проверка подлинности
Поле проверки подлинности определяет метод проверки подлинности для MQ Интернета вещей Azure для использования с удаленным брокером. Он включает следующие поля.
Поле | Обязательное поле | Описание |
---|---|---|
systemAssignedManagedIdentity | No | Проверка подлинности с помощью управляемого удостоверения, назначаемого системой. См . раздел "Управляемое удостоверение". |
x509 | No | Сведения о проверке подлинности с помощью сертификатов X.509. См. раздел X.509. |
Управляемое удостоверение
Поле systemAssignedManagedIdentity включает следующие поля:
Поле | Обязательное поле | Описание |
---|---|---|
аудитория | Да | Аудитория маркера. Требуется, если используется управляемое удостоверение. Для сетки https://eventgrid.azure.net событий это . |
Если MQ Azure IoT развертывается в качестве расширения Azure Arc, он получает управляемое удостоверение назначения системы по умолчанию. Для взаимодействия с ресурсами Azure, включая брокер MQ Сетки событий MQTT, следует использовать управляемое удостоверение для Azure IoT, так как это позволяет избежать управления учетными данными и сохранять высокий уровень доступности.
Чтобы использовать управляемое удостоверение для проверки подлинности с ресурсами Azure, сначала назначьте соответствующую роль Azure RBAC, например Издатель EventGrid TopicSpaces, управляемому удостоверению Azure IoT MQ, предоставленному Arc.
Затем укажите и MQT ТБ ridge Подключение or с управляемым удостоверением в качестве метода проверки подлинности:
spec:
remoteBrokerConnection:
authentication:
systemAssignedManagedIdentity:
audience: https://eventgrid.azure.net
При использовании управляемого удостоверения идентификатор клиента не настраивается и приравнивается к идентификатору ресурса Azure IoT MQ Azure Arc расширения Azure Resource Manager в Azure.
Управляемое удостоверение, назначаемое системой, предоставляется Azure Arc. Сертификат, связанный с управляемым удостоверением, должен обновляться по крайней мере каждые 90 дней, чтобы избежать процесса восстановления вручную. Дополнительные сведения см. в статье Разделы справки адреса с истекшим сроком действия ресурсов Kubernetes с поддержкой Azure Arc?
X.509
Поле x509
содержит следующие поля:
Поле | Обязательное поле | Описание |
---|---|---|
secretName; | Да | Секрет Kubernetes, содержащий сертификат клиента и закрытый ключ. Azure Key Vault можно использовать для управления секретами для MQ Интернета вещей Azure вместо секретов Kubernetes. Дополнительные сведения см. в статье "Управление секретами" с помощью Azure Key Vault или секретов Kubernetes. |
Многие брокеры MQTT, такие как Сетка событий, поддерживают проверку подлинности X.509. Мост MQ MQ в Azure IoT может представлять сертификат X.509 клиента и согласовывать связь TLS. Используйте секрет Kubernetes для хранения сертификата клиента X.509, закрытого ключа и промежуточного ЦС.
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
И сослаться на него с помощью secretName
:
spec:
remoteBrokerConnection:
authentication:
x509:
secretName: bridge-client-cert
Подключение локального брокера
Поле localBrokerConnection
определяет сведения о подключении для моста к локальному брокеру.
Поле | Обязательное поле | Описание |
---|---|---|
конечная точка | Да | URL-адрес конечной точки удаленного брокера с портом. |
tls | Да | Указывает, шифруется ли подключение с помощью TLS и доверенного сертификата ЦС. См. сведения о поддержке TLS |
проверка подлинности | Да | Сведения о проверке подлинности для MQ Интернета вещей Azure для использования с брокером. Единственным поддерживаемым методом является маркер учетной записи службы Kubernetes (SAT). Чтобы использовать SAT, укажите kubernetes: {} . |
По умолчанию MQ Интернета вещей развертывается в пространстве azure-iot-operations
имен с включенным протоколом TLS и проверкой подлинности SAT.
Затем необходимо настроить параметр подключения локального брокера MqttBridge Подключение or. YamL развертывания для MqttBridge Подключение or должен иметь localBrokerConnection
одинаковый уровеньremoteBrokerConnection
. Например, чтобы использовать TLS с проверкой подлинности SAT, чтобы соответствовать развертыванию IoT MQ по умолчанию:
spec:
localBrokerConnection:
endpoint: aio-mq-dmqtt-frontend:8883
tls:
tlsEnabled: true
trustedCaCertificateConfigMap: aio-ca-trust-bundle-test-only
authentication:
kubernetes: {}
trustedCaCertifcateName
Здесь используется ConfigMap для корневого ЦС Azure IoT MQ, например ConfigMap для корневого ЦС удаленного брокера. Корневой ЦС по умолчанию хранится в ConfigMap с именем aio-ca-trust-bundle-test-only
.
Дополнительные сведения о получении корневого ЦС см. в статье Настройка TLS с автоматическим управлением сертификатами для защиты обмена данными MQTT.
Поддержка TLS
Поле tls
определяет конфигурацию TLS для удаленного или локального подключения брокера. Он включает следующие поля.
Поле | Обязательное поле | Описание |
---|---|---|
tlsEnabled | Да | Включена ли протокол TLS или нет. |
TrustedCaCertificateConfigMap | No | Сертификат ЦС для доверия при подключении к брокеру. Требуется, если протокол TLS включен. |
Поддержка шифрования TLS доступна как для удаленных, так и для локальных подключений брокера.
- Для удаленного подключения брокера: если протокол TLS включен, сертификат доверенного ЦС должен быть указан в качестве ссылки на Kubernetes ConfigMap . В противном случае подтверждение TLS, скорее всего, завершится ошибкой, если удаленная конечная точка не является доверенным сертификатом доверенного ЦС уже в хранилище сертификатов ОС. Например, служба "Сетка событий" использует широко доверенный корень ЦС, поэтому указание не требуется.
- Для локального подключения брокера (Azure IoT MQ): если протокол TLS включен для прослушивателя брокера Azure IoT MQ, сертификат ЦС, выданный сертификатом сервера прослушивателя, должен быть указан в качестве ссылки на ConfigMap Kubernetes.
При указании доверенного ЦС необходимо создать ConfigMap , содержащую общедоступное зелье ЦС, и указать имя конфигурации в свойстве trustedCaCertificateConfigMap
. Например:
kubectl create configmap client-ca-configmap --from-file ~/.step/certs/root_ca.crt
Настройка MqttBridgeTopicMap
Ресурс MqttBridgeTopicMap определяет сопоставление тем между локальными и удаленными брокерами. Он должен использоваться вместе с ресурсом MqttBridge Подключение or. В нее входят следующие компоненты:
- Имя ресурса MqttBridge Подключение or для ссылки.
- Список маршрутов для мостов.
- Необязательная конфигурация общей подписки.
MqttBridge Подключение or может использовать несколько MqttBridgeTopic Карты связанные с ним. При развертывании ресурса MqttBridge Подключение or оператор Azure IoT MQ начинает сканирование пространства имен для любого MqttBridgeTopic Карты связанного с ним и автоматического управления потоком сообщений между экземплярами MqttBridge Подключение or. Затем после развертывания MqttBridgeTopicMap связан с MqttBridgeBridge Подключение or. Каждый MqttBridgeTopicMap может быть связан только с одним MqttBridge Подключение or.
В следующем примере показана конфигурация MqttBridgeTopicMap для подключения сообщений из удаленного раздела remote-topic
к локальному разделу 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
В следующей таблице описаны поля в ресурсе MqttBridgeTopicMap:
Поля | Обязательное поле | Описание |
---|---|---|
mqttBridge Подключение orRef | Да | MqttBridgeConnector Имя ресурса для ссылки. |
routes | Да | Список маршрутов для мостов. Дополнительные сведения см. в разделе "Маршруты". |
Маршруты
MqttBridgeTopicMap может иметь несколько маршрутов. Поле routes
определяет список маршрутов. Он включает следующие поля.
Поля | Обязательное поле | Описание |
---|---|---|
direction | Да | Направление потока сообщений. Это может быть remote-to-local или local-to-remote . Дополнительные сведения см. в разделе "Направление". |
name | Да | Имя маршрута. |
качество обслуживания | No | Качество обслуживания MQTT (QoS). По умолчанию равен 1. |
source | Да | Исходный раздел MQTT. Может иметь дикие карта нравится # и + . См. раздел Wild карта в исходном разделе. |
целевой объект | No | Целевой раздел MQTT. Не может иметь дикие карта. Если он не указан, он будет совпадать с источником. См . справочник по исходному разделу в целевом объекте. |
sharedSubscription | No | Конфигурация общей подписки. Активирует настроенное число клиентов для дополнительного масштабирования. Дополнительные сведения см. в разделе "Общие подписки". |
Направление
Например, если направление является локальным и удаленным, MQ Azure IoT публикует все сообщения в указанном локальном разделе в удаленном разделе:
routes:
- direction: local-to-remote
name: "send-alerts"
source: "alerts"
target: "factory/alerts"
Если направление отменено, MQ Интернета вещей Azure получает сообщения от удаленного брокера. Здесь целевой объект опущен, а все сообщения из commands/factory
раздела удаленного брокера публикуются в одном и том же разделе локально.
routes:
- direction: remote-to-local
name: "receive-commands"
source: "commands/factory"
Wild карта s в исходном разделе
Чтобы преодолеть нестатические темы, используйте дикие карта ы, чтобы определить соответствие шаблонов тем и правило перевода имен темы. Например, чтобы мостить все сообщения во всех подтопикахtelemetry
, используйте многоуровневые #
дикие элементы карта:
routes:
- direction: local-to-remote
name: "wildcard-source"
source: "telemetry/#"
target: "factory/telemetry"
В примере, если сообщение опубликовано в любом разделе telemetry
, например telemetry/furnace/temperature
, Azure IoT MQ публикует его в удаленном мостовом брокере под статическим factory/telemetry
разделом.
Для одноуровневых разделов карта используйте +
вместо этого, напримерtelemetry/+/temperature
.
Соединитель моста MQTT должен знать точный раздел в целевом брокере удаленного или Azure IoT MQ без неоднозначности. Дикие карта доступны только в рамках source
раздела.
Справочный исходный раздел в целевом объекте
Чтобы ссылаться на весь исходный раздел, опустите конфигурацию целевого раздела в маршруте полностью. Поддерживаются подстановочные знаки.
Например, все сообщения, опубликованные в разделе my-topic/#
, например my-topic/foo
или my-topic/bar
, перемыкаются к удаленному брокеру в том же разделе:
routes:
- direction: local-to-remote
name: "target-same-as-source"
source: "my-topic/#"
# No target
Другие методы ссылки на исходный раздел не поддерживаются.
Общие подписки
Поле sharedSubscription
определяет конфигурацию общей подписки для маршрута. Он включает следующие поля.
Поля | Обязательное поле | Описание |
---|---|---|
groupMinimumShareNumber | Да | Количество клиентов, используемых для общей подписки. |
groupName | Да | Имя группы общих подписок. |
Общие подписки помогают Azure IoT MQ создавать больше клиентов для моста MQTT. Для каждого маршрута можно настроить другую общую подписку. Azure IoT MQ подписывается на сообщения из исходного раздела и отправляет их одному клиенту одновременно с помощью циклического перебора. Затем клиент публикует сообщения в мостовом брокере.
Например, если вы настроили маршрут с общей подпиской и задайте groupMinimumShareNumber
значение 3:
routes:
- direction: local-to-remote
qos: 1
source: "shared-sub-topic"
target: "remote/topic"
sharedSubscription:
groupMinimumShareNumber: 3
groupName: "sub-group"
Мост MQTT в Azure IoT MQ создает три клиента подписчика независимо от того, сколько экземпляров. Из каждого сообщения $share/sub-group/shared-sub-topic
получает только один клиент. Затем тот же клиент публикует сообщение в мостовом удаленном брокере в разделе remote/topic
. Следующее сообщение переходит к следующему клиенту.
Это помогает сбалансировать трафик сообщений для моста между несколькими клиентами с различными идентификаторами. Это полезно, если ваш мостовой брокер ограничивает количество сообщений, которые каждый клиент может отправлять.
поддержка брокера MQTT Сетка событий Azure
Чтобы свести к минимуму управление учетными данными, с помощью управляемого удостоверения, назначаемого системой, и Azure RBAC рекомендуется мостить MQQ Azure IoT с помощью функции брокера MQTT Сетка событий Azure.
Полное руководство см. в руководстве по настройке моста MQTT между предварительной версией Azure IoT MQ и Сетка событий Azure.
Подключение брокер MQTT сетки событий с управляемым удостоверением
Сначала найдите az k8s-extension show
идентификатор субъекта для расширения Azure IoT MQ Arc. Запишите выходное значение для identity.principalId
, которое должно выглядеть следующим 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
Затем используйте Azure CLI для назначения ролей управляемому удостоверению расширения Azure IoT MQ Arc. Замените <MQ_ID>
идентификатор субъекта, который вы нашли на предыдущем шаге. Например, чтобы назначить роль издателя EventGrid TopicSpaces:
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>
Совет
Чтобы оптимизировать принцип наименьшей привилегии, можно назначить роль пространством тем вместо всего пространства имен Сетки событий. Дополнительные сведения см. в разделе "Сетка событий" RBAC и пространства разделов.
Наконец, создайте MQT ТБ ridge Подключение or и выберите управляемое удостоверение в качестве метода проверки подлинности. Создайте MqttBridgeTopic Карты и разверните мост MQTT с kubectl
помощью.
Максимальное количество сеансов клиента на имя проверки подлинности
Если bridgeInstances
задано значение выше1
, настройте конфигурацию>брокера MQTT Сетки событий Максимальное количество клиентских сеансов на имя проверки подлинности, чтобы соответствовать количеству экземпляров. Эта конфигурация предотвращает превышение таких проблем, как превышена квота 151.
Ограничение для каждого подключения
Если использование управляемого удостоверения невозможно, при разработке настройки следует учитывать ограничения на подключение для брокера MQTT Сетки событий. В момент публикации ограничение составляет 100 сообщений в секунду для подключения. Чтобы увеличить пропускную способность моста MQTT, используйте общие подписки для увеличения числа клиентов, обслуживающих каждый маршрут.
Мост с другого брокера в Azure IoT MQ Preview
Azure IoT MQ — это совместимый брокер MQTT, а другие брокеры могут мостить к нему с помощью соответствующих учетных данных проверки подлинности и авторизации. Например, см. документацию по мосту MQTT для HiveMQ, VerneMQ, EMQX и Mosquitto.