クイックスタート: Azure 環境でクラスターを Arc 対応にするように Azure IoT Layered Network Management (プレビュー) を構成する
このクイックスタートでは、レベル 4 およびレベル 3 の Purdue ネットワーク上に Azure IoT Layered Network Management (プレビュー) を設定します。 ネットワーク レベル 4 にはインターネット アクセスがあり、レベル 3 にはありません。 トラフィックをレベル 3 から Azure にルーティングするように Layered Network Management (プレビュー) を構成します。 最後に、インターネットに直接接続されていない場合でも、レベル 3 で K3S クラスターを Arc 対応にできます。
- Layered Network Management がデプロイされた レベル 4 のAKS クラスター。
- レベル 3 は、レベル 4 の Layered Network Management インスタンスを使用して Azure への接続を実現する Linux VM 上で実行されている K3S クラスターです。 レベル 3 ネットワークは、ポート 443 および 8084 でレベル 4 ネットワークへの送信アクセスを持つよう構成されています。 その他の送信アクセスはすべて無効になっています。
Layered Network Management アーキテクチャでは、許可リストに載せられた URL がレベル 4 ネットワークに再ポイントされる、レベル 3 ネットワーク上の DNS 構成が必要です。 この例では、このセットアップは、K3S に付属する既定の DNS 解決メカニズムである CoreDNS 上に構築された自動セットアップを使用して実現されます。
前提条件
これらの前提条件は、階層型ネットワーク管理を個別にデプロイし、子レベルのクラスターを Arc 対応にする場合にのみ適用されます。
- AKS クラスター
- Azure Linux Ubuntu 22.04.3 LTS 仮想マシン
- インターネット、およびレベル 3 ネットワークとレベル 4 ネットワークの両方にアクセスできるジャンプボックスまたはセットアップ マシン
Layered Network Management (プレビュー) を AKS クラスターにデプロイする
こちらの手順では、AKS クラスターに Layered Network Management をデプロイします。 クラスターは ISA-95 モデルの最上位レイヤーです。 このセクションの最後には、下の Azure Arc 対応クラスターからのトラフィックを受け入れ、Azure IoT Operations サービスのデプロイをサポートする準備ができている Layered Network Management インスタンスを持つことになります。
「クラスターに接続する」の手順に従って、AKS クラスター ジャンプボックスを管理するように
kubectl
を構成します。次の Azure CLI コマンドを使用して、Layered Network Management オペレーターをインストールします。
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 get pods
出力は次の例のようになります。
NAME READY STATUS RESTARTS AGE aio-lnm-operator-7db49dc9fd-kjf5x 1/1 Running 0 78s
次の内容を含む level4.yaml という名前のファイルを作成して、Layered Network Management カスタム リソースを作成します。
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: "management.azure.com" destinationType: external - destinationUrl: "*.dp.kubernetesconfiguration.azure.com" destinationType: external - destinationUrl: "login.microsoftonline.com" destinationType: external - destinationUrl: "*.login.microsoft.com" destinationType: external - destinationUrl: "login.windows.net" destinationType: external - destinationUrl: "mcr.microsoft.com" destinationType: external - destinationUrl: "*.data.mcr.microsoft.com" destinationType: external - destinationUrl: "gbl.his.arc.azure.com" destinationType: external - destinationUrl: "*.his.arc.azure.com" destinationType: external - destinationUrl: "k8connecthelm.azureedge.net" destinationType: external - destinationUrl: "guestnotificationservice.azure.com" destinationType: external - destinationUrl: "*.guestnotificationservice.azure.com" destinationType: external - destinationUrl: "sts.windows.net" destinationType: external - destinationUrl: "k8sconnectcsp.azureedge.net" destinationType: external - destinationUrl: "*.servicebus.windows.net" destinationType: external - destinationUrl: "graph.microsoft.com" destinationType: external - destinationUrl: "*.arc.azure.net" destinationType: external - destinationUrl: "*.obo.arc.azure.com" destinationType: external - destinationUrl: "linuxgeneva-microsoft.azurecr.io" destinationType: external - destinationUrl: "graph.windows.net" destinationType: external - destinationUrl: "*.azurecr.io" destinationType: external - destinationUrl: "*.blob.core.windows.net" destinationType: external - destinationUrl: "*.vault.azure.net" destinationType: external - destinationUrl: "*.blob.storage.azure.net" destinationType: external sourceIpRange: - addressPrefix: "0.0.0.0" prefixLen: 0
level4.yaml ファイルに基づいて Layered Network Management インスタンスを作成するには、次を実行します。
kubectl apply -f level4.yaml
この手順では、n 個のポッド、1 つのサービス、2 つの構成マップが作成されます。 n は、カスタム リソース内のレプリカの数に基づきます。
インスタンスを検証するには、次を実行します。
kubectl get pods
出力は次のようになります。
NAME READY STATUS RESTARTS AGE aio-lnm-operator-7db49dc9fd-kjf5x 1/1 Running 0 78s aio-lnm-level4-7598574bf-2lgss 1/1 Running 0 4s
サービスを表示するには、次を実行します。
kubectl get services
出力は次の例のようになります。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE aio-lnm-level4 LoadBalancer 10.0.141.101 20.81.111.118 80:30960/TCP,443:31214/TCP 29s
構成マップを表示するには、つぎを実行します。
kubectl get cm
出力は次の例のようになります。
NAME DATA AGE aio-lnm-level4-config 1 50s aio-lnm-level4-client-config 1 50s
この例では、Layered Network Management インスタンスは、外部 IP
20.81.111.118
でトラフィックを受け入れる準備が整っています。
レベル 3 クラスターの準備
レベル 3 では、Linux 仮想マシン上に K3S Kubernetes クラスターを作成します。 クラスターの設定を簡略化するには、インターネット アクセスができる Azure Linux Ubuntu 22.04.3 LTS VM を作成し、ジャンプボックスから ssh を有効にします。
ヒント
分離されたネットワークでセットアップを開始する、より現実的なシナリオでは、ソリューション用の事前構築済みイメージ、または K3S の Air-Gap Install アプローチを使ってマシンを準備できます。
Linux VM で、次のコマンドを使用して K3S をインストールして構成します。
curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644
レベル 3 のネットワークの分離を構成します。 以下の手順を使って、レベル 4 の Layered Network Management にのみトラフィックを送信するようにレベル 3 クラスターを構成します。
- VM のネットワーク インターフェイスのネットワーク セキュリティ グループを参照します。
- レベル 3 仮想マシンからのすべての送信トラフィックを拒否する、追加の送信セキュリティ規則を追加します。
- 最も優先度の高い別のアウトバウンド規則を追加して、ポート 443 と 8084 でレベル 4 AKS クラスターの IP への送信を許可します。
分離レイヤー内のクラスターを Arc にプロビジョニングする
以下の手順では、レベル 4 の階層型ネットワーク管理インスタンスを使ってレベル 3 クラスターを Arc 対応にします。
クラスターにアクセスするための kubectl を持つようにジャンプボックスを設定します。
Linux VM で構成ファイルを生成します。
k3s kubectl config view --raw > config.level3
ジャンプボックスで、
config.level3
ファイルを~/.kube
ディレクトリにコピーし、config
に名前を変更して、レベル 3 K3S クラスターへの kubectl アクセスを設定します。 構成ファイル内のサーバー エントリは、レベル 3 VM の IP アドレスまたはドメイン名に設定する必要があります。許可リストに載せる URL を追加するため、CoreDNS (K3S クラスター用の既定の DNS サーバー) によって提供される拡張メカニズムを使用するには、「CoreDNS を構成する」を参照してください。
ジャンプボックスで次のコマンドを実行して、クラスターを Arc に接続します。この手順には Azure CLI が必要です。 必要に応じて、Az CLI をインストールします。
az login az account set --subscription <your Azure subscription ID> az connectedk8s connect -g <your resource group name> -n <your connected cluster name>
connectedk8s の詳細については、「クイック スタート: 既存の Kubernetes クラスターを Azure Arc に接続する」を参照してください。
次の例のような出力結果が表示されます。
This operation might take a while... The required pre-checks for onboarding have succeeded. Azure resource provisioning has begun. Azure resource provisioning has finished. Starting to install Azure arc agents on the Kubernetes cluster. { "agentPublicKeyCertificate": "MIICCgKCAgEAmU+Pc55pc3sOE2Jo5JbAdk+2OprUziCbgfGRFfbMHO4dT7A7LDaDk7tWwvz5KwUt66eMrabI7M52H8xXvy1j7YwsMwR5TaSeHpgrUe1/4XNYKa6SN2NbpXIXA3w4aHgtKzENm907rYMgTO9gBJEZNJpqsfCdb3E7AHWQabUe9y9T8aub+arBHLQ3furGkv8JnN2LCPbvLnmeLfc1J5 .... ....
Kubernetes クラスターが Arc 対応になり、az connectedk8s connect コマンドで指定したリソース グループに一覧表示されるようになりました。 Azure portal を使用して、このクラスターのプロビジョニングを検証することもできます。 このクイック スタートは、Kubernetes クラスターで Arc を有効にする Layered Network Management の機能について説明するものです。 これで、分離ネットワーク内で、このクラスターに組み込まれている Arc エクスペリエンスを試すことができます。
次のステップ
- Azure IoT Operations をデプロイするために分離されたネットワークでクラスターを設定する方法については、分離されたネットワークで Azure IoT Operations を有効にする Layered Network Management サービスの構成に関する記事を参照してください
- Azure IoT Operations 関連のシナリオのための包括的なネットワーク環境の設定の詳細については、サンプル ネットワーク環境の作成に関する記事を参照してください