部署 Dapr 插入式元件
分散式應用程式執行階段 (Dapr) 是可攜式、無伺服器的事件驅動執行階段,可簡化建置分散式應用程式的過程。 Dapr 可讓您建置具狀態或無狀態應用程式,而不必擔心建置組塊的運作方式。 Dapr 提供數個建置組塊:pub/sub、狀態管理、服務調用、動作項目等等。
Azure IoT 操作支援這兩個由 MQTT 代理程式提供的建置組塊:
- 發佈與訂閱
- 狀態管理
若要使用 Dapr 插入式元件,請定義每個 API 的元件規格,然後 向叢集註冊。 Dapr 元件會接聽放在共用磁碟區上的 Unix 網域通訊端。 Dapr 執行階段會與每個通訊端連線,並從元件實作的指定建置組塊 API 探索所有服務。
安裝 Dapr 執行階段
若要安裝 Dapr 執行階段,請使用下列 Helm 命令:
注意
如果您已完成提供的 Azure IoT 作業 快速入門,表示您已安裝 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 檔案,請使用下列元件定義:
元件 | 描述 |
---|---|
metadata:name |
元件名稱很重要,影響 Dapr 應用程式參考元件的方式。 |
metadata:annotations:dapr.io/component-container |
Dapr sidecar 插入器所使用的元件批注,定義映射位置、磁碟區掛接和記錄設定 |
spec:type |
元件的類型,必須完全如所示宣告 |
spec:metadata:keyPrefix |
定義與狀態存放區後端通訊時所使用的機碼前置詞。 如需詳細資訊,請參閱 Dapr 檔 以取得詳細資訊 |
spec:metadata:hostname |
MQTT 代理程式主機名稱。 預設為 aio-broker |
spec:metadata:tcpPort |
MQTT 代理程式連接埠號碼。 預設為 18883 |
spec:metadata:useTls |
定義 MQTT 代理是否使用 TLS。 預設為 true |
spec:metadata:caFile |
用來驗證 MQTT 代理程式之憑證鏈結路徑。 如果 useTls 為 true ,則為必要項。 此檔案必須裝載在具有指定磁碟區名稱的 Pod |
spec:metadata:satAuthFile |
服務帳戶權杖 (SAT) 檔案會用來向 MQTT 代理程式驗證 Dapr 元件。 此檔案必須裝載在具有指定磁碟區名稱的 Pod |
將包含 Azure IoT 操作元件定義的下列 yaml 儲存至名為
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
執行下列命令,將元件套用至您的叢集:
kubectl apply -f components.yaml
驗證下列輸出︰
component.dapr.io/iotoperations-pubsub created component.dapr.io/iotoperations-statestore created
建立 MQTT 代理程式的授權原則
若要設定 MQTT 代理程式的授權原則,請先建立 BrokerAuthorization 資源。
注意
如果此叢集上未啟用 BrokerAuthorization,您可以略過本節,因為此應用程式可以存取所有 MQTT 主題,包括存取 MQTT 代理程式狀態存放區所需的主題。
將包含 BrokerAuthorization 定義的下列 yaml 儲存至名為
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/#"
將 BrokerAuthorization 定義套用至叢集:
kubectl apply -f aio-dapr-authz.yaml
下一步
現在,Dapr 元件已部署至叢集,您可以使用 Dapr 來開發分散式應用程式。