Creare e configurare spazi dei nomi della flotta gestita

Si applica a: ✔️ Gestione flotta con un cluster hub

Questo articolo illustra come usare Fleet Manager per creare e configurare uno spazio dei nomi della flotta gestita che definisce quote di risorse, criteri di rete e accesso utente delegato per gli spazi dei nomi in più cluster.

Se si vuole visualizzare o accedere agli spazi dei nomi della flotta gestita esistenti a cui si ha accesso, vedere Visualizzare e accedere agli spazi dei nomi della flotta gestita.

Limitazioni note

  • Quando uno spazio dei nomi gestito della flotta adotta un singolo cluster spazio dei nomi Kubernetes gestito o viceversa, può portare a conflitti di proprietà. Per evitare questo problema, usare un criterio di eliminazione di keep gli spazi dei nomi gestiti della flotta e Kubernetes.
  • I cluster devono essere membri gestiti da Fleet Manager che ospita lo spazio dei nomi della flotta gestita.
  • I cluster devono avere una versione kubernetes di almeno 1.30.0. I cluster seguenti di questa versione non impediranno agli utenti del cluster di modificare le risorse Kubernetes inserite.
  • I ruoli di controllo degli accessi in base al ruolo assegnati a un ambito dello spazio dei nomi della flotta gestita concedono l'accesso equivalente a qualsiasi spazio dei nomi Kubernetes non gestito con lo stesso nome nei cluster membri.

Prima di iniziare

  • Installare e configurare Terraform.

  • Per verificare il namespace della flotta gestita creato da Terraform, è necessario che interfaccia della riga di comando di Azure sia installato. Per installare o eseguire l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

  • È necessaria l'estensione fleet interfaccia della riga di comando di Azure versione 1.8.0 o successiva per verificare lo spazio dei nomi della flotta gestita. È possibile installarlo e aggiornarlo alla versione più recente usando i az extension add comandi e az extension update .

    az extension add --name fleet
    az extension update --name fleet
    
  • Se non si dispone già di un Fleet Manager dotato di un cluster hub, la prima parte di questo articolo ne crea uno per l'utente utilizzando un esempio Terraform separato e uno state distinto rispetto all'esempio Managed Fleet Namespace. Se ne hai già uno, prendi nota del gruppo di risorse e del nome di Fleet Manager e vai a Creare il namespace di Managed Fleet con Terraform.

  • L'esempio Terraform dei prerequisiti crea solo un Fleet Manager e un cluster hub; non crea né aggiunge alcun cluster membro. È possibile creare un namespace di Managed Fleet e visualizzarne la configurazione senza che vi siano cluster membri associati, ma per verificare che il namespace venga effettivamente distribuito (propagato) a un cluster membro è necessario che almeno un cluster AKS sia associato alla Fleet. Se non è disponibile, vedere Creare e aggiungere almeno un cluster Servizio Azure Kubernetes (AKS) alla flotta usando le linee guida supportate esistenti.

  • Per completare questo articolo, è necessario avere installato interfaccia della riga di comando di Azure versione 2.78.0 o successiva. Per installare o eseguire l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

  • È necessaria l'estensione della fleet interfaccia della riga di comando di Azure versione 1.8.0 o più recente. È possibile installarlo e aggiornarlo alla versione più recente usando i az extension add comandi e az extension update .

    # Install the extension
    az extension add --name fleet
    
    # Update the extension
    az extension update --name fleet
    
  • Verificare che la versione dell'estensione fleet sia almeno 1.8.0 usando il az extension show comando .

    az extension show --name fleet
    
  • Impostare le seguenti variabili di ambiente per l'ID sottoscrizione, il gruppo di risorse, la flotta e il membro della flotta:

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    export FLEET_ID=<fleet-id>
    
  • Impostare la sottoscrizione di Azure predefinita usando il az account set comando .

    az account set --subscription ${SUBSCRIPTION_ID}
    

Creare un nuovo namespace della flotta gestita

Creare un nuovo spazio dei nomi della flotta gestita usando il az fleet namespace create comando .

    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

Annotazioni

Queste impostazioni sono facoltative: criteri di rete, quota di calcolo, criteri di eliminazione e adozione, etichette e annotazioni.

