Dapr 플러그형 구성 요소 배포
Dapr(Distributed Application Runtime)은 분산 애플리케이션을 빌드하는 프로세스를 간소화하는 이식 가능한 서버리스 이벤트 기반 런타임입니다. Dapr을 사용하면 구성 요소의 작동 방식에 대해 걱정하지 않고 상태 저장 또는 상태 비저장 앱을 빌드할 수 있습니다. Dapr은 pub/sub, 상태 관리, 서비스 호출, 작업자 등 여러 구성 요소를 제공합니다.
Azure IoT 작업은 MQTT 브로커를 통해 다음 두 구성 요소를 지원합니다.
- 게시 및 구독
- 상태 관리
Dapr 플러그형 구성 요소를 사용하려면 각 API에 대한 구성 요소 사양을 정의한 다음 클러스터에 등록합니다. Dapr 구성 요소는 공유 볼륨에 배치된 Unix 도메인 소켓을 수신 대기합니다. Dapr 런타임은 각 소켓과 연결하여 구성 요소가 구현하는 지정된 구성 요소 API에서 모든 서비스를 검색합니다.
Dapr 런타임 설치
Dapr 런타임을 설치하려면 다음 Helm 명령을 사용합니다.
참고 항목
제공된 Azure IoT Operations 빠른 시작을 완료한 경우 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 사이드카 인젝터에서 사용하는 구성 요소 주석, 이미지 위치 정의, 볼륨 탑재 및 로깅 구성 |
spec:type |
표시된 대로 정확하게 선언해야 하는 구성 요소의 형식 |
spec:metadata:keyPrefix |
statestore 백 엔드에 통신할 때 사용되는 키 접두사를 정의합니다. 자세한 내용은 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 리소스를 만듭니다.
참고 항목
이 클러스터에서 브로커 권한 부여를 사용하도록 설정하지 않은 경우 애플리케이션이 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을 사용하여 분산 애플리케이션을 개발할 수 있습니다.