Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
MQTTnet — это библиотека с открытым кодом, высокопроизводительная библиотека .NET для обмена данными на основе MQTT. В этой статье объясняется, как использовать маркер учетной записи службы Kubernetes и MQTTnet для подключения к брокеру MQTT. Используйте токены учетной записи службы для подключения приложений в кластер.
Пример кода
В примере кода выполняется следующее:
Создает клиент MQTT с помощью
MqttFactory
класса:var mqttFactory = new MqttFactory(); var mqttClient = mqttFactory.CreateMqttClient();
Спецификация pod Kubernetes монтирует учетную запись сервиса на файловую систему контейнера, и содержимое файла прочитывается. Монтированный токен используется в качестве пароля с именем пользователя
K8S-SAT
:static string sat_auth_file = "/var/run/secrets/tokens/mqtt-client-token"; ... var satToken = File.ReadAllBytes(sat_auth_file);
Параметры клиента MQTT настраиваются с помощью
MqttClientOptions
класса. Как рекомендовано в документации клиента,MqttClientOptionsBuilder
это предпочитаемый способ задать параметры:var mqttClientOptions = new MqttClientOptionsBuilder() .WithTcpServer(hostname, tcp_port) .WithProtocolVersion(MqttProtocolVersion.V500) .WithClientId("mqtt-client-dotnet") .WithAuthentication("K8S-SAT", satToken);
После настройки параметров клиента MQTT можно установить подключение. В следующем коде показано, как подключиться к серверу. При необходимости можно заменить
CancellationToken.None
допустимым элементом CancellationToken.var response = await mqttClient.ConnectAsync(mqttClientOptions.Build(), CancellationToken.None);
Создавайте сообщения MQTT с помощью свойств напрямую или с
MqttApplicationMessageBuilder
. Этот класс предоставляет перегрузки для работы с различными форматами носителей данных. API построителя использует простой дизайн. В следующем коде показано, как создать сообщение приложения и опубликовать его в разделе, называемом sampletopic:var applicationMessage = new MqttApplicationMessageBuilder() .WithTopic("sampletopic") .WithPayload("samplepayload" + counter++) .Build(); await mqttClient.PublishAsync(applicationMessage, CancellationToken.None);
Спецификация pod
Поле serviceAccountName
в конфигурации pod должно соответствовать учетной записи службы, связанной с используемым маркером. Кроме того, обратите внимание, что serviceAccountToken.expirationSeconds
установлено значение 86400 секунд, и когда этот срок истекает, необходимо перезагрузить токен с диска. Эта логика не реализована в этом примере.
apiVersion: v1
kind: ServiceAccount
metadata:
name: mqtt-client
namespace: azure-iot-operations
---
apiVersion: v1
kind: Pod
metadata:
name: mqtt-client-dotnet
namespace: azure-iot-operations
spec:
serviceAccountName: mqtt-client
volumes:
# The SAT token authenticates the application with the MQTT broker
- name: mqtt-client-token
projected:
sources:
- serviceAccountToken:
path: mqtt-client-token
audience: aio-internal
expirationSeconds: 86400
# Certificate chain for the application to validate the MQTT broker
- name: aio-ca-trust-bundle
configMap:
name: azure-iot-operations-aio-ca-trust-bundle
containers:
- name: mqtt-client-dotnet
image: ghcr.io/azure-samples/explore-iot-operations/mqtt-client-dotnet:latest
volumeMounts:
- name: mqtt-client-token
mountPath: /var/run/secrets/tokens/
- name: aio-ca-trust-bundle
mountPath: /var/run/certs/aio-internal-ca-cert/
env:
- name: hostname
value: "aio-broker"
- name: tcpPort
value: "18883"
- name: useTls
value: "true"
- name: caFile
value: "/var/run/certs/aio-internal-ca-cert/ca.crt"
- name: satAuthFile
value: "/var/run/secrets/tokens/mqtt-client-token"
Запустите пример, руководствуясь инструкциями из его README.