다음을 통해 공유


Azure IoT 계층화된 네트워크 관리를 위한 샘플 네트워크 환경 만들기(미리 보기)

Azure IoT 계층화된 네트워크 관리(미리 보기) 서비스를 사용하려면 격리된 네트워크 환경을 구성해야 합니다. 예를 들어 ISA-95/Purdue 네트워크 아키텍처가 있습니다. 이 페이지에서는 격리를 달성하려는 방법에 따라 테스트 환경을 설정하는 몇 가지 예제를 제공합니다.

  • 물리적 분할 - 네트워크는 물리적으로 분리됩니다. 이 경우 인터넷 연결 네트워크와 격리된 네트워크에 연결하려면 계층화된 네트워크 관리(미리 보기)를 이중 NIC(네트워크 인터페이스 카드) 호스트에 배포해야 합니다.
  • 논리적 구분 - 네트워크는 VLAN, 서브넷 또는 방화벽과 같은 구성으로 논리적으로 분할됩니다. 계층화된 네트워크 관리에는 단일 엔드포인트가 있으며 자체 네트워크 계층 및 격리된 계층에 표시되도록 구성됩니다.

두 방법 모두 격리된 네트워크 계층에서 사용자 지정 DNS를 구성하여 네트워크 트래픽을 상위 계층의 계층화된 네트워크 관리 인스턴스로 전달해야 합니다.

Important

계층화된 네트워크 관리 설명서에 설명된 네트워크 환경은 계층화된 네트워크 관리를 테스트하기 위한 예입니다. 프로덕션용 네트워크 및 클러스터 토폴로지를 빌드하는 방법에 대한 권장 사항은 아닙니다.

물리적 분할을 사용하여 격리된 네트워크 구성

다음 예제 구성은 최소 물리적 디바이스가 있는 간단한 격리된 네트워크입니다.

물리적 디바이스 격리된 네트워크 구성의 다이어그램.

  • 무선 액세스 지점은 로컬 네트워크를 설정하는 데 사용되며 인터넷 액세스를 제공하지 않습니다.
  • 수준 4 클러스터는 인터넷 및 로컬 네트워크에 연결하는 이중 NIC(네트워크 인터페이스 카드) 물리적 컴퓨터에서 호스트되는 단일 노드 클러스터입니다.
  • 수준 3 클러스터는 물리적 컴퓨터에서 호스트되는 단일 노드 클러스터입니다. 이 디바이스 클러스터는 로컬 네트워크에만 연결됩니다.

계층화된 네트워크 관리는 이중 NIC 클러스터에 배포됩니다. 로컬 네트워크의 클러스터는 Azure 및 Arc 서비스에 액세스하기 위한 프록시로 계층화된 네트워크 관리에 연결됩니다. 또한 도메인 이름 확인을 제공하고 트래픽을 계층화된 네트워크 관리로 가리키려면 로컬 네트워크에 사용자 지정 DNS가 필요합니다. 자세한 내용은 사용자 지정 DNS 구성을 참조하세요.

논리적 분할을 사용하여 격리된 네트워크 구성

다음 다이어그램에서는 각 수준이 서브넷으로 논리적으로 분할되는 격리된 네트워크 환경을 보여 줍니다. 이 테스트 환경에는 각 수준에서 여러 클러스터가 하나씩 있습니다. 클러스터는 AKS Edge Essentials 또는 K3S일 수 있습니다. 수준 4 네트워크의 Kubernetes 클러스터에는 직접 인터넷에 액세스할 수 있습니다. 수준 3 이하의 Kubernetes 클러스터는 인터넷에 액세스할 수 없습니다.

논리적 분할 격리된 네트워크의 다이어그램.

이 테스트 설정의 여러 네트워크 수준은 네트워크 내의 서브넷을 사용하여 수행됩니다.

  • 수준 4 서브넷(10.104.0.0/16) - 이 서브넷은 인터넷에 액세스할 수 있습니다. 모든 요청은 인터넷의 대상으로 전송됩니다. 이 서브넷에는 IP 주소가 10.104.0.10인 단일 Windows 11 컴퓨터가 있습니다.
  • 수준 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 컴퓨터가 포함되어 있습니다. 이 네트워크에는 IP 주소가 10.102.0.28인 하나의 Windows 11 컴퓨터(노드)가 있습니다. DNS 구성의 모든 도메인은 주소 10.103.0.33에 매핑되어야 합니다.

이러한 유형의 네트워크 환경을 설정하려면 다음 예제를 참조하세요.