Quando si usano i criteri di rete, gli utenti con un'azione Microsoft.ContainerService/managedClusters/networking.k8s.io/networkpolicies/write , ad esempio servizio Azure Kubernetes RBAC Writer, nel ruolo ID Microsoft Entra a cui sono assegnati possono aggiungere altri criteri di rete tramite l'API Kubernetes.

Ad esempio, se un amministratore applica una Deny All policy per l'ingresso/uscita e un utente applica una Allow policy per uno spazio dei nomi tramite l'API Kubernetes, la Allow policy ha la priorità sulla Deny All policy e il traffico può fluire nello spazio dei nomi. Questo comportamento aggiuntivo è standard per i criteri di rete.

Assegnare l'accesso a un utente o a un gruppo

È ora possibile concedere l'accesso a un utente per lo spazio dei nomi della flotta gestita nei cluster membri usando uno dei ruoli predefiniti del controllo degli accessi in base al ruolo di Azure.

Creare un'assegnazione di ruolo usando il az role assignment create comando .

L'esempio seguente assegna a un utente il ruolo scrittura del controllo degli accessi in base al ruolo di Gestione flotta Kubernetes di Azure per i cluster membri in qualsiasi cluster che riceve lo spazio dei nomi gestito della flotta my-managed-namespace:

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"

Aggiungi gruppi membri

È possibile controllare i cluster membri in cui distribuire lo spazio dei nomi gestito specificando l'elenco desiderato di nomi di cluster membri.

Specificare l'elenco completo dei cluster membri a cui si vuole distribuire lo spazio dei nomi gestito usando il az fleet namespace create comando con il --member-cluster-names parametro . Lo spazio dei nomi gestito viene propagato a tutti i cluster nell'elenco.

In questo esempio lo spazio dei nomi gestito viene distribuito in 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

Rimuovere i cluster dei membri

È possibile rimuovere i cluster membri da uno spazio dei nomi gestito della flotta escludendoli dall'elenco dei cluster membri in cui si vuole usare lo spazio dei nomi.

Specificare l'elenco dei cluster membro in cui si desidera che lo spazio dei nomi gestito rimanga utilizzando il comando az fleet namespace create con il parametro --member-cluster-names. Lo spazio dei nomi gestito viene rimosso da tutti i cluster esclusi dall'elenco.

In questo esempio lo spazio dei nomi gestito viene rimosso da 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

Configurare un namespace di flotta gestita esistente

È possibile modificare criteri di rete, quote di risorse, etichette e annotazioni in uno spazio dei nomi della flotta gestita esistente usando il az fleet namespace create comando con i valori dei parametri aggiornati. Il comando esegue un'operazione di upsert, aggiornando il namespace nel caso in cui esista già.

Importante

Quando si aggiorna uno spazio dei nomi gestito esistente, è necessario specificare tutti i parametri da conservare, anche se non vengono modificati. Tutti i parametri omessi vengono reimpostati sul valore predefinito. Sono inclusi criteri di rete, quote di risorse, etichette, annotazioni, criteri di eliminazione, criteri di adozione e nomi dei cluster membri.

Nell'esempio seguente vengono aggiornati i criteri di rete, le quote di risorse, le etichette e le annotazioni per uno spazio dei nomi gestito esistente:

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

Visualizzare la configurazione di uno spazio dei nomi della flotta gestita

Visualizzare i dettagli di uno specifico spazio dei nomi della flotta gestita usando il comando az fleet namespace show.

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

L'output dovrebbe essere simile all'output di esempio seguente:

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

Eliminare uno spazio dei nomi gestito della flotta

Eliminare uno spazio dei nomi della flotta gestita usando il az fleet namespace delete comando .

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

Avvertimento

L'eliminazione di uno spazio dei nomi gestito dalla flotta con DeletePolicy impostato su delete è un'azione permanente. Se non si è certi, aggiornare i criteri a keep per mantenere lo spazio dei nomi.

Le assegnazioni di Azure RBAC vengono sempre eliminate per evitare autorizzazioni pendenti.

Creare un nuovo namespace della flotta gestita

È possibile creare un nuovo spazio dei nomi della flotta gestita dall'interno di Fleet Manager o tramite il centro Kubernetes.

