Crear y configurar espacios de nombres de flota administrada

Se aplica a: ✔️ Fleet Manager con clúster central

En este artículo se muestra cómo usar Fleet Manager para crear y configurar un espacio de nombres de flota administrada que defina cuotas de recursos, directivas de red y acceso de usuario delegado para los espacios de nombres en varios clústeres.

Si desea ver o acceder a los espacios de nombres de flota administrada existentes a los que tiene acceso, consulte Visualización y acceso a Espacios de nombres de flota administrada.

Limitaciones conocidas

  • Cuando un espacio de nombres de flota administrada adopta un único clúster del espacio de nombres de Kubernetes administrado o viceversa, puede provocar conflictos de propiedad. Para evitarlo, use una directiva de eliminación de keep tanto para la flota administrada como para los espacios de nombres de Kubernetes.
  • Los clústeres deben ser miembros gestionados por el Fleet Manager que hospeda el espacio de nombres gestionado de la flota.
  • Los clústeres deben tener una versión de Kubernetes de al menos 1.30.0. Los clústeres debajo de esta versión no impedirán que los usuarios del clúster modifiquen los recursos de Kubernetes colocados.
  • Los roles RBAC asignados a un espacio de nombres de una flota administrada conceden acceso equivalente a los espacios de nombres no administrados de Kubernetes con el mismo nombre en los clústeres miembros.

Antes de empezar

  • Instale y configure Terraform.

  • Necesita tener instalada CLI de Azure para verificar el espacio de nombres de Managed Fleet que crea Terraform. Para la instalación o la actualización, consulte Instalación de la CLI de Azure.

  • Necesitas la fleet extensión de CLI de Azure versión 1.8.0 o posterior para verificar el espacio de nombres de la flota administrada. Puede instalarlo y actualizar a la versión más reciente mediante los az extension add comandos y az extension update .

    az extension add --name fleet
    az extension update --name fleet
    
  • Si aún no dispones de un Fleet Manager con un clúster central, la primera parte de este artículo te ayuda a crear uno utilizando un ejemplo de Terraform independiente y un estado distinto al del ejemplo Managed Fleet Namespace. Si ya dispone de uno, anote su grupo de recursos y el nombre de Fleet Manager, y pase a Crear el espacio de nombres de flota administrada con Terraform.

  • El ejemplo de Terraform de prerrequisitos crea solo un Fleet Manager y un clúster hub; no crea ni une ningún clúster miembro. Puede crear un espacio de nombres de flota administrada y ver su configuración sin ningún clúster miembro unido, pero comprobar que el espacio de nombres se implementa (propaga) en un clúster miembro requiere al menos un clúster de AKS unido a la flota. Si aún no dispone de ninguno, consulte crear y unir al menos un clúster de Azure Kubernetes Service (AKS) a la flota siguiendo la guía compatible existente.

  • Para completar este artículo, necesita la versión 2.78.0 o posterior de la CLI de Azure. Para la instalación o la actualización, consulte Instalación de la CLI de Azure.

  • Necesita la versión 1.8.0 o posterior de la extensión de la fleet CLI de Azure. Puede instalarlo y actualizar a la versión más reciente mediante los az extension add comandos y az extension update .

    # Install the extension
    az extension add --name fleet
    
    # Update the extension
    az extension update --name fleet
    
  • Confirme que la versión de la extensión de flota es al menos 1.8.0 con el az extension show comando .

    az extension show --name fleet
    
  • Establezca las siguientes variables de entorno para el identificador de suscripción, el grupo de recursos, la flota y el miembro de flota:

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    export FLEET_ID=<fleet-id>
    
  • Establezca la suscripción de Azure predeterminada mediante el az account set comando .

    az account set --subscription ${SUBSCRIPTION_ID}
    

Creación de un nuevo espacio de nombres de flota administrada

Cree un nuevo espacio de nombres de flota administrada mediante el 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

Nota:

Esta configuración es opcional: directivas de red, cuota de proceso, directiva de eliminación y adopción, etiquetas y anotaciones.

