你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
创建 Azure IoT 分层网络管理(预览版)的示例网络环境
要使用 Azure IoT 分层网络管理(预览版)服务,需要配置隔离的网络环境。 例如,ISA-95/Purdue 网络体系结构。 本页提供了一些示例,用于说明如何根据你想要实现隔离的方式设置测试环境。
- 物理分段 - 网络在物理上是分隔开的。 在这种情况下,分层网络管理(预览版)需要部署到双 NIC(网络接口卡)主机才能同时连接到面向 Internet 的网络和隔离网络。
- 逻辑分段 - 网络在逻辑上使用 VLAN、子网或防火墙等配置进行分段。 分层网络管理具有单个终结点,并且配置为对其自己的网络层和隔离层可见。
这两种方法都要求在隔离网络层中配置自定义 DNS,以将网络流量定向到上层的分层网络管理实例。
重要
分层网络管理文档中概述的网络环境是测试分层网络管理的示例。 并非有关如何为生产环境生成网络和群集拓扑的建议。
使用物理分段配置隔离网络
以下示例配置是一个简单的独立网络,其中包含最少的物理设备。
- 无线接入点用于设置本地网络,不提供 Internet 访问。
- 级别 4 群集是托管在连接到 Internet 和本地网络的双网络接口卡 (NIC) 物理计算机上的单节点群集。
- 级别 3 群集是物理计算机上托管的单节点群集。 此设备群集仅连接到本地网络。
分层网络管理部署到双 NIC 群集。 本地网络中的群集以代理身份连接到分层网络管理,以访问 Azure 和 Arc 服务。 此外,它需要本地网络中的自定义 DNS 来提供域名解析,并将流量指向分层网络管理。 有关详细信息,请参阅配置自定义 DNS。
使用逻辑分段配置隔离网络
下图演示了一个隔离的网络环境,其中每个级别在逻辑上都使用子网进行了分段。 在此测试环境中,每个级别都有多个群集。 群集可以是 AKS Edge Essentials 或 K3S。 级别 4 网络中的 Kubernetes 群集可直接访问 Internet。 级别 3 和更低级别的 Kubernetes 群集无法访问 Internet。
此测试设置中的多个网络级别是使用网络中的子网完成的:
- 级别 4 子网 (10.104.0.0/16) - 此子网有权访问 Internet。 所有请求都发送到 Internet 上的目标。 此子网具有具有 IP 地址为 10.104.0.10 的单个 Windows 11 计算机。
- 级别 3 子网 (10.103.0.0/16) - 此子网无权访问 Internet,配置为仅有权访问级别 4 中的 IP 地址 10.104.0.10。 此子网包含 IP 地址为 10.103.0.33 的 Windows 11 计算机和托管 DNS 服务器的 Linux 计算机。 DNS 服务器是使用配置自定义 DNS 中的步骤配置的。 DNS 配置中的所有域都必须映射到地址 10.104.0.10。
- 级别 2 子网 (10.102.0.0/16) - 与级别 3 一样,此子网无权访问 Internet。 它配置为仅有权访问级别 3 中的 IP 地址 10.103.0.33。 此子网包含 IP 地址为 10.102.0.28 的 Windows 11 计算机和托管 DNS 服务器的 Linux 计算机。 此网络中有一台 IP 地址为 10.102.0.28 的 Windows 11 计算机(节点)。 DNS 配置中的所有域都必须映射到地址 10.103.0.33。
有关设置此类网络环境的示例,请参阅以下示例。
包含最少硬件的逻辑分段示例
在此示例中,两台计算机都连接到一个接入点 (AP),该接入点连接到 Internet。 级别 4 主机可以访问 Internet。 通过 AP 的配置 (例如,防火墙或客户端控制),级别 3 主机受到阻止,无法访问 Internet。 由于两台计算机位于同一网络中,在级别 4 群集上托管的分层网络管理实例默认对级别 3 计算机和群集可见。 需要在本地网络中设置额外的自定义 DNS,以提供域名解析并将流量指向分层网络管理。 有关详细信息,请参阅配置自定义 DNS。
Azure 中的逻辑分段示例
在此示例中,使用 Azure 中的虚拟网络和 Linux 虚拟机创建了一个测试环境。
重要
虚拟环境仅用于探索和评估。 有关更多详细信息,请参阅 Azure IoT 操作支持的环境。
- 在 Azure 订阅中创建虚拟网络。 为至少两个层(级别 4 和级别 3)创建子网。
- 可以选择为 jumpbox 或开发人员计算机创建一个额外的子网,以便跨层远程访问计算机或群集。 如果计划创建两个以上的网络层,则此设置非常方便。 否则,可以将 jumpbox 计算机连接到级别 4 网络。
- 为每个级别创建网络安全组,并相应地附加到子网。
- 可以对级别 4 安全组使用默认值。
- 需要为级别 3(和更低级别)安全组配置其他入站和出站规则。
- 在级别 3 和级别 4 中创建 Linux VM。
- 有关 VM 的规范,请参阅支持的环境。
- 创建 VM 时,请将计算机连接到在前面的步骤中创建的子网。
- 跳过为 VM 创建安全组。
配置自定义 DNS
级别 3 和更低级别需要自定义 DNS。 它确保源自群集的网络流量的 DNS 解析指向父级分层网络管理实例。 在现有或生产环境中,将以下 DNS 解析合并到 DNS 设计中。 如果要为分层网络管理服务和 Azure IoT 操作设置测试环境,可以参考以下示例。
配置 CoreDNS
虽然可以通过多种不同的方式实现 DNS 设置,但此示例使用 CoreDNS(K3S 群集的默认 DNS 服务器)提供的扩展机制。 位于允许列表中的 URL(需要解析)将添加到 CoreDNS。
重要
CoreDNS 方法仅适用于级别 3 的 Ubuntu 主机上的 K3S 群集。
从级别 4 分层网络管理创建 configmap
级别 4 群集和分层网络管理准备就绪后,请执行以下步骤。
使用以下命令确认分层网络管理服务的 IP 地址:
kubectl get services -n azure-iot-operations
输出应如下所示。 服务的 IP 地址为
20.81.111.118
。NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE lnm-level4 LoadBalancer 10.0.141.101 20.81.111.118 80:30960/TCP,443:31214/TCP 29s
使用以下命令查看配置映射:
kubectl get cm -n azure-iot-operations
输出应如以下示例所示:
NAME DATA AGE aio-lnm-level4-config 1 50s aio-lnm-level4-client-config 1 50s
自定义
aio-lnm-level4-client-config
。 需要此配置作为级别 3 设置的一部分,以便将流量从级别 3 群集转发到顶级分层网络管理实例。# set the env var PARENT_IP_ADDR to the ip address of level 4 LNM instance. export PARENT_IP_ADDR="20.81.111.118" # run the script to generate a config map yaml kubectl get cm aio-lnm-level4-client-config -n azure-iot-operations -o yaml | yq eval '.metadata = {"name": "coredns-custom", "namespace": "kube-system"}' -| sed 's/PARENT_IP/'"$PARENT_IP_ADDR"'/' > configmap-custom-level4.yaml
此步骤创建名为
configmap-custom-level4.yaml
的文件
配置 K3S 的级别 3 CoreDNS
设置 K3S 群集并将其移动到级别 3 隔离层后,使用之前生成的自定义客户端配置来配置级别 3 K3S 的 CoreDNS。
将
configmap-custom-level4.yaml
复制到级别 3 主机,或复制到远程访问群集的系统。运行以下命令:
# Create a config map called coredns-custom in the kube-system namespace kubectl apply -f configmap-custom-level4.yaml # Restart coredns kubectl rollout restart deployment/coredns -n kube-system # validate DNS resolution kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- nslookup east.servicebus.windows.net # You should see the following output. kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- nslookup east.servicebus.windows.net Server: 10.43.0.10 Address 1: 10.43.0.10 kube-dns.kube-system.svc.cluster.local Name: east.servicebus.windows.net Address 1: 20.81.111.118 pod "busybox" deleted # Note: confirm that the resolved ip address matches the ip address of the level 4 Layered Network Management instance.
上一步将 DNS 配置设置为将群集中的允许列表 URL 解析为级别 4。 为确保群集外部的 DNS 执行相同的操作,需要将系统解析配置为将流量转发到 K3S 群集内的 CoreDNS。 在 K3S 主机上运行以下命令:创建以下目录:
sudo mkdir /etc/systemd/resolved.conf.d
创建包含以下内容的名为
lnm.conf
的文件。 IP 地址应该是 kube-dns 服务在 kube-system 命名空间中运行的级别 3 群集 IP 地址。[Resolve] DNS=<PUT KUBE-DNS SERVICE IP HERE> DNSStubListener=no
重启 DNS 解析程序:
sudo systemctl restart systemd-resolved