A partire da Fleet Manager:

  • Nel portale di Azure, vai alla risorsa Azure Kubernetes Fleet Manager.
  • Nel menu a sinistra, in Risorse flotta, selezionare Namespace.
  • Dal menu, selezionare + Crea, quindi Namespace di flotta gestita.

Screenshot del menu del portale di Azure per la creazione di un Namespace gestito in Azure Kubernetes Fleet Manager.

A partire dal centro Kubernetes:

Screenshot del menu del Centro Kubernetes del portale di Azure per la creazione di un namespace della flotta gestita.

  • Selezionare una delle opzioni seguenti per Ambito:
    • Nuovo : creare un nuovo spazio dei nomi Kubernetes che non esiste nel cluster hub di Fleet Manager. Immettere un nome per il nuovo spazio dei nomi.
    • Converti a gestito : usare uno spazio dei nomi Kubernetes esistente nel cluster hub di Fleet Manager. Selezionare lo Spazio dei nomi nell'elenco degli spazi dei nomi nel cluster hub di Fleet Manager.

Screenshot del portale di Azure che mostra la scheda Informazioni di base con i dettagli del progetto completati per un nuovo spazio dei nomi della flotta gestita.

Assegnare l'accesso a un utente o a un gruppo

Selezionare gli utenti e i gruppi di Microsoft Entra che accedono allo spazio dei nomi Managed Fleet nei cluster a cui è distribuito.

Screenshot del portale di Azure che mostra i dettagli di accesso completati per un nuovo spazio dei nomi della flotta gestita.

Annotazioni

Questo passaggio è facoltativo. È possibile creare e distribuire uno spazio dei nomi della flotta gestita senza assegnare utenti o gruppi. In questo modo è possibile distribuire lo spazio dei nomi senza concedere immediatamente l'accesso.

Aggiungere criteri di rete e quota di calcolo

Controllare il flusso del traffico di rete all'interno e all'esterno dello spazio dei nomi in ogni cluster a cui viene distribuito, oltre a definire le quote di risorse cpu e memoria per lo spazio dei nomi.

Screenshot del portale di Azure che mostra i criteri di Networking completati e la quota di calcolo per un nuovo namespace flotta gestita.

Annotazioni

Queste impostazioni sono facoltative. È possibile creare e distribuire uno spazio dei nomi della flotta gestita senza criteri di rete o controlli di quota applicati.

Gli utenti con un'azione Microsoft.ContainerService/managedClusters/networking.k8s.io/networkpolicies/write, come servizio Azure Kubernetes RBAC Writer, con il ruolo Microsoft Entra ID assegnato possono aggiungere altri criteri di rete tramite l'API Kubernetes.

Ad esempio, se un amministratore applica una Deny All policy per l'ingresso/uscita e un utente applica una Allow policy per uno spazio dei nomi tramite l'API Kubernetes, la Allow policy ha la priorità sulla Deny All policy e il traffico può fluire nello spazio dei nomi. Questo comportamento aggiuntivo è standard per i criteri di rete.

Selezionare i cluster membri

Definire i cluster membri a cui distribuire lo spazio dei nomi gestito aggiungendoli come indicato di seguito.

  • Dal menu selezionare + Aggiungi.
  • Nella finestra di dialogo Seleziona cluster membri cercare i cluster membri e selezionarli selezionando la casella.
  • Infine, scegliere Seleziona per aggiungere i cluster membri.

Screenshot del portale di Azure che mostra due cluster membri selezionati per ospitare un nuovo spazio dei nomi della flotta gestita.

Annotazioni

Questo passaggio è facoltativo. Se non si specifica alcun cluster membro, lo spazio dei nomi della flotta gestita viene distribuito solo nel cluster hub di Fleet Manager. È possibile aggiungere cluster membri in un secondo momento.

Impostare etichette, annotazioni e tag

Definire etichette e annotazioni Kubernetes facoltative e tag di Azure Resource Manager (ARM) che forniscono metadati che possono essere usati per l'automazione e la gestione delle risorse.

Screenshot del portale di Azure che mostra le impostazioni per le etichette e le annotazioni per un nuovo spazio dei nomi della flotta gestita.

Annotazioni

Questo passaggio è facoltativo. È possibile gestire etichette, annotazioni e tag in un secondo momento.

Creare lo spazio dei nomi della flotta gestita