Cuando se usan directivas de red, los usuarios con una acción Microsoft.ContainerService/managedClusters/networking.k8s.io/networkpolicies/write, como Azure Kubernetes Service RBAC Writer, en el rol de Microsoft Entra ID que se les asignan, pueden añadir más directivas de red a través de la API de Kubernetes.

Por ejemplo, si un administrador aplica una Deny All directiva para la entrada y salida, y un usuario aplica una Allow directiva para un espacio de nombres a través de la API de Kubernetes, la Allow directiva tiene prioridad sobre la Deny All directiva y el tráfico puede fluir para el espacio de nombres. Este comportamiento aditivo es estándar para las directivas de red.

Asignación de acceso de usuario o grupo

Ahora puede dar acceso a un usuario para el espacio de nombres de flota administrada en los clústeres miembro a través de uno de los roles integrados de RBAC de Azure.

Cree una asignación de roles mediante el az role assignment create comando .

En el ejemplo siguiente se asigna a un usuario el rol Escritor de RBAC de Azure Kubernetes Fleet Manager para clústeres miembros en cualquier clúster que reciba el espacio de nombres de flota administrada 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"

Adición de clústeres de miembros

Puede controlar a qué clúster de miembros se implementa el espacio de nombres administrado, especificando la lista deseada de nombres de clúster de miembros.

Especifique la lista completa de clústeres de miembros a los que desea implementar el espacio de nombres administrado usando el comando az fleet namespace create con el parámetro --member-cluster-names. El espacio de nombres administrado se propaga a todos los clústeres de la lista.

En este ejemplo, el espacio de nombres administrado se implementa en contoso-prd-01-fm y 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

Eliminación de clústeres de miembros

Puede quitar los clústeres miembros de un espacio de nombres de flota administrada excluyéndolos de la lista de clústeres de miembros en la que desea el espacio de nombres.

Especifique la lista de clústeres de miembros en la que desea que el espacio de nombres administrado permanezca usando el az fleet namespace create comando con el --member-cluster-names parámetro . El espacio de nombres administrado se elimina de cualquier clúster que no esté incluido en la lista.

En este ejemplo, se elimina el espacio de nombres administrado 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

Configuración de un espacio de nombres de flota administrada existente

Puede modificar directivas de red, cuotas de recursos, etiquetas y anotaciones en un espacio de nombres de flota administrada existente mediante el az fleet namespace create comando con valores de parámetro actualizados. El comando realiza una operación upsert, actualizando el espacio de nombres si ya existe.

Importante

Al actualizar un espacio de nombres administrado existente, debe especificar todos los parámetros que desea conservar, aunque no los cambie. Los parámetros que omita se restablecen a sus valores predeterminados. Esto incluye directivas de red, cuotas de recursos, etiquetas, anotaciones, directiva de eliminación, directiva de adopción y nombres de clúster de miembros.

En el ejemplo siguiente se actualizan las directivas de red, las cuotas de recursos, las etiquetas y las anotaciones de un espacio de nombres administrado 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

Visualización de la configuración de un espacio de nombres de flota administrada

Vea los detalles de un espacio de nombres de flota administrada específico mediante el az fleet namespace show comando .

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

La salida debería ser similar a la salida de ejemplo siguiente:

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

Eliminación de un espacio de nombres de flota administrada

Elimine un espacio de nombres de flota administrada usando el comando az fleet namespace delete.

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

Advertencia

Si elimina un espacio de nombres de flota administrada con un DeletePolicy con el valor delete, la acción será permanente. Si no lo puede confirmar, debe actualizar la directiva con keep para mantener el espacio de nombres.

Las asignaciones de RBAC de Azure siempre se eliminan para evitar permisos pendientes.

Creación de un nuevo espacio de nombres de flota administrada

Puede crear un nuevo espacio de nombres de flota administrada desde Fleet Manager o a través del centro de Kubernetes.

Para empezar en Fleet Manager:

  • En Azure Portal, vaya al recurso de Azure Kubernetes Fleet Manager.
  • En el menú de la izquierda, en Recursos de flota, seleccione Espacios de nombres.
  • En el menú, seleccione + Crear y, después, Espacio de nombres de flota administrada.

