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.
- Categoria AKS Edge Essentials - Cluster conectado por arco e GitOps em Requisitos e matriz de suporte do AKS Edge Essentials
- Cluster K3S Kubernetes - Requisitos do sistema Kubernetes habilitado para Azure Arc
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
O Ubuntu 22.04 LTS é a versão recomendada para o computador host.
Instale o Helm versão 3.8.0 ou posterior.
Instale o Kubectl.
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
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.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
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
Defina variáveis de ambiente para as etapas de configuração. Substitua valores em
<>
por valores ou nomes válidos de sua escolha. OsCLUSTER_NAME
eRESOURCE_GROUP
são criados com base nos nomes que você fornece. Consulte Regiões com suporte das Operações do Azure IoT para escolher oLOCATION
.# 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>"
Defina o contexto de assinatura do Azure para todos os comandos:
az account set -s $SUBSCRIPTION_ID
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"
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
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
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
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.
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.
Crie o Recurso Personalizado para criar uma instância de Gerenciamento de Rede em Camadas.
kubectl apply -f lnm-cr.yaml
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.