Compartir a través de


Creación de un clúster de Azure Kubernetes Service (AKS) privado

Este artículo le ayuda a implementar un clúster de AKS basado en vínculo privado mediante CLI de Azure o Terraform. Si está interesado en crear un clúster de AKS sin un vínculo privado o un túnel necesarios, consulte Crear un clúster de Azure Kubernetes Service (AKS) con integración de red virtual del servidor de API.

Introducción a los clústeres privados en AKS

En un clúster privado, el servidor de la API o el plano de control tienen direcciones IP internas que se definen en el documento RFC1918 sobre la asignación de direcciones para conexiones privadas de Internet. Mediante el uso de un clúster privado, puede asegurarse de que el tráfico entre el servidor de API y los grupos de nodos permanece solo en la red privada.

El plano de control o el servidor de API se encuentra en un grupo de recursos de Azure administrado por AKS y el clúster o grupo de nodos se encuentra en el grupo de recursos. El servidor y el grupo de clústeres o nodos pueden comunicarse entre sí a través del servicio Azure Private Link en la red virtual del servidor de API y un punto de conexión privado expuesto en la subred del clúster de AKS.

Al crear un clúster de AKS privado, AKS crea nombres de dominio completos (FQDN) públicos y privados con las zonas DNS correspondientes de forma predeterminada. Para obtener opciones detalladas de configuración de DNS, consulte Configuración de una zona DNS privada, una subzona DNS privada o un subdominio personalizado.

Disponibilidad regional

Los clústeres privados están disponibles en regiones públicas, Azure Government y Microsoft Azure operado por 21Vianet, donde se admite AKS.

Importante

Todas las características de Microsoft Defender for Cloud se retirarán oficialmente en el Azure de la región de China el 18 de agosto de 2026. Debido a esta próxima retirada, los clientes de Azure en China ya no pueden incorporar nuevas suscripciones al servicio. Una nueva suscripción es cualquier suscripción que aún no se haya incorporado al servicio Microsoft Defender for Cloud antes del 18 de agosto de 2025, la fecha del anuncio de retirada. Para obtener más información sobre la obsolescencia, consulte el Anuncio sobre la retirada de Microsoft Defender for Cloud en Microsoft Azure, operado por 21Vianet.

Los clientes deben trabajar con sus representantes de cuenta para Microsoft Azure operados por 21Vianet para evaluar el impacto de esta retirada en sus propias operaciones.

Requisitos previos para clústeres de AKS privados

Importante

A partir de November 30, 2025, Azure Kubernetes Service (AKS) ya no admite ni proporciona actualizaciones de seguridad para Azure Linux 2.0. La imagen de nodo de Azure Linux 2.0 quedó congelada en la versión 202512.06.0. A partir del 31 de marzo de 2026, se quitarán las imágenes de nodo y no podrá escalar los grupos de nodos. Migre a una versión de Linux de Azure compatible actualizando los grupos de nodos a una versión de Kubernetes compatible o migrando a osSku AzureLinux3. Para obtener más información, consulte la Incidencia de retirada de GitHub y el Anuncio de la retirada de las actualizaciones de Azure. Para mantenerse informado sobre los anuncios y actualizaciones, siga las notas de lanzamiento de AKS.

Limitaciones

  • Los intervalos autorizados por IP solo se aplican al servidor de API público. No puede aplicar estos intervalos al punto de conexión del servidor de API privado.
  • Las limitaciones del servicio de Azure Private Link se aplican a los clústeres privados.
  • No hay compatibilidad de los agentes hospedados de Microsoft Azure DevOps con los clústeres privados. Considere la posibilidad de usar agentes autohospedados.
  • La eliminación o modificación del punto de conexión privado en la subred del cliente hace que el clúster deje de funcionar.
  • El servicio Azure Private Link solo se admite en Azure Load Balancer Estándar. No se admite en Basic Azure Load Balancer.

Red en estrella con DNS personalizado para clústeres privados de AKS

Arquitecturas de hub y radio se utilizan comúnmente para desplegar redes en Azure. En muchas de estas implementaciones, los valores de DNS en las redes virtuales de radios están configurados para hacer referencia a un reenviador de DNS central con el fin de permitir la resolución de DNS local y basada en Azure.

