レベル 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 をシステムに個々にデプロイするには、次の最小要件を満たす必要があります。

レベル 4 で Kubernetes クラスターを設定する

Layered Network Management のみを設定する場合、Azure IoT Operations のデプロイよりも前提条件は簡単です。 Kubernetes クラスターの準備に関するページの Azure IoT Operations の一般要件を満たしていなくてもかまいません。

AKS Edge EssentialsK3S Kubernetes クラスターを設定するための次のステップは、Microsoft によって検証済みです。

Ubuntu マシンを準備する

  1. Ubuntu 22.04 LTS が、ホスト コンピューターに推奨されるバージョンです。

  2. Helm 3.8.0 以降をインストールします。

  3. Kubectl をインストールします。

  4. 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 クラスターを作成する

  1. 次のコマンドで K3S をインストールします。

    curl -sfL https://get.k3s.io | sh -s - --disable=traefik --write-kubeconfig-mode 644
    

    詳細については、K3s のクイックスタート ガイドを参照してください。

    重要

    treafik を無効にするには、必ず --disable=traefik パラメーターを使用してください。 それ以外の場合は、後の手順でレイヤード ネットワーク管理サービスにパブリック IP を割り当てようとするときに問題が発生する可能性があります。

  2. .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 対応にする

  1. Azure CLI を使用してサインインします。 後でアクセス許可の問題が発生しないように、ブラウザー ウィンドウを使用して対話形式でサインインすることが重要です。

    az login
    
  2. 設定ステップの環境変数を設定します。 <> の値を、選択した有効な値または名前に置き換えます。 CLUSTER_NAMERESOURCE_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>"
    
  3. すべてのコマンドの Azure サブスクリプション コンテキストを設定します。

    az account set -s $SUBSCRIPTION_ID
    
  4. サブスクリプションに必要なリソース プロバイダーを登録します。

    Note

    この手順は、サブスクリプションごとに 1 回だけ実行する必要があります。 リソース プロバイダーを登録するには、サブスクリプションの共同作成者および所有者のロール内に含まれる、/register/action 操作を行うためのアクセス許可が必要です。 詳細については、「Azure リソース プロバイダーと種類」を参照してください。

    az provider register -n "Microsoft.ExtendedLocation"
    az provider register -n "Microsoft.Kubernetes"
    az provider register -n "Microsoft.KubernetesConfiguration"
    
  5. az group create コマンドを使用して、Azure サブスクリプションにリソース グループを作成し、すべてのリソースを保存します。

    az group create --location $LOCATION --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID
    
  6. 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 プレビュー オペレーターをインストールする

  1. 次のコマンドを実行します。 プレースホルダー <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
    
  2. 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 カスタム リソースを作成します。

  1. 以下の指定に従って 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 に変更できます。

  2. カスタム リソースを作成して、Layered Network Management インスタンスを作成します。

    kubectl apply -f lnm-cr.yaml
    
  3. 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 サービスに転送します。