Criar e configurar Namespaces de Frota Gerenciada

Aplica-se a: ✔️ Fleet Manager com cluster de hub

Este artigo mostra-lhe como usar o Fleet Manager para criar e configurar um Espaço de Nomes de Frota Gerido que defina quotas de recursos, políticas de rede e acesso delegado de utilizadores para os namespaces em múltiplos clusters.

Se pretender visualizar ou aceder a Espaços de Nomes de Frota Gerida existentes aos quais tem acesso, consulte ver e aceder a Espaços de Nomes de Frota Gerida.

Limitações conhecidas

  • Quando um Namespace de Frota Gerida adota um único cluster Managed Kubernetes Namespace ou vice-versa, pode levar a conflitos de propriedade. Para evitar problemas, utilize uma política de eliminação definida por keep tanto para a Frota Gerida como para os Kubernetes Namespaces.
  • Os clusters devem ser membros geridos pelo Gestor de Frota que aloja o Espaço de Nomes da Frota Gerida.
  • Os clusters devem ter uma versão Kubernetes de pelo menos 1.30.0. Clusters abaixo desta versão não bloqueiam os utilizadores do cluster de modificar os recursos Kubernetes colocados.
  • Os cargos RBAC atribuídos a um espaço de nomes de Frota Gerida concedem acesso equivalente a quaisquer espaços de nomes Kubernetes não geridos com o mesmo nome em clusters membros.

Antes de começar

  • Instala e configura o Terraform.

  • É necessário ter a CLI do Azure instalada para verificar o namespace da Managed Fleet que o Terraform cria. Para instalar ou atualizar, consulte Instalar a CLI do Azure.

  • Você precisa da extensão fleet CLI do Azure, versão 1.8.0 ou mais recente, para verificar o espaço de nomes da Frota Gerida. Pode instalá-lo e atualizá-lo para a versão mais recente ao utilizar os comandos az extension add e az extension update.

    az extension add --name fleet
    az extension update --name fleet
    
  • Se ainda não tiver um Fleet Manager com um cluster hub, a primeira parte deste artigo cria um para si, recorrendo a um exemplo do Terraform e a um ficheiro de estado separados do exemplo do Managed Fleet Namespace. Se já tiver um, anote o respetivo grupo de recursos e o nome do Fleet Manager e avance para Criar o espaço de nomes da frota gerida utilizando o Terraform.

  • O exemplo pré-requisito do Terraform cria apenas um Gestor de Frotas e um cluster de hub; não cria nem se junta a nenhum cluster membro. Pode criar um espaço de nomes de Frota Gerida e ver a respetiva configuração sem que nenhum cluster membro esteja associado, mas verificar se o espaço de nomes é efetivamente implementado (propagado) para um cluster membro requer pelo menos um cluster AKS associado à Frota. Se não tiveres nenhum, consulta como criar e associar pelo menos um cluster do Azure Kubernetes Service (AKS) à frota seguindo as orientações suportadas existentes.

  • É necessário que o CLI do Azure tenha instalado a versão 2.78.0 ou posterior para completar este artigo. Para instalar ou atualizar, consulte Instalar a CLI do Azure.

  • Precisa da fleet extensão do CLI do Azure versão 1.8.0 ou posterior. Você pode instalá-lo e atualizar para a versão mais recente usando os comandos az extension add e az extension update.

    # Install the extension
    az extension add --name fleet
    
    # Update the extension
    az extension update --name fleet
    
  • Confirma que a versão da extensão da frota é pelo menos 1.8.0 usando o comando az extension show.

    az extension show --name fleet
    
  • Defina as seguintes variáveis de ambiente para o ID da subscrição, grupo de recursos, Frota e Membro da Frota:

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    export FLEET_ID=<fleet-id>
    
  • Defina a assinatura padrão do Azure usando o az account set comando.

    az account set --subscription ${SUBSCRIPTION_ID}
    

Criar um novo espaço de nomes de frota gerenciada

Crie um novo Namespace de Frota Gerida usando o comando az fleet namespace create.

    az fleet namespace create \
        --resource-group $GROUP \
        --fleet-name $FLEET \
        --name my-managed-namespace \ 
        --annotations annotation1=value1 annotation2=value2 \
        --labels team=myTeam label2=value2 \
        --cpu-requests 1m \
        --cpu-limits 4m \
        --memory-requests 1Mi \
        --memory-limits 4Mi \
        --ingress-policy allowAll \
        --egress-policy allowAll \
        --delete-policy keep \
        --adoption-policy never