En el diagrama siguiente se muestra una arquitectura de tipo hub and spoke para un clúster AKS privado con DNS personalizado.

Concentrador y radio de clúster privado

  • Cuando se crea un clúster privado, se crea un punto de conexión privado (1) y una zona DNS privada (2) en el grupo de recursos administrados por clúster de forma predeterminada. El clúster usa un registro A en la zona privada a fin de resolver la dirección IP del punto de conexión privado para la comunicación con el servidor de la API.
  • La zona DNS privada solo está vinculada a la red virtual a la que están conectados los nodos del clúster (3), lo que significa que los hosts de esa red virtual vinculada solo pueden resolver el punto de conexión privado. En escenarios en los que no se configura ningún DNS personalizado en la red virtual (valor predeterminado), funciona sin problema, ya que los hosts apuntan a 168.63.129.16 para DNS que pueden resolver registros en la zona DNS privada debido al vínculo.
  • Si mantiene el comportamiento predeterminado de la zona DNS privada, AKS intenta vincular la zona directamente a la red virtual satélite que hospeda el clúster, incluso cuando la zona ya está vinculada a una red virtual central.
    • En redes virtuales radiales que usan servidores DNS personalizados, esta acción puede producir un error si la identidad administrada del clúster carece de colaborador de red en la red virtual radial. Para evitar el error, elija una de las siguientes configuraciones admitidas:
      • Zona DNS privada personalizada: proporcione una zona privada existente y establezca en privateDNSZone / --private-dns-zone su identificador de recurso. Vincule esa zona a la VNet adecuada (por ejemplo, la VNet del hub) y configure publicDNS, false o use --disable-public-fqdn.
      • Solo DNS público: deshabilite la creación de zonas privadas estableciendo privateDNSZone / --private-dns-zone en none y deje publicDNS en su valor predeterminado (true) / no use --disable-public-fqdn.
  • Si va a usar su propia tabla de rutas (BYO) con kubenet, así como su propio DNS, con clústeres privados, se produce un error en la creación del clúster. Tendrá que asociar RouteTable en el grupo de recursos del nodo a la subred después de que se haya producido un error en la creación del clúster, con el fin de que la creación se realice correctamente.

Limitaciones de los clústeres de AKS privados con DNS personalizado

  • privateDNSZone / la configuración de --private-dns-zonenone y publicDNS: false / --disable-public-fqdn al mismo tiempo.
  • El reenvío condicional no admite subdominios.

Creación de un grupo de recursos

Cree un grupo de recursos con el comando az group create. También puede usar un grupo de recursos existente para el clúster de AKS.

az group create \
    --name <private-cluster-resource-group> \
    --location <location>

Creación de un clúster de AKS privado con redes básicas predeterminadas

Cree un clúster privado con redes básicas predeterminadas mediante el comando az aks create con la marca --enable-private-cluster.

Parámetros clave en este comando:

  • --enable-private-cluster: habilita el modo de clúster privado.
az aks create \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --generate-ssh-keys
  1. Cree un archivo denominado main.tf y agregue el código siguiente para definir la versión de Terraform y especifique el proveedor de Azure:

    terraform {
      required_version = ">= 1.3.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
      subscription_id = var.subscription_id
    }
    
  2. Agregue el código siguiente a main.tf para crear variables de entrada para el identificador de suscripción de Azure, el nombre del grupo de recursos, la ubicación y el nombre del clúster de AKS. Puede modificar los valores predeterminados según sea necesario.

    variable "subscription_id" {
      description = "The Azure subscription ID."
      type = string
    }
    
    variable "resource_group_name" {
      description = "The name of the resource group for the AKS cluster."
      type        = string
      default     = "rg-private-aks-basic"
    }
    
    variable "location" {
      description = "The Azure region where the resources will be created."
      type        = string
      default     = "eastus"
    }
    
    variable "aks_cluster_name" {
      description = "The name of the AKS cluster."
      type        = string
      default     = "aks-private-basic"
    }
    
  3. Agregue el código siguiente a main.tf para crear un grupo de recursos de Azure:

    resource "azurerm_resource_group" "this" {
      name     = var.resource_group_name
      location = var.location
    }
    
  4. Agregue el código siguiente a main.tf para crear un clúster de AKS privado con red básica.

    resource "azurerm_kubernetes_cluster" "this" {
      name                = var.aks_cluster_name
      location            = azurerm_resource_group.this.location
      resource_group_name = azurerm_resource_group.this.name
      dns_prefix          = "privatebasicaks"
    
      private_cluster_enabled = true
    
      default_node_pool {
        name       = "system"
        node_count = 1
        vm_size    = "Standard_DS2_v2"
      }
    
      identity {
        type = "SystemAssigned"
      }
    
      network_profile {
        load_balancer_sku = "standard"
        network_plugin    = "kubenet"
      }
    }
    
  5. Siga los pasos para inicializar Terraform, dar formato y validar la configuración de Terraform, crear un plan de ejecución de Terraform, aplicar la configuración de Terraform y conectarse al clúster de AKS.

