你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在级别 4 群集上配置 Azure IoT 分层网络管理(预览版)
Azure IoT 分层网络管理(预览版)是一个支持 Azure IoT 操作的组件。 但是,需要将其单独部署到顶层网络层,以支持下层中的 Azure IoT 操作。 在网络层的顶层(通常是 ISA-95 网络体系结构的第 4 级),群集和分层网络管理服务可以直接访问 Internet。 设置完成后,分层网络管理(预览版)服务已准备好接收子层的网络流量并将其转发到 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命令连接到已启用 Arc 的 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 参数的值更改为 debug。
- 有关终结点的更多详情,请参阅 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 边缘软件包添加 iptables 配置
重要
仅当在 AKS 边缘软件包群集中托管分层网络管理时,此步骤才适用。
分层网络管理部署创建 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,然后定向到其上运行的分层网络管理服务。