在層級 4 叢集上設定 Azure IoT 分層網路管理 (預覽)
Azure IoT 分層網路管理 (預覽) 是支援 Azure IoT 作業的元件。 不過,它必須個別部署到最上層的網路層,以支援較低層中的 Azure IoT 作業。 在您的網路層最上層中 (通常是 ISA-95 網路架構的第 4 層),叢集和分層式網路管理服務具有直接網際網路存取權限。 設定完成後,分層網路管理(預覽版)服務便已準備好接收子層的網路流量,並將它轉送至 Azure Arc。
必要條件
符合下列在系統上個別部署分層式網路管理的最低需求。
- AKS 邊緣程式集需求和支援矩陣中的 AKS 邊緣程式集 - Arc 連線叢集和 GitOps 類別
- K3S Kubernetes 叢集 - 已啟用 Azure Arc 的 Kubernetes 系統需求
在層級 4 中設定 Kubernetes 叢集
若要僅設定分層式網路管理,必要條件比 Azure IoT 操作部署更簡單。 您可以選擇在準備 Kubernetes 叢集中滿足 Azure IoT 操作的一般需求。
Microsoft 會驗證設定 AKS 邊緣程式集和 K3S Kubernetes 叢集的下列步驟。
準備一台 Ubuntu 電腦
Ubuntu 22.04 LTS 是主機電腦的建議版本。
安裝 Helm 3.8.0 或更新版本。
安裝 Kubectl。
安裝 Azure CLI。 如果您打算從遠端存取層級 3 叢集,可以直接將 Azure CLI 安裝到層級 4 電腦或另一部開發人員或 Jumpbox 電腦上。 如果您選擇從遠端存取 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 快速入門指南 。
重要
請務必使用
--disable=traefik
參數來停用 traefik。 否則,當您嘗試在後續步驟中為分層式網路管理服務配置公用 IP 時,可能會發生問題。將 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 啟用叢集
使用 Azure CLI 登入。 若要避免稍後的權限問題,請務必使用瀏覽器視窗以互動方式登入:
az login
設定安裝程式步驟的環境變數。 以您選擇的有效值或名稱取代
<>
中的值。CLUSTER_NAME
和RESOURCE_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>"
設定所有指令的 Azure 訂用帳戶內容:
az account set -s $SUBSCRIPTION_ID
在您的訂用帳戶中註冊必要的資源提供者:
注意
每個訂用帳戶只需要執行此步驟一次。 若要註冊資源提供者,您需要
/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 叢集,並在您先前步驟中建立的資源群組中進行管理:
az connectedk8s connect -n $CLUSTER_NAME -l $LOCATION -g $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID
將分層式網路管理服務部署至叢集
一旦 Kubernetes 叢集已啟用 Arc,您就可以將分層式網路管理服務部署到叢集。
安裝分層式網路管理操作員
執行下列命令。 將預留位置
<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 命令來確認分層式網路管理操作員正在執行。
kubectl get pods
NAME READY STATUS RESTARTS AGE azedge-lnm-operator-598cc495c-5428j 1/1 Running 0 28h
設定分層式網路管理服務
建立分層式網路管理自訂資源。
依照指定建立
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
建立自訂資源以建立分層式網路管理執行個體。
kubectl apply -f lnm-cr.yaml
檢視分層式網路管理 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,然後導向至其上執行的分層式網路管理服務。