Configurar a visualização do gerenciamento de rede em camadas do Azure IoT no cluster de nível 4

Importante

A Versão Prévia das Operações da Internet das Coisas do Azure – habilitadas pelo Azure Arc – está atualmente em versão prévia. Você não deve usar esse software em versão prévia em ambientes de produção.

Você precisará implantar uma nova instalação das Operações da Internet das Coisas do Azure quando uma versão em disponibilidade geral for disponibilizada. Você não poderá atualizar uma instalação de versão prévia.

Veja os Termos de Uso Complementares para Versões Prévias do Microsoft Azure para obter termos legais que se aplicam aos recursos do Azure que estão em versão beta, versão prévia ou que, de outra forma, ainda não foram lançados em disponibilidade geral.

A Visualização de Gerenciamento de Rede em Camadas de IoT do Azure é um componente para dar suporte à Versão Prévia de Operações de IoT do Azure. No entanto, necessita ser implantado individualmente na camada superior da rede para apoiar as Operações Azure IoT na camada inferior. No nível superior das camadas de rede (geralmente o nível 4 da arquitetura de rede ISA-95), o cluster e o serviço de gerenciamento de rede em camadas têm acesso direto à Internet. Uma vez concluída a configuração, o serviço de Gestão de Rede em Camadas está pronto para receber o tráfego de rede da camada infantil e encaminhá-lo para o Azure Arc.

Pré-requisitos

Atenda aos seguintes requisitos mínimos para implantar o gerenciamento de rede em camadas individualmente no sistema.

Configurar o cluster do Kubernetes no Nível 4

Para configurar apenas a Gestão de Rede em Camadas, os pré-requisitos são mais simples do que uma implantação de Operações IoT do Azure. É opcional cumprir os requisitos gerais para operações de IoT do Azure em Preparar seu cluster Kubernetes.

As etapas a seguir para configurar o cluster AKS Edge Essentials e K3S Kubernetes são verificadas pela Microsoft.

Preparar um computador Ubuntu

  1. O Ubuntu 22.04 LTS é a versão recomendada para o computador host.

  2. Instale o Helm versão 3.8.0 ou posterior.

  3. Instale o Kubectl.

  4. Instale a CLI do Azure. Você pode instalar a CLI do Azure diretamente na máquina de nível 4 ou em outra máquina desenvolvedor ou jumpbox se você planeja acessar o cluster de nível 3 remotamente. Se você optar por acessar o cluster Kubernetes remotamente para manter o host do cluster limpo, execute o kubectl e comandos relacionados a az" do computador desenvolvedor para o restante das etapas deste artigo.

    • Instale a CLI do Azure. Siga as etapas em Instalar a CLI do Azure no Linux.

    • Instale connectedk8s e outras extensões.

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

Criar o cluster do K3S

  1. Instale o K3S usando o comando a seguir:

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

    Consulte o guia de início rápido do K3s para obter mais detalhes.

    Importante

    Use o parâmetro --disable=traefik para desabilitar o treafik. Caso contrário, você poderá ter um problema ao tentar alocar o IP público para o serviço de gerenciamento de rede em camadas em etapas posteriores.

  2. Copie um arquivo yaml de configuração do K3s em .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
    

Habilitar o cluster para Arc

  1. Entre com a CLI do Azure. Para evitar problemas de permissão posteriormente, é importante fazer login de forma interativa usando uma janela do navegador:

    az login
    
  2. Defina variáveis de ambiente para as etapas de configuração. Substitua valores em <> por valores ou nomes válidos de sua escolha. Os CLUSTER_NAME e RESOURCE_GROUP são criados com base nos nomes que você fornece. Consulte Regiões com suporte das Operações do Azure IoT para escolher o 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. Defina o contexto de assinatura do Azure para todos os comandos:

    az account set -s $SUBSCRIPTION_ID
    
  4. Registre os provedores de recursos necessários em sua assinatura:

    Observação

    Esta etapa só precisa ser executada uma vez por assinatura. Para registrar provedores de recursos, você precisa de permissão para fazer a operação /register/action, que está incluída nas funções Colaborador e Proprietário da assinatura. Confira mais informações em Tipos e provedores de recursos do Azure.

    az provider register -n "Microsoft.ExtendedLocation"
    az provider register -n "Microsoft.Kubernetes"
    az provider register -n "Microsoft.KubernetesConfiguration"
    
  5. Use o comando az group create para criar um grupo de recursos em sua assinatura do Azure para armazenar todos os recursos:

    az group create --location $LOCATION --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID
    
  6. Use o comando az connectedk8s connect para habilitar o Arc no seu cluster do Kubernetes e gerenciá-lo no grupo de recursos que você criou na etapa anterior:

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

Implantar o serviço de visualização de gerenciamento de rede em camadas no cluster

Depois que seu cluster Kubernetes estiver habilitado para Arc, você poderá implantar o serviço Layered Network Management no cluster.

Instale o operador Visualização de gerenciamento de rede em camadas

  1. Execute o comando a seguir. Substitua os espaços reservados <RESOURCE GROUP> e <CLUSTER NAME> por suas informações de integração do Arc de uma etapa anterior.

    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. Use o comando kubectl para verificar se o operador do Gerenciamento de Rede em Camadas está em execução.

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

Configurar o serviço de visualização de gerenciamento de rede em camadas

Crie o recurso personalizado de Gerenciamento de Rede em Camadas.

  1. Crie um arquivo lnm-cr.yaml conforme especificado:

    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
    

    Para fins de depuração ou experimentação, você pode alterar o valor do parâmetro loglevel para depuração.

  2. Crie o Recurso Personalizado para criar uma instância de Gerenciamento de Rede em Camadas.

    kubectl apply -f lnm-cr.yaml
    
  3. Ver o serviço de Kubernetes do Gerenciamento de Rede em Camadas:

    kubectl get services -n azure-iot-operations
    
    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
    

Adicionar configuração de iptables para o AKS Edge Essentials

Importante

Essa etapa é aplicável somente ao hospedar o Gerenciamento de Rede em Camadas em um cluster do AKS Edge Essentials.

A implantação do Gerenciamento de Rede em Camadas cria um serviço do Kubernetes do tipo LoadBalancer. Para garantir que o serviço possa ser acessado de fora do cluster do Kubernetes, você precisa mapear as portas subjacentes do host do Windows para as portas apropriadas no serviço do Gerenciamento de Rede em Camadas.

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

Após esses comandos serem executados com sucesso, o tráfego recebido nas portas 443 e 10000 no host do Windows é roteado para o serviço do Kubernetes. Ao configurar o DNS personalizado para a camada de rede de nível filho, você direciona o tráfego de rede para o IP desse host do Windows e, em seguida, para o serviço de Gerenciamento de Rede em Camadas em execução nesse host.