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