Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
MQTTnet est une bibliothèque .NET open source et à hautes performances pour la communication basée sur MQTT. Cet article explique comment utiliser un jeton de compte de service Kubernetes et MQTTnet pour se connecter au répartiteur MQTT. Utilisez des jetons de compte de service pour connecter des applications en cluster.
Exemple de code
L’exemple de code effectue les opérations suivantes :
Crée un client MQTT à l’aide de la classe
MqttFactory
:var mqttFactory = new MqttFactory(); var mqttClient = mqttFactory.CreateMqttClient();
La spécification du pod Kubernetes monte le compte de service sur le système de fichiers de conteneur et le contenu du fichier est lu. Le jeton monté est utilisé comme mot de passe avec le nom d’utilisateur connu
K8S-SAT
:static string sat_auth_file = "/var/run/secrets/tokens/mqtt-client-token"; ... var satToken = File.ReadAllBytes(sat_auth_file);
Les options du client MQTT sont configurées à l’aide de la classe
MqttClientOptions
. LaMqttClientOptionsBuilder
méthode recommandée dans la documentation du client est la meilleure façon de définir les options :var mqttClientOptions = new MqttClientOptionsBuilder() .WithTcpServer(hostname, tcp_port) .WithProtocolVersion(MqttProtocolVersion.V500) .WithClientId("mqtt-client-dotnet") .WithAuthentication("K8S-SAT", satToken);
Après avoir configuré les options du client MQTT, une connexion peut être établie. Le code suivant montre comment se connecter à un serveur. Vous pouvez remplacer
CancellationToken.None
par un CancellationToken valide si nécessaire.var response = await mqttClient.ConnectAsync(mqttClientOptions.Build(), CancellationToken.None);
Créez des messages MQTT à l’aide de propriétés directement ou avec
MqttApplicationMessageBuilder
. Cette classe fournit des surcharges pour gérer différents formats de charges utiles. L’API builder utilise une conception fluide. Le code suivant montre comment composer un message d’application et le publier dans une rubrique appelée sampletopic :var applicationMessage = new MqttApplicationMessageBuilder() .WithTopic("sampletopic") .WithPayload("samplepayload" + counter++) .Build(); await mqttClient.PublishAsync(applicationMessage, CancellationToken.None);
Spécification de pod
Le champ serviceAccountName
de la configuration du pod doit correspondre au compte de service associé au jeton utilisé. Notez également que le jeton serviceAccountToken.expirationSeconds
est défini sur 86400 secondes et, quand il expire, vous devez recharger le jeton à partir du disque. Cette logique n’est pas implémentée dans cet exemple.
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"
Exécutez l’exemple en suivant les instructions de son fichier README.