Dopo aver configurato tutte le proprietà per il nuovo spazio dei nomi della flotta gestita, è possibile confermare i dettagli prima di creare lo spazio dei nomi selezionando Crea.

Viene avviata immediatamente una distribuzione di Azure Resource Manager, che avvia un'allocazione del carico di lavoro da parte di Fleet Manager per distribuire lo spazio dei nomi ai cluster selezionati.

Al termine della distribuzione, è possibile trovare lo spazio dei nomi della flotta gestita nell'elenco degli spazi dei nomi per Fleet Manager.

Screenshot del portale di Azure con il nuovo Namespace di Flotta Gestita elencato insieme ad altri namespace nel cluster hub.

Per esaminare la distribuzione del namespace Kubernetes nei vari cluster, usa Posizionamenti delle risorse e cerca il posizionamento delle risorse con lo stesso nome del Managed Fleet Namespace.

Screenshot del portale di Azure che mostra lo stato di posizionamento delle risorse del nuovo spazio dei nomi della flotta gestita.

Configurare un namespace di flotta gestita esistente

Puoi trovare un namespace della flotta gestita in Fleet Manager o tramite Kubernetes Center.

A partire da Fleet Manager:

  • Nel portale di Azure, vai alla risorsa Azure Kubernetes Fleet Manager.
  • Nel menu a sinistra, in Risorse flotta, selezionare Namespace.

A partire dal centro Kubernetes:

Modificare la configurazione

Modificare i criteri di rete, le quote di risorse, le etichette, le annotazioni e i tag selezionando modifica accanto all'elemento appropriato nella schermata panoramica dello spazio dei nomi della flotta gestita.

Selezionando modifica accanto a etichette, annotazioni o tag, si apre una finestra di dialogo in cui è possibile modificare uno di questi tre elementi.

Se si seleziona modifica accanto a uno qualsiasi dei criteri di rete o delle opzioni di quota delle risorse, viene visualizzata una finestra di dialogo in cui è possibile modificare uno qualsiasi di questi elementi.

Screenshot del portale di Azure che mostra la schermata di panoramica di uno spazio dei nomi della flotta gestita con le opzioni di modifica evidenziate nelle caselle rosse.

Modificare l'accesso di utente o di gruppo

Un namespace di flotta gestita è una risorsa di Azure Resource Manager (ARM), quindi è possibile gestire l'accesso a utenti e gruppi selezionando Controllo di accesso (IAM) nel pannello di navigazione a sinistra nella schermata panoramica della gestione del namespace di flotta.

Modificare i cluster membri

Nella panoramica dello Spazio dei nomi della flotta gestita selezionare Cluster membri nella barra di spostamento a sinistra.

Per rimuovere i cluster membri:

  • Selezionare i cluster da rimuovere selezionando la casella a sinistra della riga.
  • Nella barra di spostamento superiore selezionare Rimuovi.
  • Confermare l'azione e selezionare Rimuovi.

Per aggiungere i cluster membri:

  • Dal menu selezionare + Aggiungi.
  • Nella finestra di dialogo Aggiungi cluster membri cercare i cluster membri e selezionarli selezionando la casella.
  • Infine, scegliere Aggiungi per aggiungere i cluster membri.

Screenshot del portale di Azure che mostra un singolo cluster membro selezionato pronto per essere rimosso dallo spazio dei nomi della flotta gestita.

Dopo aver modificato i cluster che ospitano lo spazio dei nomi Managed Fleet, la panoramica viene aggiornata per visualizzare i cluster che ospitano attivamente lo spazio dei nomi.

Eliminare uno spazio dei nomi gestito della flotta

Nella panoramica dello spazio dei nomi della flotta gestita selezionare Elimina nella barra di navigazione superiore.

Nella conferma Elimina spazio dei nomi della flotta gestita selezionare l'opzione desiderata:

  • Mantenere il namespace, rimuovere le funzionalità di gestione: il namespace della flotta gestita viene convertito in un namespace Kubernetes standard, che rimane nel cluster hub di Fleet Manager e nei cluster membri, ma non è più gestito da Azure Resource Manager (ARM).
  • Eliminare lo spazio dei nomi e tutte le risorse associate: la risorsa ARM dello spazio dei nomi della flotta gestita viene eliminata, insieme allo spazio dei nomi Kubernetes sia nell'hub del Fleet Manager che nei cluster dei membri.