Captura de pantalla del menú de Azure Portal para crear un espacio de nombres de flota administrada en Azure Kubernetes Fleet Manager.

Iniciando en el centro de Kubernetes:

Captura de pantalla del menú del Centro de Kubernetes en el portal de Azure para crear un espacio de nombres de flota administrada.

  • Seleccione una de las siguientes opciones para Ámbito:
    • Nuevo : cree un nuevo espacio de nombres de Kubernetes que no exista en el clúster del centro de Fleet Manager. Escriba un nombre para el nuevo espacio de nombres.
    • Convertir en Administrado - utilice un espacio de nombres de Kubernetes existente en el clúster central de Fleet Manager. Seleccione el Espacio de nombres en la lista de espacios de nombres en el clúster central del administrador de flota (Fleet Manager).

Captura de pantalla de Azure Portal en la que se muestra la pestaña Aspectos básicos con los detalles del proyecto completados para un nuevo espacio de nombres de flota administrada.

Asignación de acceso de usuario o grupo

Seleccione los usuarios y grupos de Microsoft Entra que tengan acceso al espacio de nombres de la flota administrada en los clústeres en los que se haya distribuido.

Captura de pantalla de Azure Portal en la que se muestran los detalles de acceso completados de un nuevo espacio de nombres de flota administrada.

Nota:

Este paso es opcional. Puede crear y distribuir un espacio de nombres de flota administrada sin asignar usuarios o grupos. Esto le permite distribuir el espacio de nombres sin conceder acceso inmediatamente.

Añadir directivas de red y cuota de cómputo

Controlar el flujo de tráfico de red hacia y hacia fuera del espacio de nombres en cada clúster al que se distribuye, junto con la definición de las cuotas de recursos de CPU y memoria para el espacio de nombres.

Captura de pantalla de Azure Portal en la que se muestran las directivas de red completadas y la cuota de proceso para un nuevo espacio de nombres de flota administrada.

Nota:

Estas opciones de configuración son opcionales. Puede crear y distribuir un espacio de nombres de flota administrada sin directivas de red ni controles de cuota aplicados.

Los usuarios con una acción Microsoft.ContainerService/managedClusters/networking.k8s.io/networkpolicies/write, como Azure Kubernetes Service RBAC Writer, en el rol de Microsoft Entra ID que tienen asignado pueden añadir más directivas de red a través de la API de Kubernetes.

Por ejemplo, si un administrador aplica una Deny All directiva para la entrada y salida, y un usuario aplica una Allow directiva para un espacio de nombres a través de la API de Kubernetes, la Allow directiva tiene prioridad sobre la Deny All directiva y el tráfico puede fluir para el espacio de nombres. Este comportamiento aditivo es estándar para las directivas de red.

Selección de clústeres de miembros

Defina los clústeres de miembros a los que distribuir el espacio de nombres administrado al agregarlos de la manera siguiente.

  • En el menú, seleccione + Agregar.
  • En el cuadro de diálogo Seleccionar clústeres de miembros , busque los clústeres de miembros y selecciónelos activando la casilla .
  • Por último, elija Seleccionar para agregar los clústeres de miembros.

Captura de pantalla de Azure Portal en la que se muestran dos clústeres miembros seleccionados para hospedar un nuevo espacio de nombres de flota administrada.

Nota:

Este paso es opcional. Si no proporciona ningún clúster miembro, el Espacio de Nombres de Flota Administrada solo se implementa en el clúster principal de Fleet Manager. Puede agregar clústeres de miembros más adelante.

Configuración de etiquetas, anotaciones y tags

Defina etiquetas y anotaciones opcionales de Kubernetes y etiquetas de Azure Resource Manager (ARM) que proporcionan metadatos que se pueden usar para la automatización y la administración de recursos.

Captura de pantalla de Azure Portal que muestra la configuración de etiquetas y anotaciones para un nuevo espacio de nombres de flota administrada.

Nota:

Este paso es opcional. Puede administrar rótulos, anotaciones y etiquetas más adelante.

Crea el espacio de nombres de flota administrada

Una vez que haya configurado todas las propiedades para el nuevo espacio de nombres de flota administrada, puede confirmar los detalles antes de crear el espacio de nombres seleccionando Crear.

