Freigeben über


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 useTlstrue 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.
  1. 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    
    
  2. 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.

  1. 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/#"
    
  2. 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.