Avvertimento

L'eliminazione dello spazio dei nomi e di tutte le risorse associate è un'azione permanente. Se non si è certi, scegliere di mantenere lo spazio dei nomi.

In entrambi i casi, le assegnazioni del controllo degli accessi in base al ruolo di Azure vengono eliminate per evitare autorizzazioni in sospeso.

Creare un nuovo namespace della flotta gestita

Gli esempi Terraform in questa sezione sono suddivisi in due directory, ciascuna con il proprio stato Terraform: un esempio preliminare che crea un Fleet Manager con un cluster hub e un esempio di scenario che crea il Managed Fleet Namespace in un Fleet Manager esistente. Mantenendo Fleet Manager e il namespace della flotta gestita come risorse separate, è possibile creare un namespace della flotta gestita per qualsiasi Fleet Manager esistente dotato di un cluster hub. Questa configurazione funziona indipendentemente dal fatto che sia stato creato o meno Fleet Manager usando Terraform. È possibile distruggere uno spazio dei nomi della flotta gestita senza influire su Fleet Manager o su altri spazi dei nomi della flotta gestita.

Creare un Fleet Manager utilizzando un cluster hub

Se si dispone già di un Fleet Manager con un cluster hub, passa a Creare il namespace della flotta gestita con Terraform e usa il relativo gruppo di risorse e il nome del Fleet Manager in quella sezione.

  1. Creare una directory in cui testare il codice Terraform di esempio e impostarla come directory corrente. Usare una directory separata da quella utilizzata per l'esempio Managed Fleet Namespace più avanti nell'articolo, perché ogni esempio mantiene un proprio stato di Terraform.

  2. Creare un file denominato providers.tfe inserire il codice seguente:

    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. Creare un file denominato variables.tfe inserire il codice seguente:

    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. Creare un file denominato main.tfe inserire il codice seguente:

    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. Creare un file denominato outputs.tfe inserire il codice seguente:

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

L'esempio crea un gruppo di risorse e un Fleet Manager con un cluster hub usando il tipo di risorsa azapi_resource anziché azurerm_kubernetes_fleet_manager, perché l'attributo hub_profile del provider azurerm è deprecato e l'API Fleet non lo accetta più. Se non si imposta la fleet_name variabile, Terraform genera automaticamente un nome casuale.

Per inizializzare la distribuzione di Terraform, eseguire terraform init. Questo comando scarica i provider di Azure necessari per gestire le risorse Azure.

terraform init

Eseguire terraform fmt per formattare i file di configurazione in modo coerente.

terraform fmt

Eseguire terraform validate per verificare che i file di configurazione siano sintatticamente validi.

terraform validate

Eseguire terraform plan per creare un piano di esecuzione.

terraform plan -out main.tfplan

Esegui terraform apply per applicare il piano di esecuzione all'infrastruttura cloud.

terraform apply main.tfplan

Salvare il gruppo di risorse e i nomi di Fleet Manager dagli output di Terraform. Questi valori sono necessari per l'esempio dello spazio dei nomi della flotta gestita.

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

Questo esempio non crea o aggiunge alcun cluster membro alla Fleet. Verifica se a Fleet Manager sono già stati aggiunti cluster membri usando il comando az fleet member list:

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

Se questo comando non restituisce membri, è comunque possibile completare la sezione seguente per creare uno spazio dei nomi della flotta gestita e visualizzarne la configurazione, ma non è possibile verificare che venga distribuito in un cluster membro fino a quando non si crea e si aggiunge almeno un cluster del servizio Azure Kubernetes alla flotta.

Creare lo spazio dei nomi della flotta gestita con Terraform

  1. Creare una nuova directory separata per testare il codice Terraform di questo esempio e impostarla come directory corrente.

  2. Creare un file denominato providers.tfe inserire il codice seguente:

    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. Creare un file denominato variables.tfe inserire il codice seguente:

    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. Creare un file denominato main.tfe inserire il codice seguente:

    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. Creare un file denominato outputs.tfe inserire il codice seguente:

    output "managed_fleet_namespace_id" {
      description = "Resource ID of the Managed Fleet Namespace."
      value       = azapi_resource.managed_fleet_namespace.id
    }
    
  6. Creare un file denominato terraform.tfvars.examplee inserire il codice seguente:

    resource_group_name    = "<resource-group-name>"
    fleet_name             = "<fleet-manager-name>"
    managed_namespace_name = "platform-ns"
    
  7. Copia terraform.tfvars.example in terraform.tfvars nella stessa directory. Impostare resource_group_name e fleet_name sui valori salvati nella sezione precedente (o sui valori del Fleet Manager esistente). Imposta managed_namespace_name sul nome che desideri per il namespace.

    cp terraform.tfvars.example terraform.tfvars
    