Se inicia inmediatamente una implementación de Azure Resource Manager, lo que hace que se asignen las cargas de trabajo del administrador de flota para distribuir el espacio de nombres en los clústeres seleccionados.

Una vez completada la implementación, puede encontrar el Espacio de Nombres de la Flota Administrada en la lista de espacios de nombres de Fleet Manager.

Captura de pantalla de Azure Portal con el nuevo espacio de nombres de flota administrada, que aparece junto con otros espacios de nombres en el clúster central.

Para revisar la implementación del espacio de nombres de Kubernetes en todos los clústeres, use Ubicaciones de recursos y busque la ubicación de recursos que tenga el mismo nombre que el espacio de nombres de flota administrada.

Captura de pantalla de Azure Portal que muestra el estado de ubicación de los recursos del nuevo espacio de nombres de flota administrada.

Configuración de un espacio de nombres de flota administrada existente

Puede localizar un espacio de nombres de flota administrada en el administrador de flota o a través del centro de Kubernetes.

Para empezar en Fleet Manager:

  • En Azure Portal, vaya al recurso de Azure Kubernetes Fleet Manager.
  • En el menú de la izquierda, en Recursos de flota, seleccione Espacios de nombres.

Iniciando en el centro de Kubernetes:

Modificación de la configuración

Modifique las directivas de red, las cuotas de recursos, las etiquetas, las anotaciones y las etiquetas seleccionando editar junto al elemento adecuado en la pantalla de información general del espacio de nombres de flota administrada.

Al seleccionar editar junto a etiquetas, anotaciones o etiquetas, se abre un cuadro de diálogo donde puede modificar cualquiera de estos tres elementos.

Al seleccionar editar junto a cualquiera de las opciones de directiva de red o cuota de recursos, se abre un cuadro de diálogo donde puede modificar cualquiera de estos elementos.

Captura de pantalla de Azure Portal que muestra la pantalla de información general de un espacio de nombres de flota administrada con opciones de edición resaltadas en cuadros rojos.

Modificación del acceso de usuario o grupo

Un espacio de nombres de flota administrada es un recurso de Azure Resource Manager (ARM), por lo que es posible administrar del acceso de usuarios y grupos si se selecciona Control de acceso (IAM) en el panel de navegación izquierdo de la pantalla de información general del espacio de nombres de flota administrada.

Modificación de clústeres de miembros

En la vista general del espacio de nombres de la flota administrada, seleccione Clústeres miembros en el panel de navegación izquierdo.

Para quitar clústeres de miembros:

  • Seleccione los clústeres que desea quitar activando la casilla situada a la izquierda de la fila.
  • En el panel de navegación superior, seleccione Quitar.
  • Confirme la acción y seleccione Quitar.

Para agregar clústeres de miembros:

  • En el menú, seleccione + Agregar.
  • En el cuadro de diálogo Agregar clústeres de miembros , busque los clústeres de miembros y selecciónelos activando la casilla .
  • Por último, elija Agregar para agregar los clústeres de miembros.

Captura de pantalla de

Una vez modificados los clústeres que hospedan el espacio de nombres de flota administrada, se actualiza la información general para mostrar los clústeres que hospedan activamente el espacio de nombres.

Eliminación de un espacio de nombres de flota administrada

En la visión general del espacio de nombres de la flota gestionada, seleccione Eliminar en la barra de navegación superior.

En la confirmación de Eliminar espacio de nombres de flota administrada, elija la opción que desee:

  • Mantener el espacio de nombres y eliminar las funcionalidades de administración: el espacio de nombres de flota administrada se convierte en un espacio de nombres de Kubernetes estándar; de esta manera, permanece en el clúster central del administrador de flota y en los clústeres miembros, pero Azure Resource Manager (ARM) lo deja de administrar.
  • Eliminar el espacio de nombres y todos los recursos asociados: se elimina el recurso de ARM del espacio de nombres de flota administrada, junto con el espacio de nombres de Kubernetes en el clúster central del administrador de flota y en los clústeres miembro.

Advertencia

