다음을 통해 공유


수준 4 클러스터에서 Azure IoT 계층화된 네트워크 관리(미리 보기) 구성

Azure IoT 계층화된 네트워크 관리(미리 보기)는 Azure IoT 작업을 지원하는 구성 요소입니다. 그러나 하위 계층에서 Azure IoT 작업을 지원하려면 최상위 네트워크 계층에 개별적으로 배포해야 합니다. 네트워크 계층의 최상위 수준(일반적으로 ISA-95 네트워크 아키텍처의 수준 4)에서 클러스터 및 계층화된 네트워크 관리 서비스는 직접 인터넷에 액세스할 수 있습니다. 설정이 완료되면 계층화된 네트워크 관리(미리 보기) 서비스가 자식 계층에서 네트워크 트래픽을 수신할 준비가 되어 Azure Arc로 전달됩니다.

필수 조건

계층화된 네트워크 관리를 시스템에 개별적으로 배포하기 위해 다음 최소 요구 사항을 충족합니다.

수준 4에서 Kubernetes 클러스터 설정

계층화된 네트워크 관리만 설정하려면 Azure IoT Operations 배포보다 필수 구성 요소가 더 간단합니다. Kubernetes 클러스터 준비에서 Azure IoT Operations에 대한 일반적인 요구 사항을 충족하는 것은 선택 사항입니다.

AKS 엣지에센셜K3S Kubernetes 클러스터를 설정하기 위한 다음 단계는 Microsoft에서 확인합니다.

Ubuntu 머신 준비

  1. Ubuntu 22.04 LTS는 호스트 머신에 권장되는 버전입니다.

  2. Helm 3.8.0 이상을 설치합니다.

  3. Kubectl을 설치합니다.

  4. Azure CLI를 설치합니다. 수준 3 클러스터에 원격으로 액세스하려는 경우 수준 4 머신 또는 다른 개발자 또는 jumpbox 머신에 Azure CLI를 직접 설치할 수 있습니다. 클러스터 호스트를 정리하기 위해 Kubernetes 클러스터에 원격으로 액세스하도록 선택하는 경우 이 문서의 나머지 단계에 대해 개발자 머신에서 kubectlaz” 관련 명령을 실행합니다.

    • Azure CLI를 설치합니다. Linux에 Azure CLI 설치의 단계를 따릅니다.

    • connectedk8s 및 기타 확장을 설치합니다.

      az extension add --name connectedk8s
      az extension add --name k8s-extension
      

K3S 클러스터 만들기

  1. 다음 명령을 사용하여 K3S를 설치합니다.

    curl -sfL https://get.k3s.io | sh -s - --disable=traefik --write-kubeconfig-mode 644
    

    자세한 내용은 K3s 빠른 시작 가이드를 참조하세요.

    Important

    매개 변수를 --disable=traefik 사용하여 traefik을 사용하지 않도록 설정해야 합니다. 그러지 않으면 이후 단계에서 계층화된 네트워크 관리 서비스에 대한 공용 IP를 할당하려고 할 때 문제가 발생할 수 있습니다.

  2. 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 지원 클러스터

  1. Azure CLI로 로그인 나중에 권한 문제를 방지하려면 브라우저 창을 사용하여 대화형으로 로그인하는 것이 중요합니다.

    az login
    
  2. 설정 단계에 대한 환경 변수를 설정합니다. <>의 값을 원하는 유효한 값이나 이름으로 대체합니다. 입력 CLUSTER_NAMERESOURCE_GROUP 이름에 따라 생성됩니다. 를 선택하려면 Azure IoT Operations 에서 지원되는 지역을 참조하세요 LOCATION.

    # 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>"
    
  3. 모든 명령에 대한 Azure 구독 컨텍스트를 설정합니다.

    az account set -s $SUBSCRIPTION_ID
    
  4. 구독에 필요한 리소스 공급자를 등록합니다.

    참고 항목

    이 단계는 구독당 한 번만 실행하면 됩니다. 리소스 공급자를 등록하려면 구독 기여자 및 소유자 역할에 포함된 /register/action 작업을 수행할 수 있는 권한이 필요합니다. 자세한 내용은 Azure 리소스 공급자 및 형식을 참조하세요.

    az provider register -n "Microsoft.ExtendedLocation"
    az provider register -n "Microsoft.Kubernetes"
    az provider register -n "Microsoft.KubernetesConfiguration"
    
  5. az group create 명령을 사용하여 Azure 구독에 리소스 그룹을 만들어 모든 리소스를 저장합니다.

    az group create --location $LOCATION --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID
    
  6. az connectedk8s connect 명령을 사용하여 Kubernetes 클러스터에서 Arc를 사용하도록 설정하고, 이전 단계에서 만든 리소스 그룹에서 이를 관리합니다.

    az connectedk8s connect -n $CLUSTER_NAME -l $LOCATION -g $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID
    

클러스터에 계층화된 네트워크 관리 서비스 배포

Kubernetes 클러스터가 Arc를 사용하도록 설정되면 계층화된 네트워크 관리 서비스를 클러스터에 배포할 수 있습니다.

계층화된 네트워크 관리 연산자 설치

  1. 다음 명령을 실행합니다. <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
    
  2. kubectl 명령을 사용하여 계층화된 네트워크 관리 연산자가 실행 중인지 확인합니다.

    kubectl get pods
    
    NAME                                   READY   STATUS    RESTARTS   AGE
    azedge-lnm-operator-598cc495c-5428j   1/1     Running   0          28h
    

계층화된 네트워크 관리 서비스 구성

계층화된 네트워크 관리 사용자 지정 리소스를 만듭니다.

  1. 지정된 대로 lnm-cr.yaml 파일을 만듭니다.

    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
    
  2. 사용자 지정 리소스를 만들어 계층화된 네트워크 관리 인스턴스를 만듭니다.

    kubectl apply -f lnm-cr.yaml
    
  3. 계층화된 네트워크 관리 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 구성 추가

Important

이 단계는 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로 이동한 다음, 네트워크 트래픽에서 실행되는 계층화된 네트워크 관리 서비스로 전달합니다.