Dela via


Distribuera Dapr-pluggbara komponenter

Dapr (Distributed Application Runtime) är en portabel, serverlös, händelsedriven körning som förenklar processen med att skapa distribuerade program. Med Dapr kan du skapa tillståndskänsliga eller tillståndslösa appar utan att behöva oroa dig för hur byggblocken fungerar. Dapr innehåller flera byggstenar: pub/sub, delstatshantering, tjänstanrop, aktörer med mera.

Azure IoT Operations stöder två av dessa byggstenar som drivs av MQTT Broker:

  • Publicera och prenumerera
  • Tillståndshantering

Om du vill använda Dapr-pluggbara komponenter definierar du komponentspecifikationen för var och en av API:erna och registrerar sedan med klustret. Dapr-komponenterna lyssnar på en Unix-domänsocket som placeras på den delade volymen. Dapr-körningen ansluter till varje socket och identifierar alla tjänster från ett visst byggblocks-API som komponenten implementerar.

Installera Dapr-körning

Om du vill installera Dapr-körningen använder du följande Helm-kommando:

Kommentar

Om du har slutfört den angivna Azure IoT Operations-snabbstarten har du redan installerat Dapr-körningen och följande steg krävs inte.

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

Registrera MQTT-asynkrona anslutningsbara komponenter

Om du vill registrera de anslutbara komponenterna pub/sub och tillståndshantering skapar du komponentmanifestet yaml och tillämpar det på klustret.

Om du vill skapa yaml-filen använder du följande komponentdefinitioner:

Komponent beskrivning
metadata:name Komponentnamnet är viktigt och är hur ett Dapr-program refererar till komponenten.
metadata:annotations:dapr.io/component-container Komponentanteckningar som används av Dapr-sidovagnsinjektor, som definierar avbildningsplats, volymmonteringar och loggningskonfiguration
spec:type Typen av komponent, som måste deklareras exakt som det visas
spec:metadata:keyPrefix Definierar nyckelprefixet som används vid kommunikation till statestore-serverdelen. Mer information finns i Dapr-dokumentationen för mer information
spec:metadata:hostname Värdnamnet för MQTT-koordinatorn. Standardvärdet är aio-broker
spec:metadata:tcpPort MQTT-koordinatorportnumret. Standardvärdet är 18883
spec:metadata:useTls Definiera om TLS används av MQTT-koordinatorn. Standardvärdet är true
spec:metadata:caFile Certifikatkedjans sökväg för att verifiera MQTT-asynkron meddelandekö. Krävs om useTls är true. Den här filen måste monteras i podden med det angivna volymnamnet
spec:metadata:satAuthFile Sat-filen (Service Account Token) används för att autentisera Dapr-komponenterna med MQTT-koordinatorn. Den här filen måste monteras i podden med det angivna volymnamnet
  1. Spara följande yaml, som innehåller komponentdefinitionerna för Azure IoT Operations, i en fil med namnet 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. Använd komponenten i klustret genom att köra följande kommando:

    kubectl apply -f components.yaml
    

    Kontrollera följande utdata:

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

Skapa auktoriseringsprincip för MQTT-koordinator

Om du vill konfigurera auktoriseringsprinciper för MQTT-asynkronisering skapar du först en BrokerAuthorization-resurs .

Kommentar

Om auktorisering av auktorisering inte är aktiverat i det här klustret kan du hoppa över det här avsnittet eftersom programmen har åtkomst till alla MQTT-ämnen, inklusive de som behövs för att få åtkomst till MQTT Broker State Store.

  1. Spara följande yaml, som innehåller en BrokerAuthorization-definition, i en fil med namnet 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. Tillämpa BrokerAuthorization-definitionen på klustret:

    kubectl apply -f aio-dapr-authz.yaml
    

Nästa steg

Nu när Dapr-komponenterna har distribuerats till klustret kan du använda Dapr för att utveckla distribuerade program.