Eliminar el espacio de nombres y todos los recursos asociados es una acción permanente. Si no está seguro, debe optar por mantener el espacio de nombres.

En ambos casos, se eliminan las asignaciones de RBAC de Azure para evitar permisos pendientes.

Creación de un nuevo espacio de nombres de flota administrada

Los ejemplos de Terraform de esta sección se dividen en dos directorios, cada uno con su propio estado de Terraform: un ejemplo de requisitos previos que crea un Fleet Manager con un clúster central y un ejemplo de escenario que crea el Managed Fleet Namespace en un Fleet Manager ya existente. Al mantener Fleet Manager y Managed Fleet Namespace en estados separados, puede crear un Managed Fleet Namespace para cualquier Fleet Manager existente con un clúster hub. Esta configuración funciona tanto si ha creado Fleet Manager mediante Terraform como si no. Puede destruir un espacio de nombres de flota administrada sin afectar a Fleet Manager ni a ningún otro espacio de nombres de flota administrada en él.

Crear un gestor de flotas con un clúster de hub

Si ya tiene un Fleet Manager con un clúster central, vaya directamente a Crear el espacio de nombres de la flota administrada con Terraform y use su grupo de recursos y el nombre del Fleet Manager en esa sección.

  1. Cree un directorio en el que probar el código de Terraform de ejemplo y convertirlo en el directorio actual. Utilice un directorio distinto del que utilice para el ejemplo de Managed Fleet Namespace más adelante en este artículo, ya que cada ejemplo mantiene su propio estado de Terraform.

  2. Cree un archivo llamado providers.tf e inserte el siguiente 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. Cree un archivo llamado variables.tf e inserte el siguiente 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. Cree un archivo llamado main.tf e inserte el siguiente 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. Cree un archivo llamado outputs.tf e inserte el siguiente código:

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

El ejemplo crea un grupo de recursos y un Fleet Manager con un clúster central mediante el tipo de recurso azapi_resource en lugar de azurerm_kubernetes_fleet_manager, porque el atributo hub_profile del proveedor azurerm está en desuso y la API de Fleet ya no lo acepta. Si no establece la fleet_name variable, Terraform genera un nombre aleatorio automáticamente.

Ejecute terraform init para inicializar la implementación de Terraform. Este comando descarga los proveedores de Azure necesarios para administrar los recursos de Azure.

terraform init

Ejecute terraform fmt para dar formato a los archivos de configuración de forma coherente.

terraform fmt

Ejecute terraform validate para confirmar que los archivos de configuración son sintácticamente válidos.

terraform validate

Ejecute terraform plan para crear un plan de ejecución.

terraform plan -out main.tfplan

Ejecute terraform apply para aplicar el plan de ejecución a su infraestructura en la nube.

terraform apply main.tfplan

Guarde el nombre del grupo de recursos y el de Fleet Manager de las salidas de Terraform. Necesita estos valores para el ejemplo de espacio de nombres de Managed Fleet.

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

Este ejemplo no crea ni une ningún clúster miembro a la flota. Compruebe si Fleet Manager ya tiene clústeres miembros unidos mediante el az fleet member list comando :

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

Si este comando no devuelve ningún miembro, puede completar la sección siguiente para crear un espacio de nombres de flota administrada y ver su configuración, pero no puede comprobar que se implemente en un clúster miembro hasta que cree y una al menos un clúster de AKS a la flota.

Crear el espacio de nombres de la flota gestionada con Terraform

  1. Cree un nuevo directorio independiente para probar el código de Terraform de este ejemplo y convertirlo en el directorio actual.

  2. Cree un archivo llamado providers.tf e inserte el siguiente 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. Cree un archivo llamado variables.tf e inserte el siguiente 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. Cree un archivo llamado main.tf e inserte el siguiente 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. Cree un archivo llamado outputs.tf e inserte el siguiente código:

    output "managed_fleet_namespace_id" {
      description = "Resource ID of the Managed Fleet Namespace."
      value       = azapi_resource.managed_fleet_namespace.id
    }
    
  6. Cree un archivo llamado terraform.tfvars.example e inserte el siguiente código:

    resource_group_name    = "<resource-group-name>"
    fleet_name             = "<fleet-manager-name>"
    managed_namespace_name = "platform-ns"
    
  7. Copie terraform.tfvars.example en terraform.tfvars en el mismo directorio. Establezca resource_group_name y fleet_name en los valores que guardó en la sección anterior (o en los valores de su Fleet Manager existente). Asigne managed_namespace_name al nombre que desee para el espacio de nombres.

    cp terraform.tfvars.example terraform.tfvars
    

