共用方式為


在層級 4 叢集上設定 Azure IoT 分層網路管理 (預覽)

Azure IoT 分層網路管理 (預覽) 是支援 Azure IoT 作業的元件。 不過,它必須個別部署到最上層的網路層,以支援較低層中的 Azure IoT 作業。 在您的網路層最上層中 (通常是 ISA-95 網路架構的第 4 層),叢集和分層式網路管理服務具有直接網際網路存取權限。 設定完成後,分層網路管理(預覽版)服務便已準備好接收子層的網路流量,並將它轉送至 Azure Arc。

必要條件

符合下列在系統上個別部署分層式網路管理的最低需求。

在層級 4 中設定 Kubernetes 叢集

若要僅設定分層式網路管理,必要條件比 Azure IoT 操作部署更簡單。 您可以選擇在準備 Kubernetes 叢集中滿足 Azure IoT 操作的一般需求。

Microsoft 會驗證設定 AKS 邊緣程式集K3S Kubernetes 叢集的下列步驟。

準備一台 Ubuntu 電腦

  1. Ubuntu 22.04 LTS 是主機電腦的建議版本。

  2. 安裝 Helm 3.8.0 或更新版本。

  3. 安裝 Kubectl

  4. 安裝 Azure CLI。 如果您打算從遠端存取層級 3 叢集,可以直接將 Azure CLI 安裝到層級 4 電腦或另一部開發人員Jumpbox 電腦上。 如果您選擇從遠端存取 Kubernetes 叢集,以讓叢集主機保持乾淨,則在本文的其餘步驟中,您可以從開發人員電腦執行 kubectlaz" 相關命令。

    • 安裝 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 快速入門指南

    重要

    請務必使用 --disable=traefik 參數來停用 traefik。 否則,當您嘗試在後續步驟中為分層式網路管理服務配置公用 IP 時,可能會發生問題。

  2. 將 K3s 組態 yaml 檔案複製到 .kube/config

    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 作業支援的區域

    # 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. 在您的訂用帳戶中註冊必要的資源提供者:

    注意

    每個訂用帳戶只需要執行此步驟一次。 若要註冊資源提供者,您需要 /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 叢集,並在您先前步驟中建立的資源群組中進行管理:

    az connectedk8s connect -n $CLUSTER_NAME -l $LOCATION -g $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID
    

將分層式網路管理服務部署至叢集

一旦 Kubernetes 叢集已啟用 Arc,您就可以將分層式網路管理服務部署到叢集。

安裝分層式網路管理操作員

  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 命令來確認分層式網路管理操作員正在執行。

    kubectl get pods
    
    NAME                                   READY   STATUS    RESTARTS   AGE
    azedge-lnm-operator-598cc495c-5428j   1/1     Running   0          28h
    

設定分層式網路管理服務

建立分層式網路管理自訂資源。

  1. 依照指定建立 lnm-cr.yaml 檔案:

    • 若要進行偵錯或實驗,您可以將loglevel 參數的值變更為偵錯
    • 如需端點的詳細資訊,請參閱 Azure IoT 作業端點
    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
    
  2. 建立自訂資源以建立分層式網路管理執行個體。

    kubectl apply -f lnm-cr.yaml
    
  3. 檢視分層式網路管理 Kubernetes 服務:

    kubectl get services
    
    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 叢集中裝載分層網路管理時,才適用此步驟。

分層式網路管理部署會建立LoadBalancer 類型的 Kubernetes 服務。 若要確保服務可從 Kubernetes 叢集外部存取,您必須將基礎 Windows 主機的連接埠對應至分層式網路管理服務上的適當連接埠。

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,然後導向至其上執行的分層式網路管理服務。