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