Observação

Estas definições são opcionais: políticas de rede, quota de computação, política de eliminação e adoção, rótulos e anotações.

Ao utilizar políticas de rede, os utilizadores com uma ação Microsoft.ContainerService/managedClusters/networking.k8s.io/networkpolicies/write, como Azure Kubernetes Service RBAC Writer, no papel do Microsoft Entra ID que lhes foi atribuído, podem adicionar mais políticas de rede através da API Kubernetes.

Por exemplo, se um administrador aplica uma Deny All política para entrada/saída, e um utilizador aplica uma Allow política para um namespace através da API Kubernetes, a Allow política tem prioridade sobre a Deny All política, e o tráfego é autorizado a fluir para o namespace. Este comportamento aditivo é padrão para políticas de rede.

Atribuir acesso a utilizadores ou grupos

Agora pode conceder acesso a um utilizador ao Espaço de Nomes da Frota Gerida nos clusters de membros utilizando uma das funções incorporadas do Azure RBAC.

Crie uma atribuição de função usando o az role assignment create comando.

O exemplo seguinte atribui a um utilizador a função Azure Kubernetes Fleet Manager RBAC Writer for Member Clusters em qualquer cluster que receba o my-managed-namespace Espaço de Nomes de Frota Gerida:

az role assignment create \
    --role "Azure Kubernetes Fleet Manager RBAC Writer for Member Clusters" \
    --assignee <USER-ENTRA-ID> \
    --scope "$FLEET_ID/managedNamespaces/my-managed-namespace"

Adicionar clusters de membros

Você pode controlar em quais clusters membros implantar o namespace gerenciado especificando a lista desejada de nomes de cluster de membros.

Especifique a lista completa de clusters membros nos quais você deseja implantar o namespace gerenciado usando o az fleet namespace create comando com o --member-cluster-names parâmetro. O namespace gerido é propagado para todos os clusters da lista.

Neste exemplo, o namespace gerido é implementado em contoso-prd-01-fm e contoso-prd-02-fm.

az fleet namespace create \
    --resource-group $GROUP \
    --fleet-name $FLEET \
    --name my-managed-namespace \
    --member-cluster-names contoso-prd-01-fm contoso-prd-02-fm

Remover grupos de membros

Pode remover clusters associados de um Namespace de Frota Gerida excluindo-os da lista de clusters associados para o qual deseja criar o namespace.

Especifique a lista de clusters membros nos quais você deseja que o namespace gerenciado permaneça usando o az fleet namespace create comando com o --member-cluster-names parâmetro. O namespace gerido é removido de quaisquer clusters excluídos da lista.

Neste exemplo, o espaço de nomes gerido é removido de contoso-prd-02-fm.

az fleet namespace create \
    --resource-group $GROUP \
    --fleet-name $FLEET \
    --name my-managed-namespace \
    --member-cluster-names contoso-prd-01-fm

Configurar um Namespace de Frota Gerida existente

Pode modificar políticas de rede, quotas de recursos, rótulos e anotações num Namespace de Frota Gerida existente usando o az fleet namespace create comando com valores de parâmetros atualizados. O comando executa uma operação upsert, atualizando o namespace caso já exista.

Importante

Ao atualizar um namespace gerido existente, deve especificar todos os parâmetros que pretende manter, mesmo que não os esteja a alterar. Quaisquer parâmetros que omitas são redefinidos para os valores predefinidos. Isto inclui políticas de rede, quotas de recursos, rótulos, anotações, política de eliminação, política de adoção e nomes de clusters de membros.

O exemplo seguinte atualiza as políticas de rede, quotas de recursos, rótulos e anotações para um namespace gerido existente:

az fleet namespace create \
    --resource-group $GROUP \
    --fleet-name $FLEET \
    --name my-managed-namespace \
    --annotations "updated-annotation=new-value" \
    --labels "team=updatedTeam environment=production" \
    --cpu-requests 1000m \
    --cpu-limits 2000m \
    --memory-requests 1000Mi \
    --memory-limits 1000Mi \
    --ingress-policy allowAll \
    --egress-policy allowAll \
    --delete-policy keep \
    --adoption-policy never \
    --member-cluster-names contoso-prd-01-fm contoso-prd-02-fm

Veja a configuração de um namespace de frota gerida

Consulte os detalhes de um espaço de nomes de frota gerida específico usando o az fleet namespace show comando.

