共用方式為


為 Azure IoT 分層網路管理建立範例網路環境 (預覽)

若要使用 Azure IoT 分層網路管理(預覽版)服務,您必須設定隔離的網路環境。 例如,ISA-95/Purdue 網路架構。 此頁面提供一些設定測試環境的範例,視您想要如何達到隔離而定。

  • 實體分割 - 網路會實際分隔。 在此情況下,分層網路管理(預覽版)必須部署到雙 NIC(網路適配器)主機,才能連線到因特網對向網路和隔離網路。
  • 邏輯分割 - 網路會以邏輯方式區隔 VLAN、子網或防火牆等設定。 分層式網路管理具有單一端點,並設定為對自己的網路層和隔離層可見。

這兩種方法都需要在隔離的網路層中設定自訂 DNS,以將網路流量導向上層的分層式網路管理執行個體。

重要

分層式網路管理文件中概述的網路環境是測試分層式網路管理的範例。 不建議以此方式建置網路和叢集拓撲以用於生產環境。

使用實體分割設定隔離網路

下列範例設定是具有最小實體裝置的簡單隔離網路。

實體裝置隔離網路設定的圖表。

  • 無線存取點用於設定區域網路,不會提供網際網路存取。
  • 層級 4 叢集是裝載在雙網路介面卡 (NIC) 實體機器上的單一節點叢集,會連線到網際網路和區域網路。
  • 層級 3 叢集是另一個裝載在實體機器上的單一節點叢集。 此裝置叢集只會連線到區域網路。

分層式網路管理將部署至雙 NIC 叢集。 區域網路中的叢集會以 Proxy 連線到分層式網路管理,以存取 Azure 和 Arc 服務。 此外,還需要區域網路中的自訂 DNS 來提供功能變數名稱解析,並將流量指向分層式網路管理。 如需詳細資訊,請參閱設定自訂 DNS

使用邏輯分割設定隔離網路

下圖說明隔離的網路環境,其中每個層級會以邏輯方式區隔子網路。 在此測試環境中,每個層級都有一個多重叢集。 叢集可以是 AKS 邊緣程式集或 K3S。 層級 4 網路中的 Kubernetes 叢集可直接存取網際網路。 層級 3 以下的 Kubernetes 叢集無法存取網際網路。

邏輯分割隔離網路的圖表。

此測試設定中的多個網路層級是使用網路內的子網路來完成:

  • 層級 4 子網路 (10.104.0.0/16) - 此子網路可以存取網際網路。 所有要求都會傳送至網際網路上的目的地。 此子網路有一部 Windows 11 電腦,IP 位址為 10.104.0.10。
  • 層級 3 子網路 (10.103.0.0/16) - 此子網路無法存取網際網路,且設定為只能存取層級 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,此子網路無法存取網際網路。 它設定為只能存取層級 3 中的 IP 位址 10.103.0.33。 此子網路包含 IP 位址為 10.102.0.28 的 Windows 11 電腦,以及裝載 DNS 伺服器的 Linux 電腦。 此網路中有一部 Windows 11 電腦 (節點),IP 位址為 10.102.0.28。 DNS 設定中的所有網域都必須對應至位址 10.103.0.33。

請參閱下列範例,以設定此類型的網路環境。

使用最低硬體的邏輯分割範例

在此範例中,這兩部電腦都連線到存取點 (AP),且存取點連線到網際網路。 層級 4 主電腦可以存取網際網路。 層級 3 主機因 AP 的設定而無法存取網際網路。 例如,防火牆或用戶端控制項。 由於這兩部機器都位於相同的網路中,層級 4 叢集上裝載的分層式網路管理執行個體預設對層級 3 的機器和叢集可見。 此外,還需要在區域網路中設定額外的自訂 DNS,以提供網域名稱解析,並將流量指向分層式網路管理。 如需詳細資訊,請參閱設定自訂 DNS

邏輯隔離網路設定的圖表。

Azure 中的邏輯分割範例

在此範例中,建立的測試環境在 Azure 中有虛擬網路Linux 虛擬機器

重要

虛擬環境僅供探索和評估。 如需詳細資訊,請參閱 適用於 Azure IoT 作業的支持環境

  1. 在 Azure 訂用帳戶中建立虛擬網路。 為至少兩個層級 (層級 4 和層級 3) 建立子網路。 Azure 中虛擬網路的螢幕擷取畫面。
  2. 您可以選擇為 jumpbox開發人員機器建立額外的子網路,以跨層遠端存取機器或叢集。 如果您打算建立兩個以上的網路層,此設定會很方便。 否則,您可以將 Jumpbox 機器連線到層級 4 網路。
  3. 為每個層級建立網路安全性群組,並據以連結至子網路。
  4. 您可以使用層級 4 安全性群組的預設值。
  5. 您必須為層級 3 (和較低層級) 安全性群組設定其他輸入和輸出規則。
    • 新增輸入和輸出安全性規則,以拒絕所有網路流量。
    • 以較高的優先順序,新增輸入和輸出安全性規則,以允許來自層級 4 子網路 IP 範圍的網路流量。
    • [選擇性] 如果您建立 jumpbox 子網路,請建立輸入和輸出規則,以允許往返此子網路的流量。 層級 3 安全性群組的螢幕擷取畫面。
  6. 在層級 3 和層級 4 中建立 Linux VM。

設定自訂 DNS

層級 3 以下層級需要自訂 DNS。 其可確保源自叢集之網路流量的 DNS 解析會指向父層級分層式網路管理執行個體。 在現有或生產環境中,將下列 DNS 解析併入 DNS 設計中。 如果您想要為分層式網路管理服務和 Azure IoT 操作設定測試環境,您可以參考下列範例。

設定 CoreDNS

雖然 DNS 設定可以達成許多不同的方式,但此範例會使用 CoreDNS 所提供的擴充機制,這是 K3S 叢集的預設 DNS 伺服器。 允許清單中需要解析的 URL 會新增至 CoreDNS。

重要

CoreDNS 方法僅適用於層級 3 上 Ubuntu 主機上的 K3S 叢集。

從層級 4 分層式網路管理建立 configmap

在層級 4 叢集和分層式網路管理準備就緒之後,請執行下列步驟。

  1. 使用下列命令確認分層式網路管理服務的 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
    
  2. 使用下列命令檢視組態對應:

    kubectl get cm -n azure-iot-operations
    

    輸出看起來會如下列範例所示:

    NAME                           DATA   AGE
    aio-lnm-level4-config          1      50s
    aio-lnm-level4-client-config   1      50s
    
  3. 自訂 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。

  1. configmap-custom-level4.yaml 複製到層級 3 主機,或複製到您遠端存取叢集的系統。

  2. 執行下列命令:

    # 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 addresss matches the ip address of the level 4 Layered Network Management instance.
    
  3. 上一個步驟會設定 DNS 組態,將叢集內允許的 URL 解析至層級 4。 若要確保叢集外部的 DNS 執行相同動作,您必須設定 systemd 解析,以將流量轉送至 K3S 叢集內的 CoreDNS。 在 K3S 主機上執行下列命令:建立下列目錄:

        sudo mkdir /etc/systemd/resolved.conf.d
    

    建立名為 lnm.conf 的檔案,包含以下內容。 IP 位址應該是在 kube-system 命名空間中執行的 kube-dns 服務的層級 3 叢集 IP 位址。

    [Resolve]
    DNS=<PUT KUBE-DNS SERVICE IP HERE> 
    DNSStubListener=no
    

    重新啟動 DNS 解析器:

    sudo systemctl restart systemd-resolved
    

什麼是 Azure IoT 分層式網路管理?