Questo esempio non crea il proprio Fleet Manager. Invece, usa le origini dati azurerm_resource_group e azurerm_client_config per individuare il gruppo di risorse e la sottoscrizione corrente. Quindi costruisce l'ID della risorsa del Fleet Manager esistente indicato nella variabile fleet_name, da utilizzare come elemento padre per lo spazio dei nomi della flotta gestita. Ecco come l'esempio utilizza le informazioni di Fleet Manager dallo stato dei prerequisiti, oppure da un qualsiasi Fleet Manager preesistente con un cluster hub, senza condividere lo stato di Terraform tra i due esempi.

L'esempio crea lo spazio dei nomi utilizzando il tipo di risorsa azapi_resource con la versione di anteprima dell'API 2025-08-01-preview di Microsoft.ContainerService/fleets/managedNamespaces, perché questo tipo di risorsa non dispone ancora di una risorsa azurerm nativa. Le proprietà seguenti sono hardcoded in main.tf e non vengono esposte come variabili. Per modificarle, modificare direttamente il body.properties blocco:

  • adoptionPolicy è impostato su deletePolicy e Never è impostato su Keep, in corrispondenza delle impostazioni predefinite di interfaccia della riga di comando di Azure illustrate in precedenza in questo articolo.
  • managedNamespaceProperties.labels imposta le etichette Kubernetes team=platform e environment=demo.
  • managedNamespaceProperties.annotations imposta le annotazioni Kubernetes owner=aks-fleet-demo e app.kubernetes.io/managed-by=terraform.
  • managedNamespaceProperties.defaultNetworkPolicy imposta sia ingress che egress su AllowAll.
  • managedNamespaceProperties.defaultResourceQuota imposta cpuRequest=100m, cpuLimit=500m, memoryRequest=128Mi, e memoryLimit=512Mi.
  • propagationPolicy.placementProfile.defaultClusterResourcePlacement.policy.placementType è impostato su PickAll, quindi lo spazio dei nomi viene propagato a ogni cluster membro attualmente aggiunto a Fleet. A differenza del parametro --member-cluster-names di interfaccia della riga di comando di Azure, questo esempio non consente di selezionare cluster membri specifici per nome. Per limitare l'ambito del posizionamento a un subset di cluster, usa le schede Interfaccia della riga di comando di Azure o portale di Azure in questa pagina oppure estendi il blocco placementProfile in main.tf seguendo il riferimento del modello ARM di Microsoft.ContainerService fleets.

L'unica variabile che viene mappata ai tag di Azure Resource Manager (ARM) nella risorsa namespace di Managed Fleet, anziché alle etichette Kubernetes sul namespace stesso, è tags. È facoltativo e, se non viene impostato, il valore predefinito è { environment = "demo", managed_by = "terraform" } in variables.tf. Il file di esempio non include tags, quindi aggiungilo al file terraform.tfvars solo se vuoi sovrascrivere l'impostazione predefinita.

Per inizializzare la distribuzione di Terraform, eseguire terraform init.

terraform init

Eseguire terraform fmt per formattare i file di configurazione in modo coerente.

terraform fmt

Eseguire terraform validate per verificare che i file di configurazione siano sintatticamente validi.

terraform validate

Eseguire terraform plan per creare un piano di esecuzione.

terraform plan -out main.tfplan

Esegui terraform apply per applicare il piano di esecuzione all'infrastruttura cloud.

terraform apply main.tfplan

Assegnare l'accesso a un utente o a un gruppo

Terraform non gestisce le assegnazioni di ruolo RBAC di Azure in questo esempio. Concedi a un utente l'accesso al namespace Managed Fleet in tutti i cluster membri utilizzando il comando az role assignment create. Usare l'output di Terraform come ambito:

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"