Este ejemplo no crea su propio Fleet Manager. En su lugar, utiliza las fuentes de datos azurerm_resource_group y azurerm_client_config para buscar el grupo de recursos y la suscripción actual. A continuación, construye el identificador de recurso del Fleet Manager existente indicado en la variable fleet_name para usarlo como recurso padre del espacio de nombres de la flota administrada. Así es como el ejemplo utiliza la información del Fleet Manager procedente del estado de requisitos previos, o de cualquier Fleet Manager preexistente con un clúster central, sin compartir el estado de Terraform entre los dos ejemplos.

En el ejemplo se crea el espacio de nombres mediante el tipo de recurso azapi_resource con la versión preliminar 2025-08-01-preview de la API de Microsoft.ContainerService/fleets/managedNamespaces, ya que este tipo de recurso aún no tiene un recurso azurerm nativo. Las siguientes propiedades están codificadas de forma fija en main.tf y no se exponen como variables. Para cambiarlos, edite el body.properties bloque directamente:

  • adoptionPolicy se establece en deletePolicy y Never se establece en Keep, en consonancia con los valores predeterminados de la CLI de Azure mostrados anteriormente en este artículo.
  • managedNamespaceProperties.labels establece las etiquetas team=platform de Kubernetes y environment=demo.
  • managedNamespaceProperties.annotations establece las anotaciones owner=aks-fleet-demo de Kubernetes y app.kubernetes.io/managed-by=terraform.
  • managedNamespaceProperties.defaultNetworkPolicy establece tanto ingress como egress en AllowAll.
  • managedNamespaceProperties.defaultResourceQuota establece cpuRequest=100m, cpuLimit=500m, memoryRequest=128Miy memoryLimit=512Mi.
  • propagationPolicy.placementProfile.defaultClusterResourcePlacement.policy.placementType se establece en PickAll, por lo que el espacio de nombres se propaga a cada clúster miembro unido actualmente a Fleet. A diferencia del parámetro del --member-cluster-names CLI de Azure, este ejemplo no expone una manera de dirigirse a clústeres de miembros con nombre específicos. Para limitar la ubicación a un subconjunto de clústeres, utiliza la CLI de Azure o los botones de navegación del Azure Portal que aparecen en esta página, o amplía el bloque placementProfile en main.tf siguiendo la referencia de la plantilla ARM de flotas de Microsoft.ContainerService.

La única variable que se corresponde con las etiquetas de Azure Resource Manager (ARM) del recurso de espacio de nombres de la flota administrada, en lugar de con las labels de Kubernetes del propio espacio de nombres, es tags. Es opcional y tiene como valor predeterminado { environment = "demo", managed_by = "terraform" } en variables.tf si no lo establece. El ejemplo terraform.tfvars.example no incluye tags, por lo que agréguelo al terraform.tfvars archivo solo si desea invalidar el valor predeterminado.

Ejecute terraform init para inicializar la implementación de Terraform.

terraform init

Ejecute terraform fmt para dar formato a los archivos de configuración de forma coherente.

terraform fmt

Ejecute terraform validate para confirmar que los archivos de configuración son sintácticamente válidos.

terraform validate

Ejecute terraform plan para crear un plan de ejecución.

terraform plan -out main.tfplan

Ejecute terraform apply para aplicar el plan de ejecución a su infraestructura en la nube.

terraform apply main.tfplan

Asignación de acceso de usuario o grupo

Terraform no administra las asignaciones de roles de RBAC de Azure en este ejemplo. Conceda a un usuario acceso al espacio de nombres de Managed Fleet en todos sus clústeres miembro mediante el comando az role assignment create. Utilice la salida de Terraform como ámbito:

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"

Adición o eliminación de clústeres de miembros

