Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
keepgli 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
- È necessario un account Azure con una sottoscrizione attiva. Creare un account gratuito.
- Hai bisogno di un Fleet Manager con un cluster hub. Se non è disponibile, vedere Creare e aggiungere almeno un cluster del servizio Azure Kubernetes alla flotta.
- Assicurarsi che all'utente che esegue questi passaggi sia assegnato il ruolo Amministratore del controllo di accesso basato sui ruoli per Fleet Manager.
- Comprendere il concetto di "Namespace della Flotta Gestita" leggendo la panoramica.
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
fleetinterfaccia 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 iaz extension addcomandi eaz extension update.az extension add --name fleet az extension update --name fleetSe 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
fleetinterfaccia della riga di comando di Azure versione 1.8.0 o più recente. È possibile installarlo e aggiornarlo alla versione più recente usando iaz extension addcomandi eaz extension update.# Install the extension az extension add --name fleet # Update the extension az extension update --name fleetVerificare che la versione dell'estensione fleet sia almeno 1.8.0 usando il
az extension showcomando .az extension show --name fleetImpostare 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 setcomando .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.
A partire dal centro Kubernetes:
- Aprire il centro Kubernetes - Spazi dei nomi gestiti nel portale di Azure.
- Dal menu, selezionare + Crea, quindi Namespace di flotta gestita.
- Selezionare una istanza di Subscription e una istanza di Fleet Manager.
- 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.
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.
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.
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.
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.
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.
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.
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:
- Aprire il centro Kubernetes - Spazi dei nomi gestiti nel portale di Azure.
- Impostare il filtro Tipo su Spazio dei nomi della flotta gestita.
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.
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.
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.
Annotazioni
Il codice di esempio per questa sezione si trova nel repository Azure Terraform GitHub. Visualizzare il file di log contenente i risultati del test delle versioni correnti e precedenti di Terraform.
Vedere altri articoli e codice di esempio che illustrano come usare Terraform per gestire le risorse di Azure.
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.
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" {}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 = "" }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"] }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
Annotazioni
Il codice di esempio per questa sezione si trova nel repository Azure Terraform GitHub. Visualizzare il file di log contenente i risultati del test delle versioni correnti e precedenti di Terraform.
Vedere altri articoli e codice di esempio che illustrano come usare Terraform per gestire le risorse di Azure.
Creare una nuova directory separata per testare il codice Terraform di questo esempio e impostarla come directory corrente.
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" {}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" } }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" } } } } } } }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 }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"Copia
terraform.tfvars.exampleinterraform.tfvarsnella stessa directory. Impostareresource_group_nameefleet_namesui valori salvati nella sezione precedente (o sui valori del Fleet Manager esistente). Impostamanaged_namespace_namesul 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 sudeletePolicyeNeverè impostato suKeep, in corrispondenza delle impostazioni predefinite di interfaccia della riga di comando di Azure illustrate in precedenza in questo articolo. -
managedNamespaceProperties.labelsimposta le etichette Kubernetesteam=platformeenvironment=demo. -
managedNamespaceProperties.annotationsimposta le annotazioni Kubernetesowner=aks-fleet-demoeapp.kubernetes.io/managed-by=terraform. -
managedNamespaceProperties.defaultNetworkPolicyimposta siaingresscheegresssuAllowAll. -
managedNamespaceProperties.defaultResourceQuotaimpostacpuRequest=100m,cpuLimit=500m,memoryRequest=128Mi, ememoryLimit=512Mi. -
propagationPolicy.placementProfile.defaultClusterResourcePlacement.policy.placementTypeè impostato suPickAll, quindi lo spazio dei nomi viene propagato a ogni cluster membro attualmente aggiunto a Fleet. A differenza del parametro--member-cluster-namesdi 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 bloccoplacementProfileinmain.tfseguendo 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
tagsvariabile interraform.tfvars(è facoltativa e non è inclusa interraform.tfvars.example). - Per modificare le etichette, le annotazioni, i criteri di rete o le quote delle risorse kubernetes, modificare i valori corrispondenti nel
managedNamespacePropertiesblocco dimain.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
- Comprendere il concetto di "Namespace di Flotta Gestita" consultando la sintesi.
- Informazioni su come visualizzare e accedere ai namespaces Managed Fleet a cui si ha accesso.