az fleet namespace show \ 
    --resource-group $GROUP \ 
    --fleet-name $FLEET \ 
    --name my-managed-namespace \ 
    -o table 

Sua saída deve ser semelhante à saída de exemplo a seguir:

AdoptionPolicy  DeletePolicy   ETag                                    Location   Name                  ProvisioningState   ResourceGroup
--------------  ------------   -------------------------------------   --------   --------------------  -----------------   -------------
Always          Delete         "aaaaaaaa-0b0b-1c1c-2d2d-333333333333   westus2    my-managed-namespace  Succeeded           test-rg

Eliminar um Namespace de Frota Gestida

Elimine um Namespace de Frota Gerida usando o az fleet namespace delete comando.

az fleet namespace delete \
    --resource-group $GROUP \
    --fleet-name $FLEET \
    --name my-managed-namespace 

Advertência

Eliminar um Namespace Gerido pela Frota com DeletePolicy definido para delete é uma ação permanente. Se tiver dúvidas, deverá atualizar a política para keep para manter o namespace.

As atribuições do Azure RBAC são sempre eliminadas para evitar permissões pendentes.

Criar um novo espaço de nomes de frota gerenciada

Pode criar um novo Espaço de Nomes de Frota Gerido a partir do Gestor de Frotas, ou através do centro Kubernetes.

Começar como Gestor de Frota:

  • No portal do Azure, navegue até o recurso do Azure Kubernetes Fleet Manager.
  • No menu da esquerda, em Recursos da Frota, selecione Espaços de Nomes.
  • Do menu selecione + Criar, depois Namespace de Frota Gerida.

Captura de ecrã do menu do portal Azure para criar um Namespace de Frota Gerenciada no Azure Kubernetes Fleet Manager.

Começando no centro Kubernetes:

Captura de ecrã do menu Kubernetes Center do portal Azure para criar um Namespace de Frota Gerida.

  • Selecione uma das seguintes opções para o Escopo:
    • Novo - criar um novo namespace Kubernetes que não existe no cluster do Hub do Fleet Manager. Introduza um Nome para o novo espaço de nomes.
    • Converter para Gerenciado - usar um namespace Kubernetes existente no cluster hub do Fleet Manager. Selecione o Namespace da lista de namespaces no cluster do hub do Gestor de Frotas.

Captura de ecrã do portal Azure mostrando o separador Basics com detalhes do projeto concluído para um novo espaço de nomes de frota gerida.

Atribuir acesso a utilizadores ou grupos

Selecione os utilizadores e grupos Microsoft Entra que acedem ao Namespace da Frota Gerida nos clusters para os quais está distribuído.

Captura de ecrã do portal Azure a mostrar detalhes de acesso completos para um novo espaço de nomes de frota gerida.

Observação

Esta etapa é opcional. Pode criar e distribuir um Namespace de Frota Gerida sem atribuir utilizadores ou grupos. Isto permite-lhe distribuir o namespace sem conceder acesso imediatamente.

Adicionar políticas de rede e quota de computação

Controla o fluxo de tráfego de rede para dentro e fora do namespace em cada cluster para onde é distribuído, juntamente com a definição das quotas de recursos de CPU e memória para o namespace.

Captura de ecrã do portal Azure mostrando políticas de Rede concluídas e quota de computação para um novo Espaço de Nomes de Frota Gerida.

Observação

Estas definições são opcionais. Pode criar e distribuir um Namespace de Frota Gerida sem a aplicação de políticas de rede ou controlos de quotas.

Utilizadores com uma Microsoft.ContainerService/managedClusters/networking.k8s.io/networkpolicies/write ação, como Azure Kubernetes Service RBAC Writer, na função Microsoft Entra ID que lhes é atribuída, podem adicionar mais políticas de rede através da API Kubernetes.

Por exemplo, se um administrador aplica uma Deny All política para entrada/saída, e um utilizador aplica uma Allow política para um namespace através da API Kubernetes, a Allow política tem prioridade sobre a Deny All política, e o tráfego é autorizado a fluir para o namespace. Este comportamento aditivo é padrão para políticas de rede.

Agrupamentos selecionados de membros

Defina a que clusters de membros deve distribuir o namespace gerido adicionando-os da seguinte forma.

  • No menu, seleciona + Adicionar.
  • No diálogo Selecionar clusters de membros , procure os clusters de membros e selecione-os assinalando a caixa.
  • Por fim, escolha Selecionar para adicionar os clusters de membros.

Captura de ecrã do portal Azure mostrando dois clusters membros selecionados para alojar um novo Namespace de Frota Gerida.

Observação

Esta etapa é opcional. Se não fornecer nenhum cluster membro, o Managed Fleet Namespace é implementado apenas no cluster hub do Gestor de Frotas. Podes adicionar clusters de membros mais tarde.

Configurar etiquetas, anotações e marcadores

Defina etiquetas e anotações Kubernetes opcionais, e etiquetas Azure Resource Manager (ARM) que forneçam metadados que possam ser usados para automação e gestão de recursos.

Captura de ecrã do portal Azure a mostrar definições para etiquetas e anotações para um novo Namespace de Frota Gerida.

Observação

Esta etapa é opcional. Pode gerir rótulos, anotações e tags mais tarde.

Criar o Espaço de Nomes da Frota Gerida

Depois de configurar todas as propriedades para o novo Espaço de Nomes de Frota Gerida, pode confirmar os detalhes antes de criar o espaço de nomes selecionando Criar.

É imediatamente iniciada uma implementação do Azure Resource Manager, que inicia uma colocação de carga de trabalho no Fleet Manager para distribuir o namespace para os clusters selecionados.

Uma vez concluída a implementação, pode encontrar o Espaço de Nomes de Frota Gerida na lista de espaços de nomes do Gestor de Frota.

Captura de ecrã do portal Azure com o novo Espaço de Nomes de Frota Gerida listado juntamente com outros espaços de nomes no cluster do hub.

Para rever a distribuição do namespace do Kubernetes nos vários clusters, use Colocações de recursos e procure a colocação de recursos com o mesmo nome que o Namespace de Frota Gerida.

Captura de ecrã do portal Azure mostrando o estado de colocação de recursos do novo Espaço de Nomes da Frota Gerida.

Configurar um Namespace de Frota Gerida existente

Pode localizar um Namespace de Frota Gerida dentro do Gestor de Frotas, ou através do centro Kubernetes.

Começar como Gestor de Frota:

  • No portal do Azure, navegue até o recurso do Azure Kubernetes Fleet Manager.
  • No menu da esquerda, em Recursos da Frota, selecione Espaços de Nomes.

Começando no centro Kubernetes:

Modificar configuração

Modificar políticas de rede, quotas de recursos, rótulos, anotações e tags selecionando editar ao lado do item apropriado no ecrã de visão geral do Namespace da Frota Gerida.

Selecionar editar ao lado de etiquetas, anotações ou etiquetas abre uma caixa de diálogo onde pode modificar qualquer um destes três itens.

Selecionar editar ao lado de qualquer uma das opções de política de rede ou quota de recursos abre uma caixa de diálogo onde pode modificar qualquer um destes itens.

Captura de ecrã do portal Azure mostrando o painel de visão geral de um Namespace de Managed Fleet com opções de edição destacadas em caixas vermelhas.

Modificar o acesso de utilizadores ou grupos

Um Namespace de Frota Gerida é um recurso do Azure Resource Manager (ARM), pelo que a gestão do acesso de utilizadores e grupos pode ser feita selecionando controlo de acesso (IAM) na navegação do lado esquerdo no ecrã de visão geral do Namespace de Frota Gerida.

Modificar clusters de membros

Na visão geral do Espaço de Nomes da Frota Gerida, selecione clusters membros na navegação à esquerda.

Para remover clusters de membros:

  • Selecione os clusters a remover assinalando a caixa à esquerda da linha.
  • No topo da navegação, selecione Remover.
  • Confirma a ação e seleciona Remover.

Para adicionar clusters de membros:

  • No menu, selecionar + Adicionar.
  • No diálogo Adicionar clusters de membros , procure os clusters de membros e selecione-os assinalando a caixa.
  • Por fim, escolhe Adicionar para adicionar os clusters membros.

Captura de ecrã do portal Azure mostrando um cluster de membro único selecionado, pronto para ser removido do Espaço de Nomes da Frota Gerida.

Uma vez que os clusters que alojam o Namespace da Frota Gerida são modificados, a visão geral é atualizada para mostrar os clusters que alojam ativamente o namespace.

Eliminar um Namespace de Frota Gestida

Na visão geral do Espaço de Nomes da Frota Gerida, selecione Eliminar no topo da navegação.

Na confirmação Eliminar Espaço de Nomes de Frota Gerida, selecione a opção que deseja:

  • Mantenha o namespace, remova as capacidades de gestão: o Namespace de Frota Gerida é convertido num namespace Kubernetes padrão, permanecendo no cluster hub do Gestor de Frotas e clusters membros, mas já não gerido pelo Azure Resource Manager (ARM).
  • Eliminar o espaço de nomes e todos os recursos associados: o recurso ARM do Espaço de Nomes da Frota Gerida é eliminado, juntamente com o espaço de nomes Kubernetes tanto no cluster hub do Gestor de Frotas como nos clusters membros.

Advertência

Eliminar o namespace e todos os recursos associados é uma ação permanente. Se não tiveres a certeza, deves optar por manter o namespace.

Em ambos os casos, as atribuições do Azure RBAC são eliminadas para evitar permissões pendentes.

Criar um novo espaço de nomes de frota gerenciada

As amostras do Terraform nesta secção estão distribuídas por dois diretórios, cada um com o seu próprio estado do Terraform: uma amostra de pré-requisito que cria um Gestor de Frotas com um cluster central, e uma amostra de cenário que cria o espaço de nomes da frota gerida num Gestor de Frotas existente. Ao manter o Gestor de Frota e o Espaço de Nomes de Frota Gerido em estados separados, pode criar um Espaço de Nomes de Frota Gerido contra qualquer Gestor de Frota existente com um cluster de hubs. Esta configuração funciona quer tenhas criado o Fleet Manager usando o Terraform ou não. Podes destruir um Namespace de Frota Gerida sem afetar o Gestor de Frota ou qualquer outro Namespace de Frota Gerido nele.

Crie um gestor de frotas com um cluster hub

