Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os nós virtuais permitem a comunicação de rede entre pods executados em Instâncias de Contêiner do Azure (ACI) e clusters AKS. Para fornecer essa comunicação, crie uma sub-rede de rede virtual e atribua permissões delegadas. Os nós virtuais só funcionam com clusters AKS criados usando redes avançadas (Azure CNI). Por padrão, os clusters AKS são criados com rede básica (kubenet). Este artigo mostra como criar uma rede virtual e sub-redes e, em seguida, implantar um cluster AKS que usa rede avançada.
Este artigo mostra como usar a CLI do Azure para criar e configurar recursos de rede virtual e um cluster AKS habilitado com nós virtuais.
Antes de começar
Importante
Antes de usar nós virtuais com AKS, revise as limitações dos nós virtuais AKS e as limitações de rede virtual do ACI. Essas limitações afetam a localização, a configuração de rede e outros detalhes de configuração do cluster AKS e dos nós virtuais.
Você precisa do provedor de serviços ACI registado com a sua assinatura. Você pode verificar o status do registro do provedor ACI usando o
az provider listcomando.az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o tableO provedor Microsoft.ContainerInstance deverá apresentar-se como Registered, conforme mostrado na saída de exemplo a seguir:
Namespace RegistrationState RegistrationPolicy --------------------------- ------------------- -------------------- Microsoft.ContainerInstance Registered RegistrationRequiredSe o provedor aparecer como NotRegistered, registre o provedor usando o
az provider register.az provider register --namespace Microsoft.ContainerInstanceSe estiver usando a CLI do Azure, este artigo exigirá a CLI do Azure versão 2.0.49 ou posterior. Executar
az --versionpara localizar a versão. Se precisar de instalar ou atualizar, consulte Install Azure CLI. Você também pode usar o Azure Cloud Shell.
Lançar o Azure Cloud Shell
O Azure Cloud Shell é um shell interativo gratuito que você pode usar para executar as etapas neste artigo. Tem ferramentas comuns do Azure pré-instaladas e configuradas.
Para abrir o Cloud Shell, selecione Experimentar no canto superior direito de um bloco de código. Você também pode iniciar o Cloud Shell em uma guia separada do navegador acessando https://shell.azure.com/bash. Selecione Copiar para copiar os blocos de código, cole-o no Cloud Shell e prima Enter para executá-lo.
Criar um grupo de recursos
Um grupo de recursos do Azure é um grupo lógico, no qual os recursos do Azure são implementados e geridos.
Crie um grupo de recursos usando o comando
az group create.az group create --name myResourceGroup --location eastus
Criar uma rede virtual
Importante
O nó virtual requer uma rede virtual personalizada e uma sub-rede associada. Ele não pode ser associado à mesma rede virtual que o cluster AKS.
Crie uma rede virtual usando o
az network vnet createcomando. O exemplo a seguir cria uma rede virtual chamada myVnet com um prefixo de endereço de 10.0.0.0/8 e uma sub-rede chamada myAKSSubnet. O prefixo de endereço dessa sub-rede tem como padrão 10.240.0.0/16.az network vnet create \ --resource-group myResourceGroup \ --name myVnet \ --address-prefixes 10.0.0.0/8 \ --subnet-name myAKSSubnet \ --subnet-prefix 10.240.0.0/16Crie uma sub-rede extra para os nós virtuais usando o
az network vnet subnet createcomando. O exemplo a seguir cria uma sub-rede chamada myVirtualNodeSubnet com um prefixo de endereço de 10.241.0.0/16.az network vnet subnet create \ --resource-group myResourceGroup \ --vnet-name myVnet \ --name myVirtualNodeSubnet \ --address-prefixes 10.241.0.0/16
Criar um cluster AKS com identidade gerenciada
Obtenha o ID da sub-rede usando o
az network vnet subnet showcomando.az network vnet subnet show --resource-group myResourceGroup --vnet-name myVnet --name myAKSSubnet --query id -o tsvCrie um cluster AKS usando o
az aks createcomando e substitua<subnetId>pelo ID obtido na etapa anterior. O exemplo a seguir cria um cluster chamado myAKSCluster com cinco nós.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --node-count 5 \ --network-plugin azure \ --vnet-subnet-id <subnetId> \ --generate-ssh-keysAo fim de vários minutos, o comando é concluído e devolve informações sobre o cluster no formato JSON.
Para obter mais informações sobre identidades gerenciadas, consulte Usar identidades gerenciadas.
Ativar o complemento de nós virtuais
Observação
Se você tiver um Cluster de Serviço Kubernetes do Azure existente criado que usa o Azure CNI para a Rede Avançada, deverá ser capaz de habilitar nós virtuais como um complemento usando a CLI.
Habilite nós virtuais usando o
az aks enable-addonscomando. O exemplo a seguir usa a sub-rede chamada myVirtualNodeSubnet criada em uma etapa anterior.az aks enable-addons \ --resource-group myResourceGroup \ --name myAKSCluster \ --addons virtual-node \ --subnet-name myVirtualNodeSubnet
Conectar-se ao cluster
Configure
kubectlpara se conectar ao cluster do Kubernetes usando oaz aks get-credentialscomando. Este passo transfere credenciais e configura a CLI do Kubernetes para as utilizar.az aks get-credentials --resource-group myResourceGroup --name myAKSClusterVerifique a conexão com o cluster usando o comando
kubectl get, que retorna uma lista dos nós do cluster.kubectl get nodesA seguinte saída de exemplo mostra o nó único de VM criado e o nó virtual para Linux, virtual-node-aci-linux:
NAME STATUS ROLES AGE VERSION virtual-node-aci-linux Ready agent 28m v1.11.2 aks-agentpool-14693408-0 Ready agent 32m v1.11.2
Implantar um aplicativo de exemplo
Crie um ficheiro nomeado
virtual-node.yamle copie o seguinte YAML. O YAML agenda o contêiner no nó definindo um nodeSelector e tolerância.apiVersion: apps/v1 kind: Deployment metadata: name: aci-helloworld spec: replicas: 1 selector: matchLabels: app: aci-helloworld template: metadata: labels: app: aci-helloworld spec: containers: - name: aci-helloworld image: mcr.microsoft.com/azuredocs/aci-helloworld ports: - containerPort: 80 nodeSelector: kubernetes.io/role: agent kubernetes.io/os: linux type: virtual-kubelet tolerations: - key: virtual-kubelet.io/provider operator: Exists - key: azure.com/aci effect: NoScheduleExecute o aplicativo usando o
kubectl applycomando.kubectl apply -f virtual-node.yamlObtenha uma lista de pods e o nó agendado usando o
kubectl get podscomando com o-o wideargumento.kubectl get pods -o wideO pod é agendado no nó virtual virtual-node-aci-linux, conforme mostrado na saída de exemplo a seguir:
NAME READY STATUS RESTARTS AGE IP NODE aci-helloworld-9b55975f-bnmfl 1/1 Running 0 4m 10.241.0.4 virtual-node-aci-linuxO pod recebe um endereço IP interno da sub-rede de rede virtual do Azure delegada para uso com nós virtuais.
Observação
Se você usar imagens armazenadas no Registro de Contêiner do Azure, configure e use um segredo do Kubernetes. Uma limitação atual dos nós virtuais é que você não pode usar a autenticação de entidade de serviço integrada do Microsoft Entra. Se você não usar um segredo, os pods agendados em nós virtuais não serão iniciados e relatarão o erro HTTP response status code 400 error code "InaccessibleImage".
Teste o pod do nó virtual
Teste o pod em execução no nó virtual navegando até o aplicativo de demonstração com um web client. Como o pod recebe um endereço IP interno, você pode testar rapidamente essa conectividade de outro pod no cluster AKS.
Crie um pod de teste e anexe uma sessão de terminal a ele usando o comando a seguir
kubectl run -it.kubectl run -it --rm testvk --image=mcr.microsoft.com/dotnet/runtime-deps:6.0Instale
curlno pod usandoapt-get.apt-get update && apt-get install -y curlAcesse o endereço do seu pod usando
curl, como http://10.241.0.4. Forneça seu próprio endereço IP interno mostrado no comando anteriorkubectl get pods.curl -L http://10.241.0.4O aplicativo de demonstração é exibido, como mostrado na seguinte saída de exemplo condensado:
<html> <head> <title>Welcome to Azure Container Instances!</title> </head> [...]Feche a sessão do terminal no seu pod de teste com
exit. Quando a sessão termina, o pod é excluído.
Remover nós virtuais
Exclua o
aci-helloworldpod em execução no nó virtual usando o comandokubectl delete.kubectl delete -f virtual-node.yamlDesative os nós virtuais usando o
az aks disable-addonscomando.az aks disable-addons --resource-group myResourceGroup --name myAKSCluster --addons virtual-nodeRemova os recursos de rede virtual e o grupo de recursos usando os seguintes comandos.
# Change the name of your resource group, cluster and network resources as needed RES_GROUP=myResourceGroup AKS_CLUSTER=myAKScluster AKS_VNET=myVnet AKS_SUBNET=myVirtualNodeSubnet # Get AKS node resource group NODE_RES_GROUP=$(az aks show --resource-group $RES_GROUP --name $AKS_CLUSTER --query nodeResourceGroup --output tsv) # Get network profile ID NETWORK_PROFILE_ID=$(az network profile list --resource-group $NODE_RES_GROUP --query "[0].id" --output tsv) # Delete the network profile az network profile delete --id $NETWORK_PROFILE_ID -y # Grab the service association link ID SAL_ID=$(az network vnet subnet show --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --query id --output tsv)/providers/Microsoft.ContainerInstance/serviceAssociationLinks/default # Delete the service association link for the subnet az resource delete --ids $SAL_ID --api-version 2021-10-01 # Delete the subnet delegation to Azure Container Instances az network vnet subnet update --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --remove delegations
Próximos passos
Neste artigo, você agendou um pod no nó virtual e atribuiu um endereço IP interno privado. Em vez disso, poderá criar uma implementação de serviço e direcionar o tráfego para o seu pod através de um balanceador de carga ou controlador de acesso. Para obter mais informações, consulte Criar um controlador de entrada básico no AKS.
Os nós virtuais geralmente são um componente de uma solução de dimensionamento no AKS. Para obter mais informações sobre soluções de dimensionamento, consulte os seguintes artigos: