Compartilhar via


Implantar componentes conectáveis Dapr

O Dapr (Distributed Apps Runtime) é um tempo de execução portátil, sem servidor e controlado por eventos que simplifica o processo de criação de aplicativos distribuídos. O Dapr permite criar aplicativos com ou sem monitoração de estado sem se preocupar com o funcionamento dos blocos de construção. O Dapr fornece vários blocos de construção: gerenciamento de estado, chamada de serviço, atores, pub/sub e muito mais.

As Operações do Azure IoT oferecem suporte a dois destes blocos de construção, com auxílio do Agente MQTT:

  • Publicação e assinatura
  • Gerenciamento de estado

Para usar os componentes conectáveis do Dapr, defina a especificação do componente para cada uma das APIs e registre-a com o cluster. Os componentes da Dapr escutam um soquete de domínio Unix colocado no volume compartilhado. O runtime do Dapr se conecta com cada soquete e descobre todos os serviços de uma determinada API de bloco de construção que o componente implementa.

Instalar o runtime do Dapr

Para instalar o runtime do Dapr, use o seguinte comando Helm:

Observação

Se você concluiu o início rápido das Operações do Azure IoT fornecido, você já instalou o runtime do Dapr e as etapas a seguir não são necessárias.

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

Registrar os componentes conectáveis do Agente MQTT

Para registrar os componentes conectáveis de gerenciamento de estado e pub/sub, crie o YAML de manifesto do componente e aplique-o ao cluster.

Para criar o arquivo YAML, use as seguintes definições de componente:

Componente Descrição
metadata:name O nome do componente é importante e é o modo como um aplicativo Dapr referencia o componente.
metadata:annotations:dapr.io/component-container Aa anotações de componente usadas pelo injetor sidecar do Dapr definem o local da imagem, as montagens de volume e a configuração do log de eventos
spec:type O tipo do componente, que deve ser declarado exatamente como mostrado
spec:metadata:keyPrefix Define o prefixo de chave usado ao se comunicar com o back-end do statestore. Confira mais informações na Documentação do Dapr
spec:metadata:hostname O nome do host do agente MQTT. O padrão é aio-broker
spec:metadata:tcpPort O número da porta do agente MQTT. O padrão é 18883
spec:metadata:useTls Defina se o TLS é usado pelo agente MQTT. O padrão é true
spec:metadata:caFile O caminho da cadeia de certificados para validar o Agente MQTT. Necessário se useTls for true. Esse arquivo deve ser montado no pod com o nome do volume especificado
spec:metadata:satAuthFile O arquivo SAT (Token da Conta de Serviço) é usado para autenticar os componentes do Dapr com o agente MQTT. Esse arquivo deve ser montado no pod com o nome do volume especificado
  1. Salve o seguinte YAML, que contém as definições de componente de Operações do Azure IoT, em um arquivo chamado 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. Aplique o componente ao cluster executando o seguinte comando:

    kubectl apply -f components.yaml
    

    Verifique a seguinte saída:

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

Criar uma política de autorização para o Agente MQTT

Para configurar políticas de autorização para o Agente MQTT, primeiro crie um recurso BrokerAuthorization.

Observação

Se a Autorização do Agente não estiver habilitada neste cluster, você poderá ignorar esta seção, pois os aplicativos terão acesso para permitir tópicos MQTT, incluindo aqueles necessários para acessar o Repositório de Estado do Agente MQTT.

  1. Salve o seguinte YAML, que contém uma definição BrokerAuthorization, em um arquivo chamado 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 a definição de BrokerAuthorization ao cluster:

    kubectl apply -f aio-dapr-authz.yaml
    

Próximas etapas

Agora que os componentes do Dapr foram implantados no cluster, você pode Usar o Dapr para desenvolver aplicativos distribuídos.