レベル 4 のクラスターで Azure IoT Layered Network Management プレビューを構成する
重要
Azure Arc によって実現されている Azure IoT Operations プレビューは、現在プレビュー段階です。 運用環境ではこのプレビュー ソフトウェアを使わないでください。
Azure IoT Operations の一般公開リリースが提供されたときには、新規インストールをデプロイすることが必要になります。 プレビュー インストールからのアップグレードはできません。
ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。
Azure IoT Layered Network Management プレビューは、Azure IoT Operations プレビューをサポートするコンポーネントです。 ただし、下層の Azure IoT Operations のサポートのために、ネットワーク上層に個々にデプロイする必要があります。 ネットワーク レイヤーの最上位レベル (通常は ISA-95 ネットワーク アーキテクチャのレベル 4) では、クラスターと Layered Network Management サービスは直接インターネット にアクセスできます。 セットアップが完了すると、Layered Network Management サービスは、子レイヤーからネットワーク トラフィックを受信する準備が整い、Azure Arc に転送します。
前提条件
Layered Network Management をシステムに個々にデプロイするには、次の最小要件を満たす必要があります。
- AKS Edge Essentials - 「AKS Edge Essentials の要件とサポート マトリックス」の「Arc に接続されたクラスターと GitOps」カテゴリ
- K3S Kubernetes クラスター - 「Azure Arc 対応 Kubernetes システム要件」
レベル 4 で Kubernetes クラスターを設定する
Layered Network Management のみを設定する場合、Azure IoT Operations のデプロイよりも前提条件は簡単です。 Kubernetes クラスターの準備に関するページの Azure IoT Operations の一般要件を満たしていなくてもかまいません。
AKS Edge Essentials と K3S Kubernetes クラスターを設定するための次のステップは、Microsoft によって検証済みです。
Ubuntu マシンを準備する
Ubuntu 22.04 LTS が、ホスト コンピューターに推奨されるバージョンです。
Helm 3.8.0 以降をインストールします。
Kubectl をインストールします。
Azure CLI をインストールします。 レベル 3 クラスターにリモートでアクセスする予定の場合は、Azure CLI をレベル 4 コンピューターまたは別の "開発者" または "ジャンプボックス" コンピューターに直接インストールできます。 クラスター ホストをクリーンに保つために Kubernetes クラスターにリモートでアクセスすることを選択した場合、この記事の残りの手順では "開発者" コンピューターから kubectl および az 関連コマンドを実行します。
Azure CLI をインストールします。 「Linux に Azure CLI をインストールする」の手順に従います。
connectedk8s およびその他の拡張機能をインストールします。
az extension add --name connectedk8s az extension add --name k8s-extension
K3S クラスターを作成する
次のコマンドで K3S をインストールします。
curl -sfL https://get.k3s.io | sh -s - --disable=traefik --write-kubeconfig-mode 644
詳細については、K3s のクイックスタート ガイドを参照してください。
重要
treafik を無効にするには、必ず
--disable=traefik
パラメーターを使用してください。 それ以外の場合は、後の手順でレイヤード ネットワーク管理サービスにパブリック IP を割り当てようとするときに問題が発生する可能性があります。.kube/config
に K3s の構成 yaml ファイルをコピーします。mkdir ~/.kube cp ~/.kube/config ~/.kube/config.back sudo KUBECONFIG=~/.kube/config:/etc/rancher/k3s/k3s.yaml kubectl config view --flatten > ~/.kube/merged mv ~/.kube/merged ~/.kube/config chmod 0600 ~/.kube/config export KUBECONFIG=~/.kube/config #switch to k3s context kubectl config use-context default
クラスターを Arc 対応にする
Azure CLI を使用してサインインします。 後でアクセス許可の問題が発生しないように、ブラウザー ウィンドウを使用して対話形式でサインインすることが重要です。
az login
設定ステップの環境変数を設定します。
<>
の値を、選択した有効な値または名前に置き換えます。CLUSTER_NAME
とRESOURCE_GROUP
は、指定した名前に基づいて作成されます。LOCATION
の選択については、Azure IoT Operations でサポートされているリージョン を参照してください。# Id of the subscription where your resource group and Arc-enabled cluster will be created $SUBSCRIPTION_ID = "<subscription-id>" # Azure region where the created resource group will be located $LOCATION = "<region>" # Name of a new resource group to create which will hold the Arc-enabled cluster and Azure IoT Operations resources $RESOURCE_GROUP = "<resource-group-name>" # Name of the Arc-enabled cluster to create in your resource group $CLUSTER_NAME = "<cluster-name>"
すべてのコマンドの Azure サブスクリプション コンテキストを設定します。
az account set -s $SUBSCRIPTION_ID
サブスクリプションに必要なリソース プロバイダーを登録します。
Note
この手順は、サブスクリプションごとに 1 回だけ実行する必要があります。 リソース プロバイダーを登録するには、サブスクリプションの共同作成者および所有者のロール内に含まれる、
/register/action
操作を行うためのアクセス許可が必要です。 詳細については、「Azure リソース プロバイダーと種類」を参照してください。az provider register -n "Microsoft.ExtendedLocation" az provider register -n "Microsoft.Kubernetes" az provider register -n "Microsoft.KubernetesConfiguration"
az group create コマンドを使用して、Azure サブスクリプションにリソース グループを作成し、すべてのリソースを保存します。
az group create --location $LOCATION --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID
az connectedk8s connect コマンドを使用して、Kubernetes クラスターを Arc 対応にし、前の手順で作成したリソース グループで管理します。
az connectedk8s connect -n $CLUSTER_NAME -l $LOCATION -g $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID
Layered Network Management プレビュー サービスをクラスターにデプロイする
Kubernetes クラスターが Arc 対応になったら、Layered Network Management サービスをクラスターにデプロイできます。
Layered Network Management プレビュー オペレーターをインストールする
次のコマンドを実行します。 プレースホルダー
<RESOURCE GROUP>
と<CLUSTER NAME>
を、前の手順の Arc オンボード情報に置き換えます。az login az k8s-extension create --resource-group <RESOURCE GROUP> --name kind-lnm-extension --cluster-type connectedClusters --cluster-name <CLUSTER NAME> --auto-upgrade false --extension-type Microsoft.IoTOperations.LayeredNetworkManagement --version 0.1.0-preview --release-train preview
kubectl コマンドを使用して、Layered Network Management オペレーターが実行されていることを確認します。
kubectl get pods
NAME READY STATUS RESTARTS AGE azedge-lnm-operator-598cc495c-5428j 1/1 Running 0 28h
Layered Network Management プレビュー サービスを構成する
Layered Network Management カスタム リソースを作成します。
以下の指定に従って
lnm-cr.yaml
ファイルを作成します。apiVersion: layerednetworkmgmt.iotoperations.azure.com/v1beta1 kind: Lnm metadata: name: level4 namespace: default spec: image: pullPolicy: IfNotPresent repository: mcr.microsoft.com/oss/envoyproxy/envoy-distroless tag: v1.27.0 replicas: 1 logLevel: "debug" openTelemetryMetricsCollectorAddr: "http://aio-otel-collector.azure-iot-operations.svc.cluster.local:4317" level: 4 allowList: enableArcDomains: true domains: - destinationUrl: "*.arc.azure.net" destinationType: external - destinationUrl: "*.data.mcr.microsoft.com" destinationType: external - destinationUrl: "*.dp.kubernetesconfiguration.azure.com" destinationType: external - destinationUrl: "*.guestnotificationservice.azure.com" destinationType: external - destinationUrl: "*.his.arc.azure.com" destinationType: external - destinationUrl: "*.login.microsoft.com" destinationType: external - destinationUrl: "*.login.microsoftonline.com" destinationType: external - destinationUrl: "*.obo.arc.azure.com" destinationType: external - destinationUrl: "*.servicebus.windows.net" destinationType: external - destinationUrl: "graph.microsoft.com" destinationType: external - destinationUrl: "login.windows.net" destinationType: external - destinationUrl: "management.azure.com" destinationType: external - destinationUrl: "mcr.microsoft.com" destinationType: external - destinationUrl: "sts.windows.net" destinationType: external - destinationUrl: "*.ods.opinsights.azure.com" destinationType: external - destinationUrl: "graph.windows.net" destinationType: external - destinationUrl: "msit-onelake.pbidedicated.windows.net" destinationType: external - destinationUrl: "*.azurecr.io" destinationType: external - destinationUrl: "*.azureedge.net" destinationType: external - destinationUrl: "*.blob.core.windows.net" destinationType: external - destinationUrl: "*.prod.hot.ingestion.msftcloudes.com" destinationType: external - destinationUrl: "*.prod.microsoftmetrics.com" destinationType: external - destinationUrl: "adhs.events.data.microsoft.com" destinationType: external - destinationUrl: "dc.services.visualstudio.com" destinationType: external - destinationUrl: "go.microsoft.com" destinationType: external - destinationUrl: "packages.microsoft.com" destinationType: external - destinationUrl: "www.powershellgallery.com" destinationType: external - destinationUrl: "*.gw.arc.azure.com" destinationType: external - destinationUrl: "*.gcs.prod.monitoring.core.windows.net" destinationType: external - destinationUrl: "*.prod.warm.ingest.monitor.core.windows.net" destinationType: external - destinationUrl: "*.prod.hot.ingest.monitor.core.windows.net" destinationType: external - destinationUrl: "azure.archive.ubuntu.com" destinationType: external - destinationUrl: "crl.microsoft.com" destinationType: external - destinationUrl: "*.table.core.windows.net" destinationType: external - destinationUrl: "*.blob.storage.azure.net" destinationType: external - destinationUrl: "*.docker.com" destinationType: external - destinationUrl: "*.docker.io" destinationType: external - destinationUrl: "*.googleapis.com" destinationType: external - destinationUrl: "github.com" destinationType: external - destinationUrl: "collect.traefik.io" destinationType: external - destinationUrl: "contracts.canonical.com" destinationType: external - destinationUrl: "database.clamav.net" destinationType: external - destinationUrl: "esm.ubuntu.com" destinationType: external - destinationUrl: "livepatch.canonical.com" destinationType: external - destinationUrl: "motd.ubuntu.com" destinationType: external - destinationUrl: "update.traefik.io" destinationType: external sourceIpRange: - addressPrefix: "0.0.0.0" prefixLen: 0
デバッグまたは実験の場合は、loglevel パラメーターの値を debug に変更できます。
カスタム リソースを作成して、Layered Network Management インスタンスを作成します。
kubectl apply -f lnm-cr.yaml
Layered Network Management Kubernetes サービスを表示します。
kubectl get services -n azure-iot-operations
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE lnm-level-4 LoadBalancer 10.43.91.54 192.168.0.4 80:30530/TCP,443:31117/TCP,10000:31914/TCP 95s
AKS Edge Essentials 用に iptables の構成を追加する
重要
この手順は、AKS Edge Essentials クラスターで Layered Network Management をホストする場合にのみ適用されます。
Layered Network Management のデプロイでは、LoadBalancer 型の Kubernetes サービスが作成されます。 Kubernetes クラスターの外部からサービスに確実にアクセスできるようにするには、基になる Windows ホストのポートを、Layered Network Management サービス上の適切なポートにマップする必要があります。
netsh interface portproxy add v4tov4 listenport=443 listenaddress=0.0.0.0 connectport=443 connectaddress=192.168.0.4
netsh interface portproxy add v4tov4 listenport=10000 listenaddress=0.0.0.0 connectport=10000 connectaddress=192.168.0.4
これらのコマンドが正常に実行されると、Windows ホスト上のポート 443 と 10000 で受信したトラフィックが Kubernetes サービスにルーティングされます。 子レベルのネットワーク レイヤー用にカスタマイズされた DNS を構成する場合は、ネットワーク トラフィックをこの Windows ホストの IP に転送し、その上で実行されているLayered Network Management サービスに転送します。