既知の問題: Azure IoT Operations
この記事では、Azure IoT Operations に関する既知の問題を一覧で示します。
デプロイとアンインストールの問題
明示的な同意なしにクラスターに対して更新が行われないようにするには、クラスターを有効にするときに Arc の更新を無効にする必要があります。 これは、一部のシステム拡張機能が Arc エージェントによって自動的に更新されるためです。 更新を無効にするには、
az connectedk8s connect
コマンドの一部として--disable-auto-upgrade
フラグを含めます。デプロイが
"code":"LinkedAuthorizationFailed"
エラーで失敗した場合は、クラスターを含むリソース グループに対する Microsoft.Authorization/roleAssignments/write アクセス許可がないことを意味します。Kubernetes クラスター内の SecretProviderClass および SecretSync カスタム リソースを直接編集すると、Azure IoT Operations のシークレット フローが中断される可能性があります。 シークレットに関連する操作には Operations Experience UI を使用します。
Azure IoT Operations のデプロイ中と後に、ログと 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 Operations を削除します。 Azure IoT Operations とその依存関係がクラスターから削除されたら、デプロイを再試行します。
MQTT ブローカー
Kubernetes を使用してクラスター内に作成された MQTT ブローカー リソースは、Azure portal に表示されません。 これは想定されたものであり、原因は Kubernetes を使用した Azure IoT Operations コンポーネントの管理がプレビュー段階で、エッジからクラウドへのリソース同期が現在サポートされていないためです。
初期デプロイ後にブローカー リソースを更新できません。 カーディナリティ、メモリ プロファイル、ディスク バッファーに構成の変更を加えることはできません。
回避策として、az iot ops init コマンドを使用して Azure IoT Operations をデプロイするときに、MQTT ブローカーの JSON 構成ファイルに
--broker-config-file
パラメーターを含めることができます。 詳細については、「高度な MQTT ブローカー構成」と「MQTT ブローカーのコア設定を構成する」を参照してください。ブローカーにバックエンド レプリカが 1 つしかない (
backendChain.redundancyFactor
が 1 に設定されている) 場合、Azure IoT Operations のアップグレードは失敗する場合があります。 ブローカーに複数のバックエンド レプリカがある場合にのみ、Azure IoT Operations をアップグレードしてください。MQTT ブローカーの診断では独自のトピックでテレメトリが生成されますが、
#
トピックをサブスクライブするときに自己テストから引き続きメッセージを受け取ることがあります。カーディナリティとメモリ プロファイルがそのクラスターには大きすぎる値に設定されている場合、デプロイが失敗する可能性があります。 この問題を解決するには、レプリカ数を
1
に設定し、low
などのより小さいメモリ プロファイルを使用します。azedge/dmqtt/selftest
で始まる診断プローブ トピックを発行またはサブスクライブしないでください。 これらのトピックを発行またはサブスクライブすると、プローブまたは自己テストのチェックに影響して、結果が無効になる場合があります。 診断プローブ ログ、メトリック、またはダッシュボード内に無効な結果が表示される場合があります。 たとえば、診断プローブ ログの中に、"'発行' 操作の種類を含むプローブ イベントのパス検証が失敗" した問題が表示される場合があります。
Azure IoT Layered Network Management (プレビュー)
Ubuntu ホストで K3S を実行しているときに Layered Network Management サービスで 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
ポッドのデプロイは、ユーザー名とパスワードの新しいシークレット マウントに対応するように変更されます。 何らかの理由で新しいマウントが失敗した場合、ポッドは再起動しないため、正しく構成された資産の以前のフローも停止します。サブジェクト名とアプリケーション 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 シミュレーター ポッドを再起動します。 ポッド名は、aio-opc-opc.tcp-1-f95d76c54-w9v9c
のようになります。 ポッドを再起動するには、k9s
ツールを使用してポッドを強制終了するか、次のコマンドを実行します。
kubectl delete pod aio-opc-opc.tcp-1-f95d76c54-w9v9c -n azure-iot-operations
データフロー
クラスター内に作成されたデータフロー カスタム リソースは、Oerations Eperience UI に表示されません。 これは想定されたものであり、原因は Kubernetes を使用した Azure IoT Operations コンポーネントの管理がプレビュー段階で、エッジからクラウドへのリソース同期が現在サポートされていないためです。
カスタム Kafka エンドポイントに対する X.509 認証はまだサポートされていません。
スキーマを使用したメッセージの逆シリアル化と検証はまだサポートされていません。 ソース構成の中でスキーマを指定すると、Operations Experience ポータルでデータ ポイントの一覧を表示することはできますが、それらのデータ ポイントはスキーマに対して検証されません。
Operations Experience ポータル内で X.509 シークレットを作成すると、シークレットには誤ってエンコードされたデータが含まれます。 この問題を回避するには、Azure Key Vault を使用して複数行のシークレットを作成し、次に Operations Experience ポータル内でシークレットの一覧からそれを選択します。
複数の IoT Operations インスタンスを同じ Event Grid MQTT 名前空間に接続すると、クライアント ID の競合が原因で接続エラーが発生する場合があります。 クライアント ID は現在、データフロー リソース名から派生しており、デプロイにコードとしてのインフラストラクチャ (IaC) パターンを使用すると、生成されるクライアント ID が同一になる場合があります。 一時的な回避策としては、デプロイ テンプレート内のデータフロー名をランダムに生成してください。