Se já tens um Gestor de Frotas com um cluster de hubs, salta para Criar o Espaço de Nomes de Frota Gerido com o Terraform e usa o seu grupo de recursos e o nome do Gestor de Frotas nessa secção.

  1. Crie um diretório para testar o código de exemplo do Terraform e torne-o o diretório atual. Utilize um diretório separado daquele que utiliza para o exemplo do namespace de frota gerida mais adiante neste artigo, porque cada exemplo mantém o seu próprio estado do Terraform.

  2. Crie um arquivo chamado providers.tfe insira o seguinte código:

    terraform {
      required_version = ">= 1.5.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
        azapi = {
          source  = "Azure/azapi"
          version = "~> 2.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~> 3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    provider "azapi" {}
    
  3. Crie um arquivo chamado variables.tfe insira o seguinte código:

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group"
    }
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
    }
    variable "fleet_name" {
      type        = string
      description = "Name of the fleet resource. If left blank, this value is randomly generated."
      default     = ""
    }
    
  4. Crie um arquivo chamado main.tfe insira o seguinte código:

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "azurerm_resource_group" "fleet_rg" {
      name     = random_pet.rg_name.id
      location = var.resource_group_location
    }
    
    resource "random_string" "fleet_name" {
      length  = 54
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    locals {
      fleet_name = coalesce(var.fleet_name != "" ? var.fleet_name : null, random_string.fleet_name.result)
    }
    
    # A fleet with a hub cluster is required for features such as managed namespaces,
    # which the plain azurerm_kubernetes_fleet_manager resource cannot provision because
    # its hub_profile attribute is deprecated and is no longer sent to the API.
    resource "azapi_resource" "fleet" {
      type      = "Microsoft.ContainerService/fleets@2025-03-01"
      name      = local.fleet_name
      location  = azurerm_resource_group.fleet_rg.location
      parent_id = azurerm_resource_group.fleet_rg.id
    
      body = {
        properties = {
          hubProfile = {
            dnsPrefix = local.fleet_name
          }
        }
      }
    
      identity {
        type = "SystemAssigned"
      }
    
      response_export_values = ["name"]
    }
    
  5. Crie um arquivo chamado outputs.tfe insira o seguinte código:

    output "resource_group_name" {
      value = azurerm_resource_group.fleet_rg.name
    }
    
    output "fleet_name" {
      value = azapi_resource.fleet.name
    }
    

O exemplo cria um grupo de recursos e um Gestor de Frotas com um cluster de hub usando o azapi_resource tipo de recurso em vez de azurerm_kubernetes_fleet_manager, porque o azurerm atributo do hub_profile fornecedor está obsoleto e a API da Frota já não o aceita. Se não definires a fleet_name variável, o Terraform gera um nome aleatório para ti.

Execute terraform init para inicializar a implantação do Terraform. Este comando descarrega os fornecedores Azure necessários para gerir os seus recursos Azure.

terraform init

Executa o terraform fmt para formatar os ficheiros de configuração de forma consistente.

terraform fmt

Execute terraform validate para confirmar que os ficheiros de configuração são sintaticamente válidos.

terraform validate

Execute o comando terraform plan para criar um plano de execução.

terraform plan -out main.tfplan

Executa o Terraform Application para aplicar o plano de execução à tua infraestrutura cloud.

terraform apply main.tfplan

Guarde os nomes do grupo de recursos e do Gestor de Frotas dos resultados do Terraform. Precisa destes valores para o exemplo de namespace da frota gerida.

resource_group_name=$(terraform output -raw resource_group_name)
fleet_manager_name=$(terraform output -raw fleet_name)

Este exemplo não cria nem junta nenhum cluster de membros à Frota. Verifique se o Gestor de Frotas já tem clusters de membros ligados usando o az fleet member list comando:

az fleet member list \
    --resource-group $resource_group_name \
    --fleet-name $fleet_manager_name \
    -o table

Se este comando não devolver nenhum membro, ainda pode concluir a secção seguinte para criar um namespace de frota gerida e consultar a respetiva configuração, mas não pode verificar se é implementado num cluster membro até criar e associar pelo menos um cluster do AKS à frota.

Criar o espaço de nomes da frota gerida com o Terraform

  1. Crie um novo diretório separado para testar o código Terraform deste exemplo e torne-o o diretório atual.

  2. Crie um arquivo chamado providers.tfe insira o seguinte código:

    terraform {
      required_version = ">= 1.5.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
        azapi = {
          source  = "Azure/azapi"
          version = "~> 2.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    provider "azapi" {}
    
  3. Crie um arquivo chamado variables.tfe insira o seguinte código:

    variable "resource_group_name" {
      type        = string
      description = "Name of the resource group that contains the Fleet Manager."
    }
    
    variable "fleet_name" {
      type        = string
      description = "Name of the existing Azure Kubernetes Fleet Manager."
    }
    
    variable "managed_namespace_name" {
      type        = string
      description = "Name of the Managed Fleet Namespace."
      default     = "platform-ns"
    
      validation {
        condition     = can(regex("^[a-z0-9]([-a-z0-9]*[a-z0-9])?$", var.managed_namespace_name)) && length(var.managed_namespace_name) <= 63
        error_message = "The managed namespace name must be 1-63 characters, use lowercase letters, numbers, or hyphens, and start and end with a lowercase letter or number."
      }
    }
    
    variable "tags" {
      type        = map(string)
      description = "Tags to apply to the Managed Fleet Namespace."
      default = {
        environment = "demo"
        managed_by  = "terraform"
      }
    }
    
  4. Crie um arquivo chamado main.tfe insira o seguinte código:

    data "azurerm_client_config" "current" {}
    
    data "azurerm_resource_group" "fleet_rg" {
      name = var.resource_group_name
    }
    
    locals {
      fleet_id = "/subscriptions/${data.azurerm_client_config.current.subscription_id}/resourceGroups/${var.resource_group_name}/providers/Microsoft.ContainerService/fleets/${var.fleet_name}"
    }
    
    resource "azapi_resource" "managed_fleet_namespace" {
      type      = "Microsoft.ContainerService/fleets/managedNamespaces@2025-08-01-preview"
      name      = var.managed_namespace_name
      parent_id = local.fleet_id
      location  = data.azurerm_resource_group.fleet_rg.location
      tags      = var.tags
    
      body = {
        properties = {
          adoptionPolicy = "Never"
          deletePolicy   = "Keep"
          managedNamespaceProperties = {
            labels = {
              team        = "platform"
              environment = "demo"
            }
            annotations = {
              owner                          = "aks-fleet-demo"
              "app.kubernetes.io/managed-by" = "terraform"
            }
            defaultNetworkPolicy = {
              ingress = "AllowAll"
              egress  = "AllowAll"
            }
            defaultResourceQuota = {
              cpuRequest    = "100m"
              cpuLimit      = "500m"
              memoryRequest = "128Mi"
              memoryLimit   = "512Mi"
            }
          }
          propagationPolicy = {
            type = "Placement"
            placementProfile = {
              defaultClusterResourcePlacement = {
                policy = {
                  placementType = "PickAll"
                }
              }
            }
          }
        }
      }
    }
    
    
    
  5. Crie um arquivo chamado outputs.tfe insira o seguinte código:

    output "managed_fleet_namespace_id" {
      description = "Resource ID of the Managed Fleet Namespace."
      value       = azapi_resource.managed_fleet_namespace.id
    }
    
  6. Crie um arquivo chamado terraform.tfvars.examplee insira o seguinte código:

    resource_group_name    = "<resource-group-name>"
    fleet_name             = "<fleet-manager-name>"
    managed_namespace_name = "platform-ns"
    
  7. Copiar terraform.tfvars.example no terraform.tfvars mesmo diretório. Defina resource_group_name e fleet_name para os valores que guardou na secção anterior (ou para os valores do seu Gestor de Frota atual). Define managed_namespace_name para o nome que queres para o namespace.

    cp terraform.tfvars.example terraform.tfvars
    

Esta amostra não cria o seu próprio Gestor de Frota. Em vez disso, utiliza as fontes de dados azurerm_resource_group e azurerm_client_config para pesquisar o grupo de recursos e a subscrição atual. Depois, constrói o ID de recurso do Gestor de Frotas existente nomeado na fleet_name variável para usar como pai do Espaço de Nomes da Frota Gerida. É assim que o exemplo utiliza as informações do Gestor de Frotas a partir do estado de pré-requisito, ou de qualquer Gestor de Frotas pré-existente com um cluster central, sem partilhar o estado do Terraform entre os dois exemplos.

O exemplo cria o namespace utilizando o tipo de recurso azapi_resource na versão de pré-visualização da API 2025-08-01-preview de Microsoft.ContainerService/fleets/managedNamespaces, porque este tipo de recurso ainda não tem um recurso azurerm nativo. As seguintes propriedades estão codificadas main.tf e não são expostas como variáveis. Para os alterar, edite o body.properties bloco diretamente:

  • adoptionPolicyestá definido como Never e deletePolicy está definido como Keep, correspondendo aos valores predefinidos da CLI do Azure mostrados anteriormente neste artigo.
  • managedNamespaceProperties.labels define os rótulos team=platform Kubernetes e environment=demo.
  • managedNamespaceProperties.annotations define as anotações owner=aks-fleet-demo de Kubernetes e app.kubernetes.io/managed-by=terraform.
  • managedNamespaceProperties.defaultNetworkPolicy define tanto ingress como egress para AllowAll.
  • managedNamespaceProperties.defaultResourceQuota define cpuRequest=100m, cpuLimit=500m, memoryRequest=128Mi, e memoryLimit=512Mi.
  • propagationPolicy.placementProfile.defaultClusterResourcePlacement.policy.placementType está definido como PickAll, pelo que o namespace é propagado para todos os clusters membros atualmente ligados à Frota. Ao contrário do parâmetro da --member-cluster-names CLI do Azure, este exemplo não expõe uma forma de direcionar clusters específicos de membros nomeados. Para restringir a colocação a um subconjunto de clusters, utilize os separadores da CLI do Azure ou do portal do Azure nesta página, ou expanda o bloco placementProfile em main.tf, seguindo a referência de modelo ARM para frotas do Microsoft.ContainerService.

A única variável que corresponde às etiquetas Azure Resource Manager (ARM) no recurso Managed Fleet Namespace, em vez das etiquetas Kubernetes no próprio namespace, é tags. É opcional e assume por defeito { environment = "demo", managed_by = "terraform" } em variables.tf se não o definires. O exemplo terraform.tfvars.example não inclui tags, por isso adiciona-o ao teu terraform.tfvars ficheiro apenas se quiseres sobrepor o padrão.

Execute terraform init para inicializar a implantação do Terraform.

terraform init

Executa o terraform fmt para formatar os ficheiros de configuração de forma consistente.

terraform fmt

Execute terraform validate para confirmar que os ficheiros de configuração são sintaticamente válidos.

terraform validate

Execute o comando terraform plan para criar um plano de execução.

terraform plan -out main.tfplan

Executa o Terraform Application para aplicar o plano de execução à tua infraestrutura cloud.

terraform apply main.tfplan

Atribuir acesso a utilizadores ou grupos

O Terraform não gere atribuições de funções do Azure RBAC neste exemplo. Conceda a um utilizador acesso ao namespace da Managed Fleet em todos os seus clusters membros, utilizando o comando az role assignment create. Use a saída do Terraform como escopo:

managed_namespace_id=$(terraform output -raw managed_fleet_namespace_id)
az role assignment create \
    --role "Azure Kubernetes Fleet Manager RBAC Writer for Member Clusters" \
    --assignee <USER-ENTRA-ID> \
    --scope "$managed_namespace_id"

Adicionar ou remover clusters de membros

Como a amostra propagationPolicy usa PickAll, o namespace propaga-se sempre para todos os clusters membros atuais da Frota. A adição de um cluster membro ao Fleet adiciona-lhe automaticamente o namespace, e a remoção de um cluster membro do Fleet remove-lhe automaticamente o namespace. O exemplo não suporta direcionar uma lista específica de nomes de clusters de membros da mesma forma que o parâmetro da --member-cluster-names CLI do Azure faz. Se precisar de selecionar clusters de membros específicos, use antes os separadores CLI do Azure ou Portal do Azure nesta página.

Configurar um Namespace de Frota Gerida existente

O Terraform efetua uma operação de upsert no tipo azapi_resource, pelo que pode atualizar um espaço de nomes de frota gerida existente modificando o exemplo e aplicando-o novamente.

  • Para alterar as etiquetas ARM, adicione ou atualize a tags variável em terraform.tfvars (é opcional e não está incluída em terraform.tfvars.example).
  • Para alterar os rótulos, anotações, políticas de rede ou quotas de recursos do Kubernetes, edite os valores correspondentes no managedNamespaceProperties bloco de main.tf. O exemplo não expõe estas definições como variáveis.

Depois de fazeres as alterações, executa novamente terraform plan -out main.tfplan e terraform apply main.tfplan no diretório do espaço de nomes da frota gerida.

Veja a configuração de um namespace de frota gerida

A saída do Terraform apenas devolve o ID de recurso do Namespace da Frota Gerida. Extrair os nomes do grupo de recursos, do Gestor de Frota e dos namespaces do ID. Depois, visualize os detalhes do namespace usando o az fleet namespace show comando.

managed_namespace_id=$(terraform output -raw managed_fleet_namespace_id)
resource_group_name=$(echo $managed_namespace_id | cut -d'/' -f5)
fleet_manager_name=$(echo $managed_namespace_id | cut -d'/' -f9)
managed_namespace_name=$(echo $managed_namespace_id | cut -d'/' -f11)
az fleet namespace show \
    --resource-group $resource_group_name \
    --fleet-name $fleet_manager_name \
    --name $managed_namespace_name \
    -o table

Para analisar a distribuição do espaço de nomes pelos clusters membros, utilize Posicionamentos de recursos e procure o posicionamento de recursos com o mesmo nome que o Espaço de Nomes da Frota Gerida. A revisão da configuração do namespace com az fleet namespace show não requer que quaisquer clusters membros estejam associados à Fleet, mas a revisão do estado da implementação ou do posicionamento requer pelo menos um cluster membro associado à Fleet. Se ainda não tiveres um, vê primeiro criar e juntar pelo menos um cluster do Azure Kubernetes Service (AKS) à frota.

Eliminar um Namespace de Frota Gestida

Apaga o Namespace da Frota Gerida antes de eliminares o Gestor de Frotas a que pertence.

No diretório que contém o exemplo de Namespace de Frota Gerida, execute terraform plan com a opção -destroy para criar um plano de destruição para execução.

terraform plan -destroy -out main.destroy.tfplan

Execute terraform apply para aplicar o plano de destruição.

terraform apply main.destroy.tfplan

Advertência

Eliminar um Namespace de Frota Gerida configurado com um deletePolicy de Delete é uma ação permanente. Esta amostra define deletePolicy para Keep, de modo que, após a destruição do recurso ARM, o espaço de nomes Kubernetes permanece no cluster hub Fleet Manager e nos clusters membros, mas já não é gerido pelo Azure Resource Manager. Se quiseres que o namespace seja removido em todo o lado, muda deletePolicy para Delete in main.tf e volta a aplicar antes de destruires o recurso.

As atribuições RBAC do Azure com âmbito no Namespace da Frota Gerida são sempre eliminadas para evitar permissões pendentes.

Se implementaste o Fleet Manager com um exemplo de pré-requisito do cluster hub apenas para este artigo, e não precisas dele para mais nada, muda para o diretório desse exemplo e destrói-o também.

terraform plan -destroy -out main.destroy.tfplan
terraform apply main.destroy.tfplan

Advertência

Este comando elimina o Gestor de Frotas, o seu cluster de hub e o grupo de recursos criado pela amostra pré-requisito, não apenas o Gestor de Frota. Confirma que o grupo de recursos não contém outros recursos que queiras manter, e que nenhum outro Namespace de Frota Gerida ou clusters de membros ainda depende do Gestor de Frotas, antes de executares este comando.

Próximos passos