Creación de un clúster de AKS privado con redes avanzadas

Cree un clúster privado con redes avanzadas mediante el az aks create comando .

Parámetros clave en este comando:

  • --enable-private-cluster: habilita el modo de clúster privado.
  • --network-plugin azure: especifica el complemento de red de CNI de Azure.
  • --vnet-subnet-id <subnet-id>: el identificador de recurso de una subred existente en una red virtual.
  • --dns-service-ip <dns-service-ip>: una dirección IP disponible dentro del intervalo de direcciones del servicio Kubernetes que se va a usar para el servicio DNS del clúster. Por ejemplo: 10.2.0.10.
  • --service-cidr <service-cidr>: intervalo IP de notación CIDR desde el que se van a asignar direcciones IP del clúster de servicio. Por ejemplo: 10.2.0.0/24.
az aks create \
    --resource-group <private-cluster-resource-group> \
    --name <private-cluster-name> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --network-plugin azure \
    --vnet-subnet-id <subnet-id> \
    --dns-service-ip <dns-service-ip> \
    --service-cidr <service-cidr> \
    --generate-ssh-keys
  1. Cree un archivo denominado main.tf y agregue el código siguiente para definir la versión de Terraform y especifique el proveedor de Azure:

    terraform {
      required_version = ">= 1.3.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
      subscription_id = var.subscription_id
    }
    
  2. Agregue el código siguiente a main.tf para crear variables de entrada para el identificador de suscripción de Azure, el nombre del grupo de recursos, la ubicación, el nombre del clúster de AKS, el nombre de red virtual (VNet) y el nombre de la subred. Puede modificar los valores predeterminados según sea necesario.

    variable "subscription_id" {
      description = "The Azure subscription ID."
      type = string
    }
    
    variable "resource_group_name" {
      description = "The name of the resource group for the AKS cluster."
      type = string
      default = "rg-private-aks-advanced"
    }
    
    variable "location" {
      description = "The Azure region where the resources will be created."
      type = string
      default = "eastus"
    }
    
    variable "aks_cluster_name" {
      description = "The name of the AKS cluster."
      type = string
      default = "aks-private-advanced"
    }
    
    variable "vnet_name" {
      description = "The name of the virtual network."
      type = string
      default = "vnet-private-aks"
    }
    
    variable "subnet_name" {
      description = "The name of the subnet used by AKS."
      type = string
      default = "snet-aks"
    }
    
  3. Agregue el código siguiente a main.tf para crear un grupo de recursos, una red virtual y una subred de Azure:

    resource "azurerm_resource_group" "this" {
      name = var.resource_group_name
      location = var.location
    }
    
    resource "azurerm_virtual_network" "this" {
      name = var.vnet_name
      location = azurerm_resource_group.this.location
      resource_group_name = azurerm_resource_group.this.name
      address_space = ["10.0.0.0/8"]
    }
    
    resource "azurerm_subnet" "aks" {
      name = var.subnet_name
      resource_group_name  = azurerm_resource_group.this.name
      virtual_network_name = azurerm_virtual_network.this.name
      address_prefixes = ["10.240.0.0/16"]
    }
    
  4. Agregue el código siguiente en main.tf para crear el clúster de AKS con redes avanzadas.

    resource "azurerm_kubernetes_cluster" "this" {
      name = var.aks_cluster_name
      location = azurerm_resource_group.this.location
      resource_group_name = azurerm_resource_group.this.name
      dns_prefix = "privateadvancedaks"
    
      private_cluster_enabled = true
    
      default_node_pool {
        name = "system"
        node_count = 1
        vm_size = "Standard_DS2_v2"
        vnet_subnet_id = azurerm_subnet.aks.id
      }
    
      identity {
        type = "SystemAssigned"
      }
    
      network_profile {
        load_balancer_sku = "standard"
        network_plugin = "azure"
        dns_service_ip = "10.2.0.10"
        service_cidr = "10.2.0.0/24"
      }
    }
    
  5. Siga los pasos para inicializar Terraform, dar formato y validar la configuración de Terraform, crear un plan de ejecución de Terraform, aplicar la configuración de Terraform y conectarse al clúster de AKS.

