수준 4 클러스터에서 Azure IoT 계층화된 네트워크 관리(미리 보기) 구성
Azure IoT 계층화된 네트워크 관리(미리 보기)는 Azure IoT 작업을 지원하는 구성 요소입니다. 그러나 하위 계층에서 Azure IoT 작업을 지원하려면 최상위 네트워크 계층에 개별적으로 배포해야 합니다. 네트워크 계층의 최상위 수준(일반적으로 ISA-95 네트워크 아키텍처의 수준 4)에서 클러스터 및 계층화된 네트워크 관리 서비스는 직접 인터넷에 액세스할 수 있습니다. 설정이 완료되면 계층화된 네트워크 관리(미리 보기) 서비스가 자식 계층에서 네트워크 트래픽을 수신할 준비가 되어 Azure Arc로 전달됩니다.
필수 조건
계층화된 네트워크 관리를 시스템에 개별적으로 배포하기 위해 다음 최소 요구 사항을 충족합니다.
- AKS 엣지에센셜 - Arc 연결 클러스터 및 GitOps 카테고리에서 AKS 엣지에센셜 요구 사항 및 지원 매트릭스
- K3S Kubernetes 클러스터 - Azure Arc 지원 Kubernetes 시스템 요구 사항
수준 4에서 Kubernetes 클러스터 설정
계층화된 네트워크 관리만 설정하려면 Azure IoT Operations 배포보다 필수 구성 요소가 더 간단합니다. Kubernetes 클러스터 준비에서 Azure IoT Operations에 대한 일반적인 요구 사항을 충족하는 것은 선택 사항입니다.
AKS 엣지에센셜 및 K3S Kubernetes 클러스터를 설정하기 위한 다음 단계는 Microsoft에서 확인합니다.
Ubuntu 머신 준비
Ubuntu 22.04 LTS는 호스트 머신에 권장되는 버전입니다.
Helm 3.8.0 이상을 설치합니다.
Kubectl을 설치합니다.
Azure CLI를 설치합니다. 수준 3 클러스터에 원격으로 액세스하려는 경우 수준 4 머신 또는 다른 개발자 또는 jumpbox 머신에 Azure CLI를 직접 설치할 수 있습니다. 클러스터 호스트를 정리하기 위해 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 빠른 시작 가이드를 참조하세요.
Important
매개 변수를
--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
이름에 따라 생성됩니다. 를 선택하려면 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>"
모든 명령에 대한 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 명령을 사용하여 Kubernetes 클러스터에서 Arc를 사용하도록 설정하고, 이전 단계에서 만든 리소스 그룹에서 이를 관리합니다.
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 매개 변수의 값을 디버그하도록 변경할 수 있습니다.
- 엔드포인트 에 대한 자세한 내용은 Azure IoT Operations 엔드포인트를 참조하세요.
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 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로 이동한 다음, 네트워크 트래픽에서 실행되는 계층화된 네트워크 관리 서비스로 전달합니다.