Поделиться через


Развертывание подключаемых компонентов Dapr

Распределенная среда выполнения приложений (Dapr) — это переносимая, бессерверная среда выполнения, которая упрощает процесс создания распределенных приложений. Dapr позволяет создавать приложения без отслеживания состояния или без отслеживания состояния, не беспокоясь о том, как функции стандартных блоков. Dapr предоставляет несколько стандартных блоков: pub/sub, управление состоянием, вызов служб, субъекты и многое другое.

Операции Интернета вещей Azure поддерживают два из этих стандартных блоков, на базе брокера MQTT:

  • Публикация и подписка
  • Управление данными о состоянии

Чтобы использовать подключаемые компоненты Dapr, определите спецификацию компонентов для каждого API и зарегистрируйтесь в кластере. Компоненты Dapr прослушивают сокет домена Unix, размещенный на общем томе. Среда выполнения Dapr подключается к каждому сокету и обнаруживает все службы из заданного API стандартных блоков, реализуемого компонентом.

Установка среды выполнения Dapr

Чтобы установить среду выполнения Dapr, используйте следующую команду Helm:

Примечание.

Если вы выполнили предоставленное краткое руководство по операциям Интернета вещей Azure, вы уже установили среду выполнения Dapr, а следующие действия не требуются.

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

Чтобы зарегистрировать подключаемые компоненты подключаемого модуля для pub/sub и управления состоянием, создайте yaml манифеста компонента и примените его к кластеру.

Чтобы создать yaml-файл, используйте следующие определения компонентов:

Компонент Description
metadata:name Имя компонента важно и как приложение Dapr ссылается на компонент.
metadata:annotations:dapr.io/component-container Заметки о компонентах, используемые инектором бокового автомобиля Dapr, определяющие расположение изображения, подключение томов и конфигурацию ведения журнала
spec:type Тип компонента, который должен быть объявлен точно, как показано
spec:metadata:keyPrefix Определяет префикс ключа, используемый при взаимодействии с серверной частью хранилища состояний. Дополнительные сведения см . в документации по Dapr
spec:metadata:hostname Имя узла брокера MQTT. Значение по умолчанию: aio-broker.
spec:metadata:tcpPort Номер порта брокера MQTT. Значение по умолчанию: 18883.
spec:metadata:useTls Определите, используется ли TLS брокером MQTT. Значение по умолчанию: true.
spec:metadata:caFile Путь цепочки сертификатов для проверки брокера MQTT. Обязательный параметр, если useTls имеет значение true. Этот файл должен быть подключен в pod с указанным именем тома.
spec:metadata:satAuthFile Файл токена учетной записи службы (SAT) используется для проверки подлинности компонентов Dapr с помощью брокера MQTT. Этот файл должен быть подключен в pod с указанным именем тома.
  1. Сохраните следующий yaml, содержащий определения компонентов Операций Интернета вещей Azure, в файл с именем 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. Примените компонент к кластеру, выполнив следующую команду:

    kubectl apply -f components.yaml
    

    Проверьте следующие выходные данные:

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

Создание политики авторизации для брокера MQTT

Чтобы настроить политики авторизации для брокера MQTT, сначала создайте ресурс BrokerAuthorization .

Примечание.

Если авторизация брокера не включена в этом кластере, этот раздел можно пропустить, так как приложения будут иметь доступ ко всем разделам MQTT, включая необходимые для доступа к хранилищу состояний брокера MQTT.

  1. Сохраните следующий yaml, содержащий определение BrokerAuthorization, в файл с именем 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. Примените определение BrokerAuthorization к кластеру:

    kubectl apply -f aio-dapr-authz.yaml
    

Следующие шаги

Теперь, когда компоненты Dapr развертываются в кластере, можно использовать Dapr для разработки распределенных приложений.