Bereitstellen von austauschbaren Dapr-Komponenten
Die Distributed Application Runtime (Dapr) ist eine portierbare, serverlose, ereignisgesteuerte Runtime, die den Erstellungsprozess verteilter Anwendungen vereinfacht. Mit Dapr können Sie zustandsbehaftete oder zustandslose Apps erstellen, ohne sich Gedanken über die Funktionsweise der Bausteine machen zu müssen. Dapr bietet mehrere Bausteine: „Veröffentlichen/Abonnieren“, „Zustandsverwaltung“, „Dienstaufrufe“, „Akteure“ usw.
Azure IoT Betrieb unterstützt zwei dieser Bausteine, die vom MQTT-Broker unterstützt werden:
- Veröffentlichen und Abonnieren
- Zustandsverwaltung
Wenn Sie die austauschbaren Dapr-Komponenten verwenden möchten, definieren Sie für jede API die Komponentenspezifikation, und registrieren Sie diese im Cluster. Die Dapr-Komponenten lauschen an einem Unix-Domänensocket im freigegebenen Volume. Die Dapr-Runtime stellt eine Verbindung mit jedem Socket her und ermittelt alle Dienste aus einer bestimmten Baustein-API, die die Komponente implementiert.
Installieren der Dapr-Runtime
Verwenden Sie den folgenden Helm-Befehl, um die Dapr-Runtime zu installieren:
Hinweis
Wenn Sie die bereitgestellte Schnellstartanleitung für Azure IoT Einsatz ausgeführt haben, haben Sie die Dapr-Runtime bereits installiert, und die folgenden Schritte sind nicht erforderlich.
helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update
helm upgrade --install dapr dapr/dapr --version=1.14 --namespace dapr-system --create-namespace --wait
Registrieren der austauschbaren MQTT-Broker-Komponenten
Um die austauschbaren Komponenten „Veröffentlichen/Abonnieren“ und „Zustandsverwaltung“ zu registrieren, erstellen Sie das YAML-Komponentenmanifest, und wenden Sie es auf Ihren Cluster an.
Verwenden Sie zum Erstellen der YAML-Datei die folgenden Komponentendefinitionen:
Komponente | Beschreibung |
---|---|
metadata:name |
Der Komponentenname ist wichtig, da eine Dapr-Anwendung damit auf die Komponente verweist. |
metadata:annotations:dapr.io/component-container |
Komponentenanmerkungen, die vom Dapr Sidecar Injector verwendet werden und den Imagespeicherort, die Volumeeinbindungen und die Protokollierungskonfiguration definieren |
spec:type |
Der Typ der Komponente, der genau wie dargestellt deklariert werden muss. |
spec:metadata:keyPrefix |
Legt das Schlüsselpräfix fest, das bei der Kommunikation mit dem Statestore Back-End verwendet wird. Weitere Informationen finden Sie in der Dapr-Dokumentation. |
spec:metadata:hostname |
Der Hostname des MQTT-Brokers. Der Standardwert ist aio-broker |
spec:metadata:tcpPort |
Die Portnummer des MQTT-Brokers. Der Standardwert ist 18883 |
spec:metadata:useTls |
Definieren Sie diesen, wenn TLS vom MQTT Vermittler verwendet wird. Der Standardwert ist true |
spec:metadata:caFile |
Der Zertifikatkettenpfad zum Überprüfen des MQTT-Brokers Erforderlich, wenn useTls true ist. Diese Datei muss auf dem Pod mit dem angegebenen Volumenamen bereitgestellt werden. |
spec:metadata:satAuthFile |
Die Dienstkontotoken-Datei (SAT) wird zur Authentifizierung der Dapr-Komponenten beim MQTT-Broker verwendet. Diese Datei muss auf dem Pod mit dem angegebenen Volumenamen bereitgestellt werden. |
Speichern Sie den folgenden YAML-Code, der die Azure IoT Einsatz-Komponentendefinitionen enthält, in einer Datei mit dem Namen
components.yaml
:apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: iotoperations-pubsub namespace: azure-iot-operations annotations: dapr.io/component-container: > { "name": "iot-operations-dapr-components", "image": "ghcr.io/azure/iot-operations-dapr-components: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": "pubSubLogLevel", "value": "Information" }, { "name": "stateStoreLogLevel", "value": "Information" }, { "name": "defaultLogLevel", "value": "Warning" } ] } spec: type: pubsub.azure.iotoperations version: v1 metadata: - 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 --- apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: iotoperations-statestore namespace: azure-iot-operations spec: type: state.azure.iotoperations version: v1 metadata: - 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
Wenden Sie die Komponente auf Ihr Cluster an, indem Sie den folgenden Befehl ausführen:
kubectl apply -f components.yaml
Überprüfen Sie die folgende Ausgabe:
component.dapr.io/iotoperations-pubsub created component.dapr.io/iotoperations-statestore created
Erstellen einer Autorisierungsrichtlinie für MQTT-Broker
Um Autorisierungsrichtlinien für MQTT-Broker zu konfigurieren, erstellen Sie zuerst eine BrokerAuthorization-Ressource.
Hinweis
Wenn die Brokerautorisierung für diesen Cluster nicht aktiviert ist, können Sie diesen Abschnitt überspringen, da die Anwendungen auf sämtliche MQTT-Themen Zugriff haben. Dies gilt auch für Themen, die für den Zugriff auf den MQTT-Broker-Zustandsspeicher benötigt werden.
Speichern Sie den folgenden YAML-Code, der eine Definitionen für „BrokerAuthorization“ enthält, in einer Datei mit dem Namen
aio-dapr-authz.yaml
:apiVersion: mqttbroker.iotoperations.azure.com/v1 kind: BrokerAuthorization metadata: name: my-dapr-authz-policies namespace: azure-iot-operations spec: listenerRef: - my-listener # change to match your listener name as needed authorizationPolicies: enableCache: false rules: - principals: attributes: - group: dapr-workload # match to the attribute annotated to the service account brokerResources: - method: Connect - method: Publish topics: - "$services/statestore/#" - method: Subscribe topics: - "clients/{principal.clientId}/services/statestore/#"
Wenden Sie die BrokerAuthorization-Definition auf das Cluster an:
kubectl apply -f aio-dapr-authz.yaml
Nächste Schritte
Nachdem die Dapr-Komponenten im Cluster bereitgestellt wurden, können Sie mithilfe von Dapr verteilte Anwendungen entwickeln.