Dado que el propagationPolicy del ejemplo utiliza PickAll, el espacio de nombres siempre se propaga a todos los clústeres miembros actuales de la flota. Al añadir un clúster miembro a Fleet, el espacio de nombres se añade automáticamente a este, y al eliminar un clúster miembro de Fleet, el espacio de nombres se elimina automáticamente de este. El ejemplo no permite dirigirse a una lista específica de nombres de clústeres miembro como lo hace el parámetro --member-cluster-names de la CLI de Azure. Si necesita seleccionar clústeres miembros específicos, utilice en su lugar la CLI de Azure o los botones del Azure Portal que aparecen en esta página.

Configuración de un espacio de nombres de flota administrada existente

Terraform realiza una operación upsert para el tipo azapi_resource, por lo que puede actualizar un espacio de nombres de flota administrada existente modificando el ejemplo y volviéndolo a aplicar.

  • Para cambiar las etiquetas de ARM, agregue o actualice la tags variable en terraform.tfvars (es opcional y no se incluye en terraform.tfvars.example).
  • Para cambiar las etiquetas, anotaciones, directivas de red o cuotas de recursos de Kubernetes, edite los valores correspondientes en el managedNamespaceProperties bloque de main.tf. El ejemplo no expone esta configuración como variables.

Después de realizar sus cambios, vuelva a ejecutar terraform plan -out main.tfplan y terraform apply main.tfplan en el directorio del espacio de nombres de Managed Fleet.

Visualización de la configuración de un espacio de nombres de flota administrada

La salida de Terraform solo devuelve el identificador del recurso del "Managed Fleet Namespace". Extraiga los nombres del grupo de recursos, del gestor de flotas y del espacio de nombres a partir del ID. A continuación, vea los detalles del espacio de nombres mediante el 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

Para revisar la implementación del espacio de nombres en los clústeres miembros, utiliza Ubicaciones de recursos y busca la ubicación de recurso que tenga el mismo nombre que el espacio de nombres de la flota administrada. La revisión de la configuración del espacio de nombres mediante az fleet namespace show no requiere que ningún clúster miembro se una a la flota, pero la revisión del estado de implementación o ubicación requiere al menos un clúster miembro unido. Si todavía no tiene ninguno, consulte primero crear y unir al menos un clúster de Azure Kubernetes Service (AKS) a la flota.

Eliminación de un espacio de nombres de flota administrada

Elimina el espacio de nombres de la flota administrada antes de eliminar el gestor de flotas al que pertenece.

En el directorio que contiene el ejemplo Managed Fleet Namespace, ejecute terraform plan con el indicador -destroy para crear un plan de ejecución de destrucción.

terraform plan -destroy -out main.destroy.tfplan

Ejecute terraform apply para aplicar el plan de destrucción.

terraform apply main.destroy.tfplan

Advertencia

La eliminación de un espacio de nombres de flota administrada configurado con un deletePolicy de Delete es una acción irreversible. Este ejemplo establece deletePolicy en Keep, por lo que, después de que se destruya el recurso de ARM, el espacio de nombres de Kubernetes permanece en el clúster central de Fleet Manager y en los clústeres miembro, pero ya no está administrado por Azure Resource Manager. Si, en cambio, desea que el espacio de nombres se elimine en todas partes, cambie deletePolicy por Delete en main.tf y vuelva a aplicar los cambios antes de destruir el recurso.

Las asignaciones de RBAC de Azure con ámbito en el espacio de nombres de la flota administrada siempre se eliminan para evitar permisos huérfanos.

Si ha implementado Fleet Manager con un ejemplo de requisitos previos para un clúster hub únicamente para este artículo, y no lo necesita para nada más, cambie al directorio de ese ejemplo y elimínelo también.

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

Advertencia

Este comando elimina Fleet Manager, su clúster central y el grupo de recursos creado por el ejemplo de requisitos previos, y no solo Fleet Manager. Confirme que el grupo de recursos no contiene otros recursos que quiera conservar y que ningún otro espacio de nombres de flota administrada o clústeres de miembros todavía depende del Administrador de flotas, antes de ejecutar este comando.

Pasos siguientes