알려진 문제: Azure IoT 작업
이 문서에서는 Azure IoT Operations의 알려진 문제를 나열합니다.
배포 및 제거 문제
명시적 동의 없이 클러스터에 대한 업데이트를 사용하지 않으려면 클러스터를 사용하도록 설정할 때 Arc 업데이트를 사용하지 않도록 설정해야 합니다. 이는 일부 시스템 확장이 Arc 에이전트에 의해 자동으로 업데이트되기 때문입니다. 업데이트를 사용하지 않도록 설정하려면 명령의 일부로 플래그를
az connectedk8s connect
포함합니다--disable-auto-upgrade
."code":"LinkedAuthorizationFailed"
오류가 발생하고 배포에 실패하는 경우 클러스터가 포함된 리소스 그룹에 대해 Microsoft.Authorization/roleAssignments/write 권한이 없는 것입니다.Kubernetes 클러스터에서 SecretProviderClass 및 SecretSync 사용자 지정 리소스를 직접 편집하면 Azure IoT Operations의 비밀 흐름이 중단됩니다. 비밀과 관련된 모든 작업의 경우 작업 환경 UI를 사용합니다.
Azure IoT 작업을 배포하는 동안 및 배포한 후 로그 및 Kubernetes 이벤트에 대한
Unable to retrieve some image pull secrets (regcred)
경고가 표시될 수 있습니다. 이러한 경고는 예상되며 Azure IoT Operations의 배포 및 사용에 영향을 주지 않습니다.메시지
Error occurred while creating custom resources needed by system extensions
와 함께 배포에 실패하면 향후 릴리스에서 수정될 알려진 간헐적 오류가 발생합니다. 해결 방법은 az iot ops delete 명령을 플래그와 함께--include-deps
사용하여 클러스터에서 Azure IoT 작업을 삭제합니다. Azure IoT Operations 및 해당 종속성이 클러스터에서 삭제되면 배포를 다시 시도합니다.
MQTT Broker
Kubernetes를 사용하여 클러스터에서 만든 MQTT broker 리소스는 Azure Portal에 표시되지 않습니다. Kubernetes를 사용하여 Azure IoT Operations 구성 요소를 관리하는 것은 미리 보기 상태이며 에지에서 클라우드로의 리소스 동기화는 현재 지원되지 않기 때문입니다.
초기 배포 후에는 Broker 리소스를 업데이트할 수 없습니다. 카디널리티, 메모리 프로필 또는 디스크 버퍼에 대한 구성을 변경할 수 없습니다.
해결 방법으로 az iot ops init 명령을 사용하여 Azure IoT 작업을 배포할 때 MQTT 브로커에 대한 JSON 구성 파일에
--broker-config-file
매개 변수를 포함할 수 있습니다. 자세한 내용은 고급 MQTT 브로커 구성 및 핵심 MQTT 브로커 설정 구성을 참조하세요.Broker에 백 엔드 복제본이 하나만 있는 경우(
backendChain.redundancyFactor
1로 설정됨) Azure IoT 작업을 업그레이드하지 못할 수 있습니다. Broker에 둘 이상의 백 엔드 복제본이 있는 경우에만 Azure IoT Operations를 업그레이드합니다.MQTT 브로커의 진단 서비스가 자체 토픽에서 원격 분석을 생성하더라도
#
토픽을 구독할 때 자체 테스트에서 메시지를 받을 수 있습니다.카디널리티 및 메모리 프로필 값이 클러스터에 대해 너무 크도록 설정된 경우 배포가 실패할 수 있습니다. 이 문제를 해결하려면 복제본 수를
1
설정하고low
같은 더 작은 메모리 프로필을 사용합니다.로 시작하는
azedge/dmqtt/selftest
진단 프로브 토픽을 게시하거나 구독하지 마세요. 이러한 항목을 게시하거나 구독하면 프로브 또는 자체 테스트 검사에 영향을 주면 잘못된 결과가 발생할 수 있습니다. 잘못된 결과가 진단 프로브 로그, 메트릭 또는 대시보드에 나열될 수 있습니다. 예를 들어 진단-프로브 로그에서 작업 유형이 '게시'인 프로브 이벤트에 대해 경로 확인이 실패한 문제가 표시될 수 있습니다.
Azure IoT 계층화된 네트워크 관리(미리 보기)
계층화된 네트워크 관리 서비스가 Ubuntu 호스트에서 K3S를 실행하는 동안 IP 주소를 얻지 못하는 경우 옵션을 사용하여
--disable=traefik
traefik 수신 컨트롤러 없이 K3S를 다시 설치합니다.curl -sfL https://get.k3s.io | sh -s - --disable=traefik --write-kubeconfig-mode 644
자세한 내용은 네트워킹 | K3s를 참조하세요.
자식 네트워크 수준에서 실행되는 CoreDNS 서비스를 사용하는 동안 DNS 쿼리가 예상 IP 주소로 확인되지 않는 경우 Ubuntu 22.04로 업그레이드하고 K3S를 다시 설치합니다.
OPC UA용 커넥터
Azure Device Registry 자산 정의를 사용하면 특성 섹션의 숫자를 사용할 수 있지만 OPC 감독자는 문자열만 예상합니다.
OPC UA 브로커에 새 자산 엔드포인트 프로필을 사용하여 새 자산을 추가하고 재구성을 트리거하면 사용자 이름 및 암호에
opc.tcp
대한 새 비밀 탑재를 수용하도록 Pod 배포가 변경됩니다. 어떤 이유로 새 탑재가 실패하면 Pod가 다시 시작되지 않으므로 올바르게 구성된 자산의 이전 흐름도 중지됩니다.주체 이름 및 애플리케이션 URI는 제공된 인증서와 정확히 일치해야 합니다. 교차 유효성 검사가 없으므로 오류가 발생하면 OPC UA 서버가 애플리케이션 인증서를 거부할 수 있습니다.
AIO를 성공적으로 설치한 후 잘못된 OPC UA 애플리케이션 인스턴스 인증서를 새로 제공하면 연결 오류가 발생할 수 있습니다. 이 문제를 해결하려면 Azure IoT Operations 인스턴스를 삭제하고 설치를 다시 시작합니다.
OPC PLC 시뮬레이터
OPC PLC 시뮬레이터에 대한 자산 엔드포인트를 만들었지만 OPC PLC 시뮬레이터가 MQTT 브로커로 데이터를 보내지 않는 경우 다음 명령을 실행하여 자산 엔드포인트에 대해 autoAcceptUntrustedServerCertificates=true
를 설정합니다.
ENDPOINT_NAME=<name-of-you-endpoint-here>
kubectl patch AssetEndpointProfile $ENDPOINT_NAME \
-n azure-iot-operations \
--type=merge \
-p '{"spec":{"additionalConfiguration":"{\"applicationName\":\"'"$ENDPOINT_NAME"'\",\"security\":{\"autoAcceptUntrustedServerCertificates\":true}}"}}'
주의
프로덕션 또는 사전 프로덕션 환경에서는 이 구성을 사용하지 마세요. 적절한 인증 없이 클러스터를 인터넷에 노출하면 무단 액세스 및 심지어 DDOS 공격이 발생할 수 있습니다.
다음 명령을 사용하여 모든 자산 엔드포인트를 패치할 수 있습니다.
ENDPOINTS=$(kubectl get AssetEndpointProfile -n azure-iot-operations --no-headers -o custom-columns=":metadata.name")
for ENDPOINT_NAME in `echo "$ENDPOINTS"`; do \
kubectl patch AssetEndpointProfile $ENDPOINT_NAME \
-n azure-iot-operations \
--type=merge \
-p '{"spec":{"additionalConfiguration":"{\"applicationName\":\"'"$ENDPOINT_NAME"'\",\"security\":{\"autoAcceptUntrustedServerCertificates\":true}}"}}'; \
done
새 자산을 만든 후 OPC PLC 시뮬레이터가 MQTT 브로커로 데이터를 보내지 않는 경우 OPC PLC 시뮬레이터 Pod를 다시 시작합니다. Pod 이름은 aio-opc-opc.tcp-1-f95d76c54-w9v9c
와 같습니다. Pod를 다시 시작하려면 k9s
도구를 사용하여 Pod를 종료하거나 다음 명령을 실행합니다.
kubectl delete pod aio-opc-opc.tcp-1-f95d76c54-w9v9c -n azure-iot-operations
데이터 흐름
클러스터에서 만든 데이터 흐름 사용자 지정 리소스는 작업 환경 UI에 표시되지 않습니다. Kubernetes를 사용하여 Azure IoT Operations 구성 요소를 관리하는 것은 미리 보기 상태이며 에지에서 클라우드로의 리소스 동기화는 현재 지원되지 않기 때문입니다.
사용자 지정 Kafka 엔드포인트에 대한 X.509 인증은 아직 지원되지 않습니다.
스키마를 사용하여 메시지 역직렬화 및 유효성 검사는 아직 지원되지 않습니다. 원본 구성에서 스키마를 지정하면 작업 환경 포털에서 데이터 요소 목록을 표시할 수 있지만 데이터 요소는 스키마에 대해 유효성을 검사하지 않습니다.
운영 환경 포털에서 X.509 비밀을 만들면 잘못 인코딩된 데이터가 포함된 비밀이 생성됩니다. 이 문제를 해결하려면 Azure Key Vault를 통해 여러 줄 비밀을 만든 다음 작업 환경 포털의 비밀 목록에서 선택합니다.
여러 IoT Operations 인스턴스를 동일한 Event Grid MQTT 네임스페이스에 연결하는 경우 클라이언트 ID 충돌로 인해 연결 오류가 발생할 수 있습니다. 클라이언트 ID는 현재 데이터 흐름 리소스 이름에서 파생되며 배포에 IaC(Infrastructure as Code) 패턴을 사용하는 경우 생성된 클라이언트 ID가 동일할 수 있습니다. 임시 해결 방법으로 배포 템플릿의 데이터 흐름 이름에 임의성을 추가합니다.