Uso de dominios personalizados con clústeres de AKS privados

Si desea configurar dominios personalizados que solo se pueden resolver internamente, consulte Uso de dominios personalizados.

Deshabilitar un FQDN público en un clúster privado de AKS

Deshabilita un FQDN público en un nuevo clúster

Deshabilite un FQDN público al crear un clúster de AKS privado mediante el comando az aks create con la marca --disable-public-fqdn.

Parámetros clave en este comando:

  • --disable-public-fqdn: deshabilita el nombre de dominio completo (FQDN) público para el servidor de API.
  • --assign-identity <resource-id>: especifica la identidad administrada que se va a usar para el clúster.
  • --private-dns-zone [system|none]: especifica la zona DNS privada que se va a usar para el clúster. system es el valor predeterminado al configurar una zona DNS privada. Si omite --private-dns-zone, AKS crea una zona DNS privada en el grupo de recursos del nodo. none deshabilita la creación de una zona DNS privada.
az aks create \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --assign-identity <resource-id> \
    --private-dns-zone [system|none] \
    --disable-public-fqdn \
    --generate-ssh-keys
  1. Siga los pasos del 1 al 3 en Creación de un clúster de AKS privado con redes avanzadas o Creación de un clúster de AKS privado con redes básicas predeterminadas para configurar la configuración de Terraform y crear los recursos necesarios en función de su escenario. En este ejemplo se usan redes avanzadas.

  2. Agregue el código siguiente a main.tf para crear un clúster de AKS privado con una identidad asignada por el usuario y el FQDN público deshabilitado.

    resource "azurerm_user_assigned_identity" "aks" {
      name = "id-private-aks-public-fqdn-off"
      location = azurerm_resource_group.this.location
      resource_group_name = azurerm_resource_group.this.name
    }
    resource "azurerm_kubernetes_cluster" "this" {
      name = var.aks_cluster_name
      location = azurerm_resource_group.this.location
      resource_group_name = azurerm_resource_group.this.name
      dns_prefix = "privateaks"
      private_cluster_enabled = true
      private_cluster_public_fqdn_enabled = false
    
      private_dns_zone_id = "System"
    
      default_node_pool {
        name = "system"
        node_count = 1
        vm_size = "Standard_DS2_v2"
        vnet_subnet_id = azurerm_subnet.aks.id
      }
      identity {
        type = "UserAssigned"
        identity_ids = [azurerm_user_assigned_identity.aks.id]
      }
      network_profile {
        load_balancer_sku = "standard"
        network_plugin = "azure"
        dns_service_ip = "10.2.0.10"
        service_cidr = "10.2.0.0/24"
      }
    }
    
  3. Siga los pasos para inicializar Terraform, dar formato y validar la configuración de Terraform, crear un plan de ejecución de Terraform, aplicar la configuración de Terraform y conectarse al clúster de AKS.

Deshabilitar un FQDN público en un clúster existente

Deshabilite un FQDN público en un clúster de AKS existente mediante el comando az aks update con la marca --disable-public-fqdn.

Parámetros clave en este comando:

  • --disable-public-fqdn: deshabilita el nombre de dominio completo (FQDN) público para el servidor de API.
