Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
MQTTnet è una libreria .NET open source ad alte prestazioni per la comunicazione basata su MQTT. Questo articolo illustra come usare un token dell'account del servizio Kubernetes e MQTnet per connettersi al broker MQTT. Usare i token dell'account del servizio per connettere le applicazioni nel cluster.
Codice di esempio
Il codice di esempio esegue le operazioni seguenti:
Crea un client MQTT usando la classe
MqttFactory
:var mqttFactory = new MqttFactory(); var mqttClient = mqttFactory.CreateMqttClient();
La specifica del pod di Kubernetes monta l'account di servizio nel file system del contenitore e il contenuto del file viene letto. Il token montato viene usato come password con il noto nome utente
K8S-SAT
:static string sat_auth_file = "/var/run/secrets/tokens/mqtt-client-token"; ... var satToken = File.ReadAllBytes(sat_auth_file);
Le opzioni client MQTT vengono configurate usando la
MqttClientOptions
classe .MqttClientOptionsBuilder
, come consigliato nella documentazione del client, è il modo migliore per impostare le opzioni:var mqttClientOptions = new MqttClientOptionsBuilder() .WithTcpServer(hostname, tcp_port) .WithProtocolVersion(MqttProtocolVersion.V500) .WithClientId("mqtt-client-dotnet") .WithAuthentication("K8S-SAT", satToken);
Dopo aver configurato le opzioni client MQTT, è possibile stabilire una connessione. Nel codice seguente viene illustrato come connettersi a un server. Se necessario, è possibile sostituire con
CancellationToken.None
un cancellationToken valido.var response = await mqttClient.ConnectAsync(mqttClientOptions.Build(), CancellationToken.None);
Creare messaggi MQTT usando proprietà direttamente o con
MqttApplicationMessageBuilder
. Questa classe fornisce sovraccarichi per la gestione di formati di payload diversi. L'API builder usa una progettazione fluente. Il codice seguente illustra come comporre un messaggio dell'applicazione e pubblicarlo in un argomento denominato sampletopic:var applicationMessage = new MqttApplicationMessageBuilder() .WithTopic("sampletopic") .WithPayload("samplepayload" + counter++) .Build(); await mqttClient.PublishAsync(applicationMessage, CancellationToken.None);
Specifica del pod
Il campo serviceAccountName
nella configurazione del pod deve corrispondere all'account del servizio associato al token usato. Si noti anche che serviceAccountToken.expirationSeconds
è impostato su 86400 secondi e quando scade, è necessario ricaricare il token dal disco. Questa logica non viene implementata in questo esempio.
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"
Eseguire l'esempio seguendo le istruzioni nel file README.