Condividi tramite


Distribuire componenti collegabili Dapr

Dapr (Distributed Application Runtime) è un runtime portatile, serverless e basato su eventi che semplifica il processo di compilazione di applicazioni distribuite. Dapr consente di creare app con stato o senza stato, senza doversi preoccupare del funzionamento dei blocchi predefiniti. Dapr offre diversi blocchi predefiniti: pub/sub, gestione dello stato, chiamata del servizio, attori e altro ancora.

Operazioni di Azure IoT supporta due di questi blocchi predefiniti, basati sul broker MQTT:

  • Pubblica e sottoscrivi
  • Gestione dello stato

Per usare i componenti collegabili dapr, definire la specifica del componente per ognuna delle API e quindi eseguire la registrazione con il cluster. I componenti Dapr sono in ascolto di un socket di dominio Unix posizionato nel volume condiviso. Il runtime Dapr si connette a ogni socket e individua tutti i servizi di una certa API di blocco predefinito implementata dal componente.

Installare il runtime Dapr

Per installare il runtime Dapr, usare il comando Helm seguente:

Nota

Se è stata completata la guida introduttiva di Azure IoT Operations fornita, il runtime di Dapr è già stato installato e i passaggi seguenti non sono necessari.

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

Registrare i componenti collegabili del broker MQTT

Per registrare i componenti collegabili di gestione dello stato e pub/sub, creare il yaml manifesto del componente e applicarlo al cluster.

Per creare il file yaml, usare le definizioni dei componenti seguenti:

Componente Descrizione
metadata:name Il nome del componente è importante e rappresenta il modo in cui un'applicazione Dapr fa riferimento al componente.
metadata:annotations:dapr.io/component-container Annotazioni dei componenti usate dall'iniettore sidecar dapr, definendo la posizione dell'immagine, i montaggi del volume e la configurazione della registrazione
spec:type Il tipo di componente, che deve essere dichiarato esattamente come illustrato
spec:metadata:keyPrefix Definisce il prefisso della chiave usato durante la comunicazione con il back-end dell'archivio stati. Per altre informazioni, vedere la documentazione di Dapr
spec:metadata:hostname Nome host del broker MQTT. L'impostazione predefinita è aio-broker
spec:metadata:tcpPort Numero di porta del broker MQTT. L'impostazione predefinita è 18883
spec:metadata:useTls Definire se TLS viene usato dal broker MQTT. L'impostazione predefinita è true
spec:metadata:caFile Percorso della catena di certificati per la convalida del broker MQTT. Richiesto se useTls è true. Questo file deve essere montato nel pod con il nome di volume specificato
spec:metadata:satAuthFile Il file del token dell'account del servizio (SAT) viene usato per autenticare i componenti Dapr con il broker MQTT. Questo file deve essere montato nel pod con il nome di volume specificato
  1. Salvare il file yaml seguente, che contiene le definizioni dei componenti di Operazioni di Azure IoT, in un file denominato 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. Applicare il componente al cluster eseguendo il comando seguente:

    kubectl apply -f components.yaml
    

    Verificare l'output seguente:

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

Creare criteri di autorizzazione per il broker MQTT

Per configurare i criteri di autorizzazione per il broker MQTT, creare innanzitutto una risorsa BrokerAuthorization.

Nota

È possibile ignorare questa sezione se l'autorizzazione del broker non è abilitata nel cluster, poiché le applicazioni avranno accesso a tutti gli argomenti relativi a MQTT, inclusi quelli necessari per accedere all'archivio stati del broker MQTT.

  1. Salvare lo yaml seguente, che contiene una definizione BrokerAuthorization, in un file denominato 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. Applicare la definizione brokerAuthorization al cluster:

    kubectl apply -f aio-dapr-authz.yaml
    

Passaggi successivi

Ora che i componenti Dapr vengono distribuiti nel cluster, è possibile usare Dapr per sviluppare applicazioni distribuite.