Udostępnij za pośrednictwem


Wdrażanie składników podłączonych w języku Dapr

Środowisko uruchomieniowe aplikacji rozproszonej (Dapr) to przenośne, bezserwerowe, sterowane zdarzeniami środowisko uruchomieniowe, które upraszcza proces tworzenia aplikacji rozproszonych. Język Dapr umożliwia tworzenie aplikacji stanowych lub bezstanowych bez obaw o sposób działania bloków konstrukcyjnych. Dapr udostępnia kilka bloków konstrukcyjnych: pub/sub, zarządzanie stanem, wywołanie usługi, aktorów i nie tylko.

Operacje usługi Azure IoT obsługują dwa z tych bloków konstrukcyjnych obsługiwane przez brokera MQTT:

  • Publikowanie i subskrybowanie
  • Zarządzanie stanem

Aby użyć składników podłączanych języka Dapr, zdefiniuj specyfikację składników dla każdego interfejsu API, a następnie zarejestruj się w klastrze. Składniki języka Dapr nasłuchują gniazda domeny systemu Unix umieszczonego na udostępnionym woluminie. Środowisko uruchomieniowe języka Dapr łączy się z każdym gniazdem i odnajduje wszystkie usługi z danego interfejsu API bloku konstrukcyjnego, który implementuje składnik.

Instalowanie środowiska uruchomieniowego języka Dapr

Aby zainstalować środowisko uruchomieniowe Dapr, użyj następującego polecenia helm:

Uwaga

Jeśli ukończono podany przewodnik Szybki start Dotyczący operacji usługi Azure IoT, środowisko uruchomieniowe języka Dapr zostało już zainstalowane, a poniższe kroki nie są wymagane.

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

Rejestrowanie składników wtyczki brokera MQTT

Aby zarejestrować składniki podłączane do zarządzania pub/sub i stan, utwórz plik yaml manifestu składnika i zastosuj go do klastra.

Aby utworzyć plik yaml, użyj następujących definicji składników:

Składnik opis
metadata:name Nazwa składnika jest ważna i jak aplikacja dapr odwołuje się do składnika.
metadata:annotations:dapr.io/component-container Adnotacje składników używane przez iniektor przyczepki dapr, definiując lokalizację obrazu, instalację woluminu i konfigurację rejestrowania
spec:type Typ składnika, który musi być zadeklarowany dokładnie tak, jak pokazano
spec:metadata:keyPrefix Definiuje prefiks klucza używany podczas komunikacji z zapleczem magazynu stanów. Zobacz więcej informacji, zobacz dokumentację języka Dapr, aby uzyskać więcej informacji
spec:metadata:hostname Nazwa hosta brokera MQTT. Wartość domyślna to aio-broker
spec:metadata:tcpPort Numer portu brokera MQTT. Wartość domyślna to 18883
spec:metadata:useTls Określ, czy protokół TLS jest używany przez brokera MQTT. Wartość domyślna to true
spec:metadata:caFile Ścieżka łańcucha certyfikatów do weryfikacji brokera MQTT. Wymagane, jeśli useTls ma wartość true. Ten plik musi być zainstalowany w zasobniku o określonej nazwie woluminu
spec:metadata:satAuthFile Plik tokenu konta usługi (SAT) służy do uwierzytelniania składników języka Dapr za pomocą brokera MQTT. Ten plik musi być zainstalowany w zasobniku o określonej nazwie woluminu
  1. Zapisz następujący plik yaml, który zawiera definicje składników operacji usługi Azure IoT, do pliku o nazwie 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. Zastosuj składnik do klastra, uruchamiając następujące polecenie:

    kubectl apply -f components.yaml
    

    Sprawdź następujące dane wyjściowe:

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

Tworzenie zasad autoryzacji dla brokera MQTT

Aby skonfigurować zasady autoryzacji dla brokera MQTT, najpierw należy utworzyć zasób BrokerAuthorization .

Uwaga

Jeśli autoryzacja brokera nie jest włączona w tym klastrze, możesz pominąć tę sekcję, ponieważ aplikacje będą miały dostęp do wszystkich tematów MQTT, w tym tych wymaganych do uzyskania dostępu do magazynu stanów brokera MQTT.

  1. Zapisz następujący plik yaml, który zawiera definicję brokerAuthorization, do pliku o nazwie 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. Zastosuj definicję BrokerAuthorization do klastra:

    kubectl apply -f aio-dapr-authz.yaml
    

Następne kroki

Teraz, gdy składniki języka Dapr są wdrażane w klastrze, możesz użyć języka Dapr do tworzenia aplikacji rozproszonych.