Compartir vía


Implementación de los componentes conectables de Dapr

Distributed Application Runtime (Dapr) es un runtime portátil, sin servidor y controlado por eventos que simplifica el proceso de creación de aplicaciones distribuidas. Dapr te permite compilar aplicaciones con estado o sin estado sin preocuparse por cómo funcionan los bloques de creación. Dapr proporciona varios bloques de creación: pub/sub, administración de estado, invocación de servicio, actores, etc.

Azure IoT Operations admite dos de estos bloques de creación, con tecnología del corredor MQTT:

  • Publish y Subscribe
  • Administración de estados

Para usar los componentes conectables de Dapr, define la especificación de componentes para cada una de las API y, a continuación, regístrela en el clúster. Los componentes de Dapr escuchan un socket de dominio de Unix colocado en el volumen compartido. El entorno de ejecución de Dapr se conecta con cada socket y detecta todos los servicios de una API de bloque de creación determinada que implementa el componente.

Instalación del runtime de Dapr

Para instalar el runtime de Dapr, usa el siguiente comando de Helm:

Nota:

Si ha completado el inicio rápido proporcionado de Azure IoT Operations, ya ha instalado el runtime de Dapr y no necesita los pasos siguientes.

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

Registro de componentes conectables del corredor MQTT

Para registrar los componentes conectables de administración de estado y pub/sub, crea el YAML de manifiesto del componente y aplícalo al clúster.

Para crear el archivo YAML, use las siguientes definiciones de componente:

Componente Descripción
metadata:name El nombre del componente es importante y es cómo una aplicación Dapr hace referencia al componente.
metadata:annotations:dapr.io/component-container Anotaciones de componente usadas por el inyector sidecar Dapr, definiendo la ubicación de la imagen, los montajes de volumen y la configuración de registro
spec:type Tipo del componente, que debe declararse exactamente como se muestra
spec:metadata:keyPrefix Define el prefijo de clave que se usa al comunicarse con el back-end del almacén de estado. Para obtener más información, consulte Documentación de Dapr
spec:metadata:hostname Nombre de host del corredor MQTT. Valor predeterminado: aio-broker
spec:metadata:tcpPort Número de puerto del corredor MQTT. Valor predeterminado: 18883
spec:metadata:useTls Defina si el MQTT broker usa TLS. Valor predeterminado: true
spec:metadata:caFile Ruta de acceso de la cadena de certificados para validar el corredor MQTT. Necesario si useTls es true. Este archivo debe montarse en el pod con el nombre de volumen especificado
spec:metadata:satAuthFile El token de cuenta de servicio (SAT) se usa para autenticar los componentes de Dapr con el corredor MQTT. Este archivo debe montarse en el pod con el nombre de volumen especificado
  1. Guarde el siguiente archivo YAML, que contiene las definiciones de componentes de Operaciones de IoT de Azure, en un archivo denominado 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. Ejecute el comando siguiente para aplicar el componente al clúster:

    kubectl apply -f components.yaml
    

    Compruebe la siguiente salida:

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

Creación de una directiva de autorización para el corredor MQTT

Para configurar directivas de autorización en el corredor MQTT, primero debe crear un recurso BrokerAuthorization.

Nota:

Si la autorización de agente no está habilitada en este clúster, puedes omitir esta sección, ya que las aplicaciones tendrán acceso a todos los temas de MQTT, incluidos los necesarios para acceder al almacén de estado del corredor MQTT.

  1. Guarda el siguiente código yaml, que contiene una definición BrokerAuthorization, en un archivo denominado 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. Aplique la definición BrokerAuthorization al clúster:

    kubectl apply -f aio-dapr-authz.yaml
    

Pasos siguientes

Ahora que los componentes de Dapr se han implementado en el clúster, puede Usar Dapr para desarrollar aplicaciones distribuidas.