빠른 시작: Azure 환경에서 클러스터가 Arc를 사용하도록 설정하여 Azure IoT 계층화된 네트워크 관리 미리 보기 구성
Important
Azure Arc에서 사용하도록 설정된 Azure IoT Operations 미리 보기는 현재 미리 보기로 제공됩니다. 프로덕션 환경에서는 이 미리 보기 소프트웨어를 사용하면 안 됩니다.
일반적으로 사용 가능한 릴리스를 사용할 수 있게 되면 새 Azure IoT Operations 설치를 배포해야 합니다. 미리 보기 설치를 업그레이드할 수 없습니다.
베타, 미리 보기로 제공되거나 아직 일반 공급으로 릴리스되지 않은 Azure 기능에 적용되는 약관은 Microsoft Azure 미리 보기에 대한 추가 사용 약관을 참조하세요.
이 빠른 시작에서는 수준 4 및 수준 3 Purdue 네트워크에서 Azure IoT 계층화된 네트워크 관리 미리 보기를 설정합니다. 네트워크 수준 4에서는 인터넷에 액세스할 수 있으며 수준 3에서는 인터넷에 액세스할 수 없습니다. 수준 3에서 Azure로 네트워크 트래픽을 라우팅하도록 계층화된 네트워크 관리를 구성합니다. 마지막으로 인터넷에 직접 연결되지 않은 경우에도 수준 3에서 K3S 클러스터가 Arc를 사용하도록 설정할 수 있습니다.
- 계층화된 네트워크 관리가 배포된 AKS 클러스터 수준 4.
- 수준 3은 수준 4의 계층화된 네트워크 관리 인스턴스를 사용하여 Azure에 연결하기 위해 Linux VM에서 실행되는 K3S 클러스터입니다. 수준 3 네트워크는 포트 443 및 8084의 수준 4 네트워크에 대한 아웃바운드 액세스 권한을 갖도록 구성됩니다. 다른 모든 아웃바운드 액세스는 사용할 수 없습니다.
계층화된 네트워크 관리 아키텍처를 사용하려면 수준 3 네트워크에서 DNS 구성이 필요하며, 여기서 허용 목록 URL은 수준 4 네트워크로 다시 지정됩니다. 이 예제에서는 k3s와 함께 제공되는 기본 DNS 확인 메커니즘인 CoreDNS를 기반으로 하는 자동화된 설치 프로그램을 사용하여 이 설정을 수행합니다.
필수 조건
이러한 필수 구성 요소는 계층화된 네트워크 관리를 독립적으로 배포하고 자식 수준 클러스터가 Arc를 사용하도록 설정하기 위한 것입니다.
- AKS 클러스터
- Azure Linux Ubuntu 22.04.3 LTS 가상 머신
- 인터넷에 액세스할 수 있는 jumpbox 또는 설치 컴퓨터와 수준 3 및 수준 4 네트워크
AKS 클러스터에 계층화된 네트워크 관리 미리 보기 배포
이러한 단계는 AKS 클러스터에 계층화된 네트워크 관리를 배포합니다. 클러스터는 ISA-95 모델의 최상위 계층입니다. 이 섹션의 끝에는 아래의 Azure Arc 지원 클러스터에서 트래픽을 허용하고 Azure IoT 작업 미리 보기 서비스의 배포를 지원할 준비가 된 계층화된 네트워크 관리 인스턴스가 있습니다.
클러스터 연결의 단계에 따라 jumpbox에서 AKS 클러스터를 관리하도록
kubectl
을 구성합니다.다음 Azure CLI 명령을 사용하여 계층화된 네트워크 관리 연산자를 설치합니다.
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 get pods
다음 예제와 같은 출력이 표시됩니다.
NAME READY STATUS RESTARTS AGE aio-lnm-operator-7db49dc9fd-kjf5x 1/1 Running 0 78s
다음 내용이 포함된 level4.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: "*.arc.azure.net" destinationType: external - destinationUrl: "*.data.mcr.microsoft.com" destinationType: external - destinationUrl: "*.dp.kubernetesconfiguration.azure.com" destinationType: external - destinationUrl: "*.guestnotificationservice.azure.com" destinationType: external - destinationUrl: "*.his.arc.azure.com" destinationType: external - destinationUrl: "*.login.microsoft.com" destinationType: external - destinationUrl: "*.login.microsoftonline.com" destinationType: external - destinationUrl: "*.obo.arc.azure.com" destinationType: external - destinationUrl: "*.servicebus.windows.net" destinationType: external - destinationUrl: "graph.microsoft.com" destinationType: external - destinationUrl: "login.windows.net" destinationType: external - destinationUrl: "management.azure.com" destinationType: external - destinationUrl: "mcr.microsoft.com" destinationType: external - destinationUrl: "sts.windows.net" destinationType: external - destinationUrl: "*.ods.opinsights.azure.com" destinationType: external - destinationUrl: "graph.windows.net" destinationType: external - destinationUrl: "msit-onelake.pbidedicated.windows.net" destinationType: external - destinationUrl: "*.azurecr.io" destinationType: external - destinationUrl: "*.azureedge.net" destinationType: external - destinationUrl: "*.blob.core.windows.net" destinationType: external - destinationUrl: "*.prod.hot.ingestion.msftcloudes.com" destinationType: external - destinationUrl: "*.prod.microsoftmetrics.com" destinationType: external - destinationUrl: "adhs.events.data.microsoft.com" destinationType: external - destinationUrl: "dc.services.visualstudio.com" destinationType: external - destinationUrl: "go.microsoft.com" destinationType: external - destinationUrl: "packages.microsoft.com" destinationType: external - destinationUrl: "www.powershellgallery.com" destinationType: external - destinationUrl: "*.gw.arc.azure.com" destinationType: external - destinationUrl: "*.gcs.prod.monitoring.core.windows.net" destinationType: external - destinationUrl: "*.prod.warm.ingest.monitor.core.windows.net" destinationType: external - destinationUrl: "*.prod.hot.ingest.monitor.core.windows.net" destinationType: external - destinationUrl: "azure.archive.ubuntu.com" destinationType: external - destinationUrl: "crl.microsoft.com" destinationType: external - destinationUrl: "*.table.core.windows.net" destinationType: external - destinationUrl: "*.blob.storage.azure.net" destinationType: external - destinationUrl: "*.docker.com" destinationType: external - destinationUrl: "*.docker.io" destinationType: external - destinationUrl: "*.googleapis.com" destinationType: external - destinationUrl: "github.com" destinationType: external - destinationUrl: "collect.traefik.io" destinationType: external - destinationUrl: "contracts.canonical.com" destinationType: external - destinationUrl: "database.clamav.net" destinationType: external - destinationUrl: "esm.ubuntu.com" destinationType: external - destinationUrl: "livepatch.canonical.com" destinationType: external - destinationUrl: "motd.ubuntu.com" destinationType: external - destinationUrl: "update.traefik.io" destinationType: external sourceIpRange: - addressPrefix: "0.0.0.0" prefixLen: 0
level4.yaml 파일을 기반으로 계층화된 네트워크 관리 인스턴스를 만들려면 다음을 실행합니다.
kubectl apply -f level4.yaml
이 단계에서는 n개의 Pod, 하나의 서비스 및 두 개의 구성 맵을 만듭니다. n은 사용자 지정 리소스의 복제본 수를 기반으로 합니다.
인스턴스의 유효성을 검사하려면 다음을 실행합니다.
kubectl get pods
출력은 다음과 같습니다.
NAME READY STATUS RESTARTS AGE aio-lnm-operator-7db49dc9fd-kjf5x 1/1 Running 0 78s aio-lnm-level4-7598574bf-2lgss 1/1 Running 0 4s
서비스를 보려면 다음을 실행합니다.
kubectl get services
출력은 다음 예제와 같아야 합니다.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE aio-lnm-level4 LoadBalancer 10.0.141.101 20.81.111.118 80:30960/TCP,443:31214/TCP 29s
구성 맵을 보려면 다음을 실행합니다.
kubectl get cm
출력은 다음 예제와 같아야 합니다.
NAME DATA AGE aio-lnm-level4-config 1 50s aio-lnm-level4-client-config 1 50s
이 예제에서 계층화된 네트워크 관리 인스턴스는 외부 IP
20.81.111.118
에서 트래픽을 허용할 준비가 되어 있습니다.
수준 3 클러스터 준비
수준 3에서는 Linux 가상 머신에 K3S Kubernetes 클러스터를 만듭니다. 클러스터 설정을 간소화하기 위해 인터넷에 액세스할 수 있는 Azure Linux Ubuntu 22.04.3 LTS VM을 만들고 jumpbox에서 ssh를 사용하도록 설정할 수 있습니다.
팁
격리된 네트워크에서 설정을 시작하는 보다 현실적인 시나리오에서는 솔루션을 위해 미리 빌드된 이미지 또는 K3S의 Air-Gap 설치 접근 방식으로 컴퓨터를 준비할 수 있습니다.
Linux VM에서 다음 명령을 사용하여 K3S를 설치하고 구성합니다.
curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644
수준 3에 대한 네트워크 격리를 구성합니다. 다음 단계를 사용하여 수준 4에서 계층화된 네트워크 관리로만 트래픽을 보내도록 수준 3 클러스터를 구성합니다.
- VM 네트워크 인터페이스의 네트워크 보안 그룹으로 이동합니다.
- 추가 아웃바운드 보안 규칙을 추가하여 수준 3 가상 머신에서 모든 아웃바운드 트래픽을 거부합니다.
- 포트 443 및 8084에서 수준 4 AKS 클러스터의 IP에 대한 아웃바운드를 허용하도록 우선순위가 가장 높은 다른 아웃바운드 규칙을 추가합니다.
Arc에 격리된 계층의 클러스터 프로비전
다음 단계를 사용하면 수준 4에서 계층화된 네트워크 관리 인스턴스를 사용하여 수준 3 클러스터가 Arc를 사용하도록 설정합니다.
kubectl 클러스터에 액세스할 수 있도록 jumpbox를 설정합니다.
Linux VM에서 구성 파일을 생성합니다.
k3s kubectl config view --raw > config.level3
jumpbox에서
config.level3
파일을~/.kube
디렉터리에 복사하여 수준 3 k3s 클러스터에 대한 kubectl 액세스를 설정하고 이름을config
로 변경합니다. 구성 파일의 서버 항목은 수준 3 VM의 IP 주소 또는 도메인 이름으로 설정해야 합니다.CoreDNS에서 확인할 허용 목록 URL을 추가하려면 CoreDNS에서 제공하는 확장 메커니즘(K3S 클러스터의 기본 DNS 서버)을 사용하도록 CoreDNS 구성을 참조하세요.
jumpbox에서 다음 명령을 실행하여 클러스터를 Arc에 연결합니다. 이 단계에는 Azure CLI가 필요합니다. 필요한 경우 Az CLI를 설치합니다.
az login az account set --subscription <your Azure subscription ID> az connectedk8s connect -g <your resource group name> -n <your connected cluster name>
connectedk8s에 대한 자세한 내용은 빠른 시작: 기존 Kubernetes 클러스터를 Azure Arc에 연결을 참조하세요.
다음 예제와 같은 출력이 표시됩니다.
This operation might take a while... The required pre-checks for onboarding have succeeded. Azure resource provisioning has begun. Azure resource provisioning has finished. Starting to install Azure arc agents on the Kubernetes cluster. { "agentPublicKeyCertificate": "MIICCgKCAgEAmU+Pc55pc3sOE2Jo5JbAdk+2OprUziCbgfGRFfbMHO4dT7A7LDaDk7tWwvz5KwUt66eMrabI7M52H8xXvy1j7YwsMwR5TaSeHpgrUe1/4XNYKa6SN2NbpXIXA3w4aHgtKzENm907rYMgTO9gBJEZNJpqsfCdb3E7AHWQabUe9y9T8aub+arBHLQ3furGkv8JnN2LCPbvLnmeLfc1J5 .... ....
Kubernetes 클러스터는 이제 Arc를 사용할 수 있으며 az connectedk8s connect 명령에 제공한 리소스 그룹에 나열됩니다. Azure Portal을 통해 이 클러스터의 프로비전 유효성을 검사할 수도 있습니다. 이 빠른 시작은 Kubernetes 클러스터에 Arc를 사용하도록 설정하는 계층화된 네트워크 관리 기능을 보여주기 위한 것입니다. 이제 격리된 네트워크 내에서 이 클러스터의 기본 제공 Arc 환경을 사용해 볼 수 있습니다.
다음 단계
- Azure IoT 작업을 배포할 격리된 네트워크에서 클러스터를 설정하는 방법을 이해하려면 격리된 네트워크에서 Azure IoT 작업 미리 보기를 사용하도록 계층화된 네트워크 관리 서비스 구성을 참조하세요.
- Azure IoT 작업 관련 시나리오에 대한 포괄적인 네트워크 환경을 설정하는 방법에 대한 자세한 내용은 샘플 네트워크 환경 만들기를 참조하세요.