az aks update \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --disable-public-fqdn
  1. Agregue el código siguiente al existente main.tf para deshabilitar el FQDN público en un clúster de AKS existente. En este ejemplo se usan redes avanzadas. Puede modificarlo para usar las redes básicas predeterminadas cambiando los parámetros y los recursos de Terraform pertinentes.

    resource "azurerm_kubernetes_cluster" "this" {
      name = var.aks_cluster_name
      location = azurerm_resource_group.this.location
      resource_group_name = azurerm_resource_group.this.name
      dns_prefix = "privateaks"
    
      private_cluster_enabled = true
      private_cluster_public_fqdn_enabled = false
      private_dns_zone_id = "System"
    
      default_node_pool {
        name = "system"
        node_count = 1
        vm_size = "Standard_DS2_v2"
        vnet_subnet_id = azurerm_subnet.aks.id
      }
    
      identity {
        type = "UserAssigned"
        identity_ids = [azurerm_user_assigned_identity.aks.id]
      }
    
      network_profile {
        load_balancer_sku = "standard"
        network_plugin = "azure"
        dns_service_ip = "10.2.0.10"
        service_cidr = "10.2.0.0/24"
      }
    }
    
  2. Aplique la configuración actualizada de Terraform mediante los terraform plan comandos y terraform apply .

    terraform plan
    terraform apply
    

Opciones de configuración para DNS privado