Aggiungere o rimuovere cluster membri

Poiché propagationPolicy dell'esempio usa PickAll, lo spazio dei nomi viene sempre propagato a ogni cluster membro corrente di Fleet. L'aggiunta di un cluster membro a Fleet aggiunge automaticamente il namespace, e la rimozione di un cluster membro da Fleet rimuove automaticamente il namespace. L'esempio non consente di specificare un elenco specifico di nomi dei cluster membri come fa il parametro --member-cluster-names di interfaccia della riga di comando di Azure. Se devi selezionare i cluster membri specifici, usa invece i pivot di interfaccia della riga di comando di Azure o del portale di Azure in questa pagina.

Configurare un namespace di flotta gestita esistente

Terraform esegue un'operazione di upsert per il tipo azapi_resource, quindi puoi aggiornare un Managed Fleet Namespace esistente modificando l'esempio e applicandolo nuovamente.

  • Per modificare i tag ARM, aggiungere o aggiornare la tags variabile in terraform.tfvars (è facoltativa e non è inclusa in terraform.tfvars.example).
  • Per modificare le etichette, le annotazioni, i criteri di rete o le quote delle risorse kubernetes, modificare i valori corrispondenti nel managedNamespaceProperties blocco di main.tf. L'esempio non espone queste impostazioni come variabili.

Dopo aver apportato le modifiche, esegui nuovamente terraform plan -out main.tfplan e terraform apply main.tfplan nella directory del namespace della flotta gestita.

Visualizzare la configurazione di uno spazio dei nomi della flotta gestita

L'output di Terraform restituisce solo l'ID della risorsa del Managed Fleet Namespace. Estrai dall'ID i nomi del gruppo di risorse, di Fleet Manager e dello spazio dei nomi. Visualizza quindi i dettagli del namespace usando il comando az fleet namespace show.

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

Per esaminare la distribuzione dello spazio dei nomi nei cluster membri, usa Posizionamenti delle risorse e cerca il posizionamento delle risorse con lo stesso nome dello spazio dei nomi della flotta gestita. La revisione della configurazione dello spazio dei nomi tramite az fleet namespace show non richiede l'aggiunta di alcun cluster membro alla Fleet, ma la revisione dello stato di implementazione o posizionamento richiede almeno un cluster membro aggiunto. Se non ne è ancora disponibile uno, vedere Creare e aggiungere almeno un cluster Servizio Azure Kubernetes (AKS) alla flotta.

Eliminare uno spazio dei nomi gestito della flotta

Elimina il Managed Fleet Namespace prima di eliminare il Fleet Manager a cui appartiene.

Nella directory che contiene l'esempio Managed Fleet Namespace, esegui terraform plan con il flag -destroy per creare un piano di esecuzione per la distruzione.

terraform plan -destroy -out main.destroy.tfplan

Esegui terraform apply per applicare il piano di distruzione.

terraform apply main.destroy.tfplan

Avvertimento

L'eliminazione di un Managed Fleet Namespace configurato con deletePolicy impostato su Delete è un'azione permanente. Questo esempio imposta deletePolicy su Keep, quindi dopo che la risorsa ARM viene eliminata definitivamente, lo spazio dei nomi Kubernetes rimane nel cluster hub di Fleet Manager e nei cluster membri, ma non è più gestito da Azure Resource Manager. Se invece vuoi rimuovere lo spazio dei nomi ovunque, modifica deletePolicy in Delete in main.tf e applica nuovamente la configurazione prima di eliminare definitivamente la risorsa.

Le assegnazioni RBAC di Azure con ambito Managed Fleet Namespace vengono sempre eliminate per evitare autorizzazioni orfane.

Se hai distribuito l'esempio dei prerequisiti di Fleet Manager con cluster hub solo per questo articolo e non ti serve per altro, passa alla directory dell'esempio e distruggilo anch'esso.

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

Avvertimento

Questo comando elimina il Fleet Manager, il relativo cluster hub e il gruppo di risorse creato dall'esempio dei prerequisiti, non solo il Fleet Manager. Assicurarsi che il gruppo di risorse non contenga altre risorse che si desidera mantenere e che nessun altro Managed Fleet Namespace o cluster membro dipenda ancora da Fleet Manager prima di eseguire questo comando.

Passaggi successivi