최소 하드웨어를 사용한 논리적 분할의 예

이 예제에서는 두 컴퓨터가 인터넷에 연결되는 AP(액세스 지점)에 연결됩니다. 수준 4 호스트 컴퓨터는 인터넷에 액세스할 수 있습니다. 수준 3 호스트는 AP의 구성으로 인터넷에 액세스하기 위해 차단됩니다. 예를 들어 방화벽 또는 클라이언트 컨트롤입니다. 두 컴퓨터가 동일한 네트워크에 있으므로 수준 4 클러스터에서 호스트되는 계층화된 네트워크 관리 인스턴스는 기본적으로 수준 3 컴퓨터 및 클러스터에 표시됩니다. 도메인 이름 확인을 제공하고 트래픽을 계층화된 네트워크 관리로 가리키려면 로컬 네트워크에 추가 사용자 지정 DNS를 설정해야 합니다. 자세한 내용은 사용자 지정 DNS 구성을 참조하세요.

논리적으로 격리된 네트워크 구성의 다이어그램.

Azure의 논리적 분할 예제

이 예제에서는 Azure에서 가상 네트워크Linux 가상 머신을 사용하여 테스트 환경을 만듭니다.

Important

가상 환경은 탐색 및 평가 전용입니다. 자세한 내용은 Azure IoT Operations에 지원되는 환경을 참조하세요.

  1. Azure 구독에서 가상 네트워크를 만듭니다. 두 개 이상의 레이어(수준 4 및 수준 3)에 대한 서브넷을 만듭니다. Azure의 가상 네트워크 스크린샷.
  2. jumpbox 또는 개발자 컴퓨터에 대한 추가 서브넷을 만들어 계층 간에 컴퓨터 또는 클러스터에 원격으로 액세스하는 것은 선택 사항입니다. 이 설정은 두 개 이상의 네트워크 계층을 만들려는 경우에 편리합니다. 그렇지 않으면 jumpbox 컴퓨터를 수준 4 네트워크에 연결할 수 있습니다.
  3. 각 수준에 네트워크 보안 그룹을 만들고 그에 따라 서브넷에 연결합니다.
  4. 수준 4 보안 그룹에 기본값을 사용할 수 있습니다.
  5. 수준 3(및 하위 수준) 보안 그룹에 대한 추가 인바운드 및 아웃바운드 규칙을 구성해야 합니다.
    • 인바운드 및 아웃바운드 보안 규칙을 추가하여 모든 네트워크 트래픽을 거부합니다.
    • 우선순위가 높은 인바운드 및 아웃바운드 보안 규칙을 추가하여 수준 4 서브넷의 IP 범위에서 네트워크 트래픽을 허용합니다.
    • [선택 사항] jumpbox 서브넷을 만드는 경우 이 서브넷으로의 트래픽을 허용하기 위한 인바운드 및 아웃바운드 규칙을 만듭니다. 수준 3 보안 그룹의 스크린샷.
  6. 수준 3 및 수준 4에서 Linux VM을 만듭니다.
    • VM 사양은 지원되는 환경을 참조하세요.
    • VM을 만들 때 이전 단계에서 만든 서브넷에 컴퓨터를 연결합니다.
    • VM에 대한 보안 그룹 만들기를 건너뜁니다.

사용자 지정 DNS 구성

수준 3 이하에는 사용자 지정 DNS가 필요합니다. 클러스터 내에서 발생하는 네트워크 트래픽에 대한 DNS 확인이 부모 수준 계층화된 네트워크 관리 인스턴스를 가리키도록 합니다. 기존 또는 프로덕션 환경에서 다음 DNS 확인을 DNS 디자인에 통합합니다. 계층화된 네트워크 관리 서비스 및 Azure IoT 작업에 대한 테스트 환경을 설정하려는 경우 다음 예제를 참조할 수 있습니다.

CoreDNS 구성

DNS 설정은 여러 가지 방법으로 수행할 수 있지만 이 예제에서는 K3S 클러스터의 기본 DNS 서버인 CoreDNS에서 제공하는 확장 메커니즘을 사용합니다. 확인해야 하는 허용 목록의 URL이 CoreDNS에 추가됩니다.

Important

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 address matches the ip address of the level 4 Layered Network Management instance.
    
  3. 이전 단계에서는 DNS 구성을 설정하여 클러스터 내에서 허용 목록에 있는 URL을 수준 4로 확인합니다. 클러스터 외부의 DNS가 동일한 작업을 수행하도록 하려면 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 계층화된 네트워크 관리란?