Creación de un clúster privado de Azure Kubernetes Service (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 la API están en un grupo de recursos de Azure administrada mediante Azure Kubernetes Service (AKS). El grupo de clústeres o 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 la API y de un punto de conexión privado expuesto en la subred del clúster de AKS.

Al aprovisionar un clúster de AKS privado, AKS crea de forma predeterminada un FQDN privado con una zona DNS privada y un FQDN público adicional con un registro A correspondiente en un DNS público de Azure. Los nodos del agente siguen usando el registro A en la zona DNS privada, con el fin de resolver la dirección IP privada del punto de conexión privado para la comunicación con el servidor de la API.

El propósito de este artículo es ayudarle a implementar un clúster de AKS basado en vínculo privado. Si está interesado en crear un clúster de AKS sin necesidad de ningún vínculo privado o túnel, consulte Creación de un clúster de Azure Kubernetes Service con API Server VNet Integration (versión preliminar).

Disponibilidad en regiones

El clúster privado está disponible en las regiones públicas, Azure Government y Microsoft Azure operado por 21Vianet en las que se admita AKS.

Requisitos previos

  • La CLI de Azure versión 2.28.0 y superior. Ejecute az --version para buscar la versión y ejecute az upgrade para actualizar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
  • La extensión aks-preview, versión 0.5.29 o una posterior.
  • Si usa Azure Resource Manager (ARM) o la API REST de Azure, la versión de la API de AKS debe ser 2021-05-01 o superior.
  • El servicio Azure Private Link solo se admite en Standard Azure Load Balancer. No se admite en Basic Azure Load Balancer.
  • Para usar un servidor DNS personalizado, agrega la dirección IP pública de Azure 168.63.129.16 como el servidor DNS ascendente en el servidor DNS personalizado y asegúrese de agregar esta dirección IP pública como el primer servidor DNS. Para más información sobre la dirección IP de Azure, consulte ¿Qué es la dirección IP 168.63.129.16?

Nota:

El grupo de nodos de Linux en Azure ahora está disponible con carácter general (GA). Para obtener información sobre las ventajas y los pasos de implementación, vea Introducción al host de contenedor linux de Azure para AKS.

Limitaciones

  • Los intervalos autorizados de direcciones IP no se pueden aplicar al punto de conexión del servidor de API privado; solo se aplican al servidor de API público.
  • Las limitaciones del servicio Azure Private Link aplican a los clústeres privados.
  • No se admiten agentes hospedados por Microsoft en Azure DevOps con clústeres privados. Considere la posibilidad de usar agentes autohospedados.
  • Si tiene que habilitar Azure Container Registry para que funcione con un clúster de AKS privado, configure un vínculo privado para el registro de contenedor en la red virtual del clúster, o bien configure el emparejamiento entre la red virtual de Container Registry y la del clúster privado.
  • No se admite la conversión de clústeres de AKS existentes en clústeres privados.
  • La eliminación o modificación del punto de conexión privado en la subred del cliente hará que el clúster deje de funcionar.

Creación de un clúster privado de AKS

Crear 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 -l eastus -n myResourceGroup

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.

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster  

Redes avanzadas

Cree un clúster privado con redes avanzadas mediante el comando az aks create con las marcas siguientes:

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 10.2.0.10 \
    --service-cidr 10.2.0.0/24 

Uso de dominios personalizados

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

Deshabilitación de un FQDN público

Deshabilitación de un FQDN público en un nuevo clúster de AKS

Deshabilite un FQDN público al crear un clúster de AKS privado mediante la marca --disable-public-fqdn.

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <private-dns-zone-mode> --disable-public-fqdn

Deshabilitación de 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.

az aks update -n <private-cluster-name> -g <private-cluster-resource-group> --disable-public-fqdn

Configuración de una zona DNS privada

Puede configurar zonas DNS privadas mediante los parámetros siguientes:

  • system: este es el valor predeterminado. Si se omite el argumento --private-dns-zone, AKS creará una zona DNS privada en el grupo de recursos del nodo.
  • none: el valor predeterminado es DNS público. AKS no creará una zona DNS privada.
  • CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID: requiere la creación de una zona DNS privada en el formato siguiente para la nube global de Azure: privatelink.<region>.azmk8s.io o <subzone>.privatelink.<region>.azmk8s.io. Necesitará 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. Al implementar mediante la integración con red virtual de un servidor de API, una zona DNS privada admite el formato de nomenclatura de private.<region>.azmk8s.io o <subzone>.private.<region>.azmk8s.io.
    • Si la zona DNS privada está en una suscripción diferente a la del clúster de AKS, debe registrar el proveedor de Azure Microsoft.ContainerServices en ambas suscripciones.
    • "fqdn-subdomain" solo se puede usar con "CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID" para proporcionar capacidades de subdominio a privatelink.<region>.azmk8s.io.
    • 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.
    • Si va a especificar una <subzone>, hay un límite de 32 caracteres para el nombre de <subzone>.

Nota:

CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID se puede configurar mediante una plantilla de ARM además de la CLI de Azure. privateDNSZone acepta el resourceID de zona DNZ privada, como se muestra en el ejemplo siguiente:

properties.apiServerAccessProfile.privateDNSZone.
"apiServerAccessProfile": {
"enablePrivateCluster": true,
"privateDNSZone": "system|none|[resourceId(..., 'Microsoft.Network/privateDnsZones', 'privatelink.<region>.azmk8s.io']"
}

Importante

El CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID no se puede cambiar una vez creado el clúster y no se puede eliminar. De lo contrario, el clúster tendrá problemas para realizar operaciones de actualización.

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 comando az aks create con las marcas siguientes:

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone [system|none]

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 o subzona DNS privada personalizada mediante el comando az aks create con las marcas siguientes:

# The custom private DNS zone name should be in the following format: "<subzone>.privatelink.<region>.azmk8s.io"

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <custom private dns zone or custom private dns subzone resourceID>

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 o un subdominio personalizado mediante el comando az aks create con las marcas siguientes:

# The custom private DNS zone name should be in one of the following formats: "privatelink.<region>.azmk8s.io" or "<subzone>.privatelink.<region>.azmk8s.io"

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <custom private dns zone resourceID> --fqdn-subdomain <subdomain>

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

Nota

Esta característica requiere la extensión aks-preview, versión > = 0.5.97

Actualice un clúster privado desde byo o system a none mediante el comando az aks update con las marcas siguientes:

az aks update -n <private-cluster-name> -g <private-cluster-resource-group> --private-dns-zone none

Nota

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

Opciones para conectarse al clúster privado

El punto de conexión del servidor de la API no tiene ninguna dirección IP pública. Para administrar el servidor de API, necesitará una máquina virtual que tenga acceso a la red virtual de Azure (VNet) del clúster de AKS. Hay varias opciones para establecer la conectividad de red con el clúster privado:

Nota:

La opción más sencilla es crear una máquina virtual en la misma red virtual que el clúster de AKS. ExpressRoute y las VPN incrementan los costos y requieren redes más complejas. Para utilizar el emparejamiento de red virtual, debe planear los intervalos CIDR de la red para asegurarse de que no haya intervalos superpuestos.

Emparejamiento de redes virtuales de Azure

El emparejamiento de red virtual es un mecanismo para acceder a un clúster privado. Si desea usar el emparejamiento de red virtual, tiene que configurar un vínculo entre la red virtual y la zona DNS privada.

  1. En el explorador, vaya a Azure Portal.
  2. En Azure Portal, vaya al grupo de recursos del nodo.
  3. Seleccione la zona DNS privada.
  4. En el panel de la izquierda, seleccione Red virtual.
  5. Cree un nuevo vínculo para agregar la red virtual de la máquina virtual a la zona DNS privada. El vínculo de la zona DNS puede tardar unos minutos en estar disponible.
  6. En Azure Portal, vaya al grupo de recursos que contiene la red virtual del clúster.
  7. En el panel derecho, seleccione la red virtual. El nombre de la red virtual tiene el formato aks-vnet-*.
  8. En el panel izquierdo, seleccione Emparejamientos.
  9. Seleccione Agregar, agregue la red virtual de la máquina virtual y, después, cree el emparejamiento. Para más información, consulte Emparejamiento de redes virtuales.

Concentrador y radio con DNS personalizado

Las arquitecturas de concentrador y radio suelen usarse para implementar 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. Al implementar un clúster de AKS en un entorno de red de este tipo, hay algunas consideraciones especiales que se deben tener en cuenta:

Private cluster hub and spoke

  • De manera predeterminada, cuando se aprovisiona un clúster privado, se crean un punto de conexión privado (1) y una zona DNS privada (2) en el grupo de recursos administrados del clúster. 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 adjuntados los nodos del clúster (3). Esto significa que el punto de conexión privado solo lo pueden resolver los hosts de esa red virtual vinculada. En escenarios en los que no haya ningún DNS personalizado configurado en la red virtual (valor predeterminado), esto funciona sin incidencias, ya que los hosts apuntan a 168.63.129.16 para DNS, que puede resolver registros en la zona DNS privada debido al vínculo.
  • En escenarios en los que la red virtual que contiene el clúster tenga una configuración de DNS personalizada (4), se produce un error en la implementación del clúster a menos que la zona DNS privada esté vinculada a la red virtual que contiene las resoluciones de DNS personalizadas (5). Este vínculo se puede crear manualmente después de crear la zona privada, durante el aprovisionamiento del clúster, o a través de la automatización si se detecta la creación de la zona usando mecanismos de implementación basados en eventos (por ejemplo, Azure Event Grid y Azure Functions). Para evitar errores de clúster durante la implementación inicial, el clúster se puede implementar con el identificador de recurso de zona DNS privado. Esto solo funciona con el tipo de recurso Microsoft.ContainerService/managedCluster y la versión de API 2022-07-01. No se admite el uso de una versión anterior con una plantilla de ARM o una definición de recurso de Bicep.

Nota

El reenvío condicional no admite subdominios.

Nota

Si usa Traiga su propia tabla de rutas con kubenet y Traiga su propio DNS con clústeres privados, se producirá 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.

Use una conexión de punto de conexión privado

Se puede configurar un punto de conexión privado para que no sea necesario emparejar una red virtual para comunicarse con el clúster privado. Para usar un punto de conexión privado, cree uno en la red virtual y, después, cree un vínculo entre la red virtual y una nueva zona DNS privada.

Importante

Si la red virtual está configurada con servidores DNS personalizados, el DNS privado se debe configurar correctamente para el entorno. Vea la documentación de resolución de nombres de redes virtuales para más información.

Creación de un recurso de punto de conexión privado

Cree un recurso de punto de conexión privado en la red virtual:

  1. En el explorador, vaya a Azure Portal.
  2. En el menú de Azure Portal, seleccione Crear un recurso.
  3. Busque Punto de conexión privado y seleccione Crear > Punto de conexión privado.
  4. Seleccione Crear.
  5. En la pestaña Aspectos básicos, configure las opciones siguientes:
    • Detalles del proyecto:
      • Seleccione una suscripción de Azure.
      • Seleccione el grupo de recursos de Azure donde se encuentra la red virtual.
    • Detalles de la instancia:
      • Escriba un Nombre para el punto de conexión privado, como myPrivateEndpoint.
      • Seleccione una región para el punto de conexión privado.

Importante

Compruebe que la región seleccionada es la misma que la red virtual desde la que quiere conectarse; de lo contrario, no verá la red virtual en la pestaña Configuración.

  1. Seleccione Siguiente: Recurso y configure las siguientes opciones:
    • Método de conexión: seleccione Conectarse a un recurso Azure en mi directorio.
    • Suscripción: seleccione la suscripción donde se encuentra el clúster privado.
    • Tipo de recurso: seleccione Microsoft.ContainerService/managedClusters.
    • Recurso: seleccione el clúster privado.
    • Subrecurso de destino: seleccione administración.
  2. Seleccione Siguiente: Virtual Network y configure las siguientes opciones:
    • Redes:
      • Red virtual: Seleccione la red virtual.
      • Subred: seleccione la subred.
  3. Seleccione Siguiente: DNS>Siguiente: Etiquetas y (opcionalmente) configure los valores de clave según sea necesario.
  4. Seleccione Siguiente: Revisar y crear>Crear.

Una vez creado el recurso, registre la dirección IP privada del punto de conexión privado para su uso futuro.

Crear una zona DNS privada

Una vez que se crea el punto de conexión privado, cree una zona DNS privada con el mismo nombre que la que ha creado el clúster privado:

  1. Vaya al grupo de recursos del nodo en Azure Portal.
  2. Seleccione la zona DNS privada y el registro:
    • Nombre de la zona DNS privada, que sigue el patrón *.privatelink.<region>.azmk8s.io.
    • Nombre del registro A (excepto el nombre DNS privado).
    • Período de vida (TTL).
  3. En Azure Portal, seleccione Crear un recurso.
  4. Busque Zona DNS privada y seleccione Crear > Zona DNS privada.
  5. En la pestaña Aspectos básicos, configure las opciones siguientes:
    • Detalles del proyecto:
      • Seleccione su suscripción.
      • Seleccione el grupo de recursos donde creó el punto de conexión privado.
    • Detalles de la instancia:
      • Escriba el nombre de la zona DNS que ha recuperado en los pasos anteriores.
      • El valor predeterminado de la Región es la ubicación del grupo de recursos.
  6. Seleccione Revisar y crear>Crear.

Creación de un registro A

Una vez creada la zona DNS privada, cree un registro A, que asocia el punto de conexión privado al clúster privado:

  1. Vaya a la zona DNS privada creada en los pasos anteriores.
  2. En la página Información general, seleccione Conjunto de registros.
  3. En la pestaña Agregar conjunto de registros, configure las opciones siguientes:
    • Nombre: introduzca el nombre recuperado del registro A en la zona DNS del clúster privado.
    • Tipo: seleccione A: registro de dirección.
    • TTL: escriba el número del registro A en la zona DNS del clúster privado.
    • Unidad TTL: cambie el valor de la lista desplegable para que coincida con el registro A de la zona DNS del clúster privado.
    • Dirección IP: escriba la dirección IP del punto de conexión privado que ha creado.

Importante

Al crear el registro A, use solo el nombre y no el nombre de dominio completo (FQDN).

Una vez que se crea el registro A, vincule la zona DNS privada a la red virtual que accederá al clúster privado:

  1. Vaya a la zona DNS privada creada en los pasos anteriores.
  2. En el panel izquierdo, seleccione Vínculos de red virtual.
  3. Seleccione Agregar y configure las siguientes opciones:
    • Nombre del vínculo: escriba un nombre para el vínculo de red virtual.
    • Suscripción: seleccione la suscripción donde se encuentra el clúster privado.
    • Red virtual: seleccione la red virtual del clúster privado.
  4. Seleccione Aceptar para crear el vínculo.

La operación puede tardar unos minutos en completarse. Una vez creado el vínculo de red virtual, puede acceder a él desde la pestaña Vínculos de red virtual que usó en el paso 2.

Advertencia

Si el clúster privado se detiene y reinicia, se quita y se vuelve a crear el servicio de vínculo privado original del clúster privado, lo que interrumpe la conexión entre el punto de conexión privado y el clúster privado. Para resolver este problema, elimine y vuelva a crear los puntos de conexión privados creados por el usuario vinculados al clúster privado. Si los puntos de conexión privados recreados tienen nuevas direcciones IP, también deberá actualizar los registros DNS.

Pasos siguientes

Para los procedimientos recomendados asociados, consulte Procedimientos recomendados con la conectividad de red y la seguridad en Azure Kubernetes Service (AKS).