Поделиться через


Подключение 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 с помощью этих ресурсов.

  1. Создайте файл YAML, определяющий ресурс MqttBridge Подключение or. Вы можете использовать пример YAML, но обязательно измените namespace его, чтобы он соответствовал развернутой службе Интернета вещей Azure, а remoteBrokerConnection.endpoint также в соответствии с URL-адресом конечной точки удаленного брокера.

  2. Создайте ФАЙЛ YAML, определяющий ресурс MqttBridgeTopicMap . Вы можете использовать пример YAML, но обязательно измените namespace значение, соответствующее развернутному в Azure IoT MQ, и mqttBridgeConnectorRef имя ресурса MqttBridge Подключение or, созданного на предыдущем шаге.

  3. Разверните соединитель моста 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и repositorytag изображение. В предыдущем примере показаны правильные значения.
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.