Delen via


Dapr-pluggable-onderdelen implementeren

De Distributed Application Runtime (Dapr) is een draagbare, serverloze, gebeurtenisgestuurde runtime die het proces van het bouwen van gedistribueerde toepassingen vereenvoudigt. Met Dapr kunt u stateful of stateless apps bouwen zonder dat u zich zorgen hoeft te maken over hoe de bouwstenen werken. Dapr biedt verschillende bouwstenen: pub/sub, statusbeheer, aanroepen van services, actoren en meer.

Azure IoT Operations ondersteunt twee van deze bouwstenen, mogelijk gemaakt door MQTT-broker:

  • Publiceren en abonneren
  • Statusbeheer

Als u de dapr-pluggable-onderdelen wilt gebruiken, definieert u de onderdeelspecificatie voor elk van de API's en registreert u zich vervolgens bij het cluster. De Dapr-onderdelen luisteren naar een Unix-domeinsocket die op het gedeelde volume is geplaatst. De Dapr-runtime maakt verbinding met elke socket en detecteert alle services van een bepaalde bouwsteen-API die door het onderdeel wordt geïmplementeerd.

Dapr-runtime installeren

Gebruik de volgende Helm-opdracht om de Dapr-runtime te installeren:

Notitie

Als u de opgegeven quickstart voor Azure IoT Operations hebt voltooid, hebt u de Dapr-runtime al geïnstalleerd en zijn de volgende stappen niet vereist.

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

MQTT Broker Pluggable-onderdelen registreren

Als u de pluggable onderdelen voor pub/sub- en statusbeheer wilt registreren, maakt u het manifest-yaml van het onderdeel en past u deze toe op uw cluster.

Gebruik de volgende onderdeeldefinities om het yaml-bestand te maken:

Onderdeel Beschrijving
metadata:name De naam van het onderdeel is belangrijk en is hoe een Dapr-toepassing verwijst naar het onderdeel.
metadata:annotations:dapr.io/component-container Componentaantekeningen die worden gebruikt door de Sidecar injector van Dapr, het definiëren van de locatie van de installatiekopieën, volumekoppelingen en configuratie van logboekregistratie
spec:type Het type onderdeel, dat exact moet worden gedeclareerd zoals weergegeven
spec:metadata:keyPrefix Hiermee definieert u het sleutelvoorvoegsel dat wordt gebruikt bij het communiceren met de back-end van de statestore. Zie de Dapr-documentatie voor meer informatie
spec:metadata:hostname De hostnaam van de MQTT-broker. Standaard is aio-broker
spec:metadata:tcpPort Het poortnummer van de MQTT-broker. Standaard is 18883
spec:metadata:useTls Definiëren of TLS wordt gebruikt door de MQTT-broker. Standaard is true
spec:metadata:caFile Het pad naar de certificaatketen voor het valideren van de MQTT-broker. Vereist als useTls dat het is true. Dit bestand moet worden gekoppeld in de pod met de opgegeven volumenaam
spec:metadata:satAuthFile Het serviceaccounttokenbestand (SAT) wordt gebruikt om de Dapr-onderdelen te verifiëren met de MQTT-broker. Dit bestand moet worden gekoppeld in de pod met de opgegeven volumenaam
  1. Sla de volgende yaml, die de definities van het Onderdeel Azure IoT Operations bevat, op in een bestand met de naam 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. Pas het onderdeel toe op uw cluster door de volgende opdracht uit te voeren:

    kubectl apply -f components.yaml
    

    Controleer de volgende uitvoer:

    component.dapr.io/iotoperations-pubsub created
    component.dapr.io/iotoperations-statestore created
    

Autorisatiebeleid maken voor MQTT-broker

Als u autorisatiebeleid wilt configureren voor MQTT Broker, maakt u eerst een BrokerAuthorization-resource .

Notitie

Als Broker-autorisatie niet is ingeschakeld voor dit cluster, kunt u deze sectie overslaan omdat de toepassingen toegang hebben tot alle MQTT-onderwerpen, inclusief de onderwerpen die nodig zijn voor toegang tot de MQTT-brokerstatusopslag.

  1. Sla de volgende yaml, die een BrokerAuthorization-definitie bevat, op in een bestand met de naam 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. Pas de BrokerAuthorization-definitie toe op het cluster:

    kubectl apply -f aio-dapr-authz.yaml
    

Volgende stappen

Nu de Dapr-onderdelen zijn geïmplementeerd in het cluster, kunt u Dapr gebruiken om gedistribueerde toepassingen te ontwikkelen.