Puede configurar valores DNS privados para un clúster de AKS privado mediante el CLI de Azure (con el parámetro /> --private-dns-zone parámetro / privateDNSZone propiedad:

Configuración Description
system Valor predeterminado al configurar una zona DNS privada. Si omite --private-dns-zone / privateDNSZone, AKS crea una zona DNS privada en el grupo de recursos del nodo.
none Si establece --private-dns-zone / privateDNSZone en none, AKS no crea una zona DNS privada.
<custom-private-dns-zone-resource-id> Para usar este parámetro, debe crear una zona DNS privada en el siguiente formato para Azure nube global: privatelink.<region>.azmk8s.io o <subzone>.privatelink.<region>.azmk8s.io. Necesita el identificador de recurso de la zona DNS privada para su uso futuro. También necesita una identidad asignada por el usuario o una entidad de servicio con los roles colaborador de zona DNS privada y colaborador de red. En el caso de los clústeres que usan la integración con red virtual del servidor de API, una zona DNS privada admite el formato de nomenclatura de private.<region>.azmk8s.io o <subzone>.private.<region>.azmk8s.io. No puede cambiar ni eliminar estos recursos después de crear el clúster, ya que puede provocar problemas de rendimiento y errores de actualización del clúster. Puede usar --fqdn-subdomain <subdomain> solo con <custom-private-dns-zone-resource-id> para proporcionar funcionalidades de subdominio para privatelink.<region>.azmk8s.io. Si especifica una subzona, hay un límite de 32 caracteres para el <subzone> nombre.

Consideraciones para DNS privado

Tenga en cuenta las siguientes consideraciones al configurar DNS privado para un clúster de AKS privado:

  • Si la zona DNS privada está en una suscripción diferente a la del clúster de AKS, debe registrar el proveedor de Microsoft.ContainerService Azure en ambas suscripciones.
  • Si el clúster de AKS está configurado con una entidad de servicio de Active Directory, AKS no admite el uso de una identidad administrada asignada por el sistema con una zona DNS privada personalizada. El clúster debe usar autenticación de identidad administrada asignada por el usuario.

Creación de un clúster de AKS privado con una zona DNS privada

Cree un clúster de AKS privado con una zona DNS privada mediante el az aks create comando .

Parámetros clave en este comando:

  • --enable-private-cluster: habilita el modo de clúster privado.
  • --private-dns-zone [system|none]: configura la zona DNS privada para el clúster. system es el valor predeterminado al configurar una zona DNS privada. Si omite --private-dns-zone, AKS crea una zona DNS privada en el grupo de recursos del nodo. none deshabilita la creación de una zona DNS privada.
  • --assign-identity <resource-id>: el identificador de recurso de una identidad administrada asignada por el usuario con los roles DNS privado Zone Contributor y Network Contributor.
az aks create \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --assign-identity <resource-id> \
    --private-dns-zone [system|none] \
    --generate-ssh-keys
  1. Siga los pasos del 1 al 3 en Creación de un clúster de AKS privado con redes avanzadas o Creación de un clúster de AKS privado con redes básicas predeterminadas para configurar la configuración de Terraform y crear los recursos necesarios en función de su escenario. En este ejemplo se usan redes avanzadas.

  2. Agregue el código siguiente para main.tf crear un clúster de AKS privado con una zona DNS privada administrada por AKS:

    resource "azurerm_kubernetes_cluster" "this" {
     name                = var.aks_cluster_name
     location            = azurerm_resource_group.this.location
     resource_group_name = azurerm_resource_group.this.name
     dns_prefix          = "aks-system-dns"
     private_cluster_enabled = true
     private_dns_zone_id     = "System"
     default_node_pool {
       name           = "system"
       node_count     = 1
       vm_size        = "Standard_DS2_v2"
       vnet_subnet_id = azurerm_subnet.aks.id
     }
     identity {
       type = "SystemAssigned"
     }
     network_profile {
       network_plugin    = "azure"
       load_balancer_sku = "standard"
       dns_service_ip    = "10.2.0.10"
       service_cidr      = "10.2.0.0/24"
     }
    }
    
  3. Siga los pasos para inicializar Terraform, dar formato y validar la configuración de Terraform, crear un plan de ejecución de Terraform, aplicar la configuración de Terraform y conectarse al clúster de AKS.

Creación de un clúster de AKS privado sin una zona DNS privada

  1. Siga los pasos del 1 al 3 en Creación de un clúster de AKS privado con redes avanzadas o Creación de un clúster de AKS privado con redes básicas predeterminadas para configurar la configuración de Terraform y crear los recursos necesarios en función de su escenario. En este ejemplo se usan redes avanzadas.

  2. Agregue el siguiente código a main.tf para crear el clúster de AKS sin una zona DNS privada.

    resource "azurerm_kubernetes_cluster" "this" {
     name                = var.aks_cluster_name
     location            = azurerm_resource_group.this.location
     resource_group_name = azurerm_resource_group.this.name
     dns_prefix          = "aks-no-dns"
     private_cluster_enabled = true
     private_dns_zone_id     = "None"
     default_node_pool {
       name           = "system"
       node_count     = 1
       vm_size        = "Standard_DS2_v2"
       vnet_subnet_id = azurerm_subnet.aks.id
     }
     identity {
       type = "SystemAssigned"
     }
     network_profile {
       network_plugin    = "azure"
       load_balancer_sku = "standard"
       dns_service_ip    = "10.2.0.10"
       service_cidr      = "10.2.0.0/24"
     }
    }
    
  3. Siga los pasos para inicializar Terraform, dar formato y validar la configuración de Terraform, crear un plan de ejecución de Terraform, aplicar la configuración de Terraform y conectarse al clúster de AKS.

Creación de un clúster de AKS privado con una zona DNS privada o una subzona DNS privada personalizada

Cree un clúster de AKS privado con una zona DNS privada personalizada o una subzona mediante el az aks create comando .

Parámetros clave en este comando:

  • --enable-private-cluster: habilita el modo de clúster privado.
  • --private-dns-zone [<custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>]: el identificador de recurso de una zona DNS privada o una subzona existentes en el siguiente formato para Azure nube global: privatelink.<region>.azmk8s.io o <subzone>.privatelink.<region>.azmk8s.io.
  • --assign-identity <resource-id>: el identificador de recurso de una identidad administrada asignada por el usuario con los roles DNS privado Zone Contributor y Network Contributor.
az aks create \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --assign-identity <resource-id> \
    --private-dns-zone [<custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>] \
    --generate-ssh-keys

Al usar una zona DNS privada personalizada, usted es responsable de crear y administrar la infraestructura DNS en lugar de confiar en el DNS administrado por Azure. Esto incluye la creación de la zona DNS, la vinculación a la red virtual y la asignación de los permisos necesarios para que AKS administre registros.

Para las configuraciones DNS personalizadas, debe usar una identidad administrada asignada por el usuario con los roles colaborador de zona DNS privado y Network Contributor.

  1. Siga los pasos del 1 al 3 en Creación de un clúster de AKS privado con redes avanzadas o Creación de un clúster de AKS privado con redes básicas predeterminadas para configurar la configuración de Terraform y crear los recursos necesarios en función de su escenario. En este ejemplo se usan redes avanzadas.

  2. Agregue el código a main.tf, para crear un clúster de AKS privado con una zona DNS privada personalizada o una subzona:

    resource "azurerm_user_assigned_identity" "aks" {
     name                = "aks-custom-dns-id"
     location            = azurerm_resource_group.this.location
     resource_group_name = azurerm_resource_group.this.name
    }
    resource "azurerm_private_dns_zone" "aks" {
     name                = "privatelink.eastus.azmk8s.io"
     resource_group_name = azurerm_resource_group.this.name
    }
    resource "azurerm_private_dns_zone_virtual_network_link" "link" {
     name                  = "aks-dns-link"
     resource_group_name   = azurerm_resource_group.this.name
     private_dns_zone_name = azurerm_private_dns_zone.aks.name
     virtual_network_id    = azurerm_virtual_network.this.id
    }
    resource "azurerm_role_assignment" "dns" {
     scope                = azurerm_private_dns_zone.aks.id
     role_definition_name = "Private DNS Zone Contributor"
     principal_id         = azurerm_user_assigned_identity.aks.principal_id
    }
    resource "azurerm_role_assignment" "network" {
     scope                = azurerm_virtual_network.this.id
     role_definition_name = "Network Contributor"
     principal_id         = azurerm_user_assigned_identity.aks.principal_id
    }
    resource "azurerm_kubernetes_cluster" "this" {
     name                = var.aks_cluster_name
     location            = azurerm_resource_group.this.location
     resource_group_name = azurerm_resource_group.this.name
     dns_prefix          = "aks-custom-dns"
     private_cluster_enabled = true
     private_dns_zone_id     = azurerm_private_dns_zone.aks.id
     default_node_pool {
       name           = "system"
       node_count     = 1
       vm_size        = "Standard_DS2_v2"
       vnet_subnet_id = azurerm_subnet.aks.id
     }
     identity {
       type         = "UserAssigned"
       identity_ids = [azurerm_user_assigned_identity.aks.id]
     }
     network_profile {
       network_plugin    = "azure"
       load_balancer_sku = "standard"
       dns_service_ip    = "10.2.0.10"
       service_cidr      = "10.2.0.0/24"
     }
     depends_on = [
       azurerm_role_assignment.dns,
       azurerm_role_assignment.network
     ]
    }
    
  3. Siga los pasos para inicializar Terraform, dar formato y validar la configuración de Terraform, crear un plan de ejecución de Terraform, aplicar la configuración de Terraform y conectarse al clúster de AKS.

Creación de un clúster de AKS privado con una zona DNS privada personalizada y un subdominio personalizado

Cree un clúster de AKS privado con una zona DNS privada personalizada y un subdominio mediante el az aks create comando .

Parámetros clave en este comando:

  • --enable-private-cluster: habilita el modo de clúster privado.
  • --private-dns-zone <custom-private-dns-zone-resource-id>: el identificador de recurso de una zona DNS privada existente en el siguiente formato para Azure nube global: privatelink.<region>.azmk8s.io.
  • --fqdn-subdomain <subdomain>: subdominio que se va a usar para el FQDN del clúster dentro de la zona DNS privada personalizada.
  • --assign-identity <resource-id>: el identificador de recurso de una identidad administrada asignada por el usuario con los roles DNS privado Zone Contributor y Network Contributor.
az aks create \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --assign-identity <resource-id> \
    --private-dns-zone <custom-private-dns-zone-resource-id> \
    --fqdn-subdomain <subdomain> \
    --generate-ssh-keys
  1. Siga los pasos del 1 al 3 en Creación de un clúster de AKS privado con redes avanzadas o Creación de un clúster de AKS privado con redes básicas predeterminadas para configurar la configuración de Terraform y crear los recursos necesarios en función de su escenario. En este ejemplo se usan redes avanzadas.

  2. Agregue el siguiente código a main.tf para crear un clúster de AKS privado, con una zona DNS privada personalizada y un subdominio:

    resource "azurerm_kubernetes_cluster" "this" {
     name                = var.aks_cluster_name
     location            = azurerm_resource_group.this.location
     resource_group_name = azurerm_resource_group.this.name
     dns_prefix          = "aks-subdomain"
     private_cluster_enabled = true
     private_dns_zone_id     = azurerm_private_dns_zone.aks.id
     fqdn_subdomain          = "team1"
     default_node_pool {
       name           = "system"
       node_count     = 1
       vm_size        = "Standard_DS2_v2"
       vnet_subnet_id = azurerm_subnet.aks.id
     }
     identity {
       type         = "UserAssigned"
       identity_ids = [azurerm_user_assigned_identity.aks.id]
     }
     network_profile {
       network_plugin    = "azure"
       load_balancer_sku = "standard"
       dns_service_ip    = "10.2.0.10"
       service_cidr      = "10.2.0.0/24"
     }
    }
    
  3. Siga los pasos para inicializar Terraform, dar formato y validar la configuración de Terraform, crear un plan de ejecución de Terraform, aplicar la configuración de Terraform y conectarse al clúster de AKS.

Actualización de un clúster de AKS privado existente desde una zona DNS privada a pública

Solo puede actualizar de byo (BYO) o system a none. No se admite ninguna otra combinación de valores de actualización.

Advertencia

Al actualizar un clúster privado de byo o system a none, los nodos del agente cambian para usar un FQDN público. En un clúster de AKS que utiliza Virtual Machine Scale Sets de Azure, se realiza una actualización de la imagen de nodo para actualizar los nodos con el FQDN público.

Actualice un clúster privado de byo u system a none usando el comando az aks update con el parámetro --private-dns-zone establecido en none.

az aks update \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --private-dns-zone none
  1. Agregue el código siguiente al existente main.tf para actualizar el clúster de AKS privado desde una zona DNS privada a pública. En este ejemplo se usan redes avanzadas. Puede modificarlo para usar las redes básicas predeterminadas cambiando los parámetros y los recursos de Terraform pertinentes.

    resource "azurerm_kubernetes_cluster" "this" {
     name                = var.aks_cluster_name
     location            = azurerm_resource_group.this.location
     resource_group_name = azurerm_resource_group.this.name
     dns_prefix          = "aks-update"
     private_cluster_enabled = true
     private_dns_zone_id     = "None"
     default_node_pool {
       name           = "system"
       node_count     = 1
       vm_size        = "Standard_DS2_v2"
       vnet_subnet_id = azurerm_subnet.aks.id
     }
     identity {
       type         = "UserAssigned"
       identity_ids = [azurerm_user_assigned_identity.aks.id]
     }
     network_profile {
       network_plugin    = "azure"
       load_balancer_sku = "standard"
       dns_service_ip    = "10.2.0.10"
       service_cidr      = "10.2.0.0/24"
     }
    }
    
  2. Aplique la configuración actualizada de Terraform mediante los terraform plan comandos y terraform apply .

    terraform plan
    terraform apply
    

Inicialización de Terraform

Inicialice Terraform en el directorio que contiene el archivo main.tf usando el comando terraform init. Este comando descarga el proveedor de Azure necesario para administrar Azure recursos con Terraform.

terraform init

Dar formato y validar la configuración de Terraform

Dar formato y validar la configuración de Terraform mediante los terraform fmt comandos y terraform validate .

terraform fmt
terraform validate

Creación de un plan de ejecución de Terraform

Cree un plan de ejecución de Terraform mediante el comando terraform plan. Este comando muestra los recursos que Terraform creará o modificará en la suscripción de Azure.

terraform plan -var="subscription_id=<your-subscription-id>"

Aplica la configuración de Terraform

Después de revisar y confirmar el plan de ejecución, aplique la configuración de Terraform mediante el terraform apply comando . Este comando crea o modifica los recursos definidos en el archivo main.tf de la suscripción de Azure.

terraform apply -var="subscription_id=<your-subscription-id>"

Configuración de kubectl para conectarse a un clúster de AKS privado

Para administrar un clúster de Kubernetes, use kubectl, el cliente de línea de comandos de Kubernetes. kubectl ya está instalado si usa Azure Cloud Shell. Para instalar kubectl localmente, use el comando az aks install-cli.

  1. Configure kubectl para conectarse a su clúster de Kubernetes utilizando el comando az aks get-credentials. Con este comando se descargan las credenciales y se configura la CLI de Kubernetes para usarlas.

    az aks get-credentials --resource-group <private-cluster-resource-group> --name <private-cluster-name>
    
  2. Compruebe la conexión al clúster con el comando kubectl get. Este comando devuelve una lista de los nodos del clúster.

    kubectl get nodes
    

    El comando devuelve una salida similar a la salida de ejemplo siguiente:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-12345678-vmss000000   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-12345678-vmss000001   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-12345678-vmss000002   Ready    agent   3h6m   v1.15.11