Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las organizaciones suelen tener estrictos requisitos de seguridad y cumplimiento para regular el tráfico de red de salida (saliente) desde un clúster para eliminar riesgos de filtración de datos. De forma predeterminada, los clústeres estándar de SKU de Azure Kubernetes Service (AKS) tienen acceso a Internet saliente sin restricciones. Este nivel de acceso a la red permite que los nodos y servicios que ejecuta accedan a recursos externos según sea necesario. Si desea restringir el tráfico de salida, es necesario el acceso a un número limitado de puertos y direcciones para mantener las tareas de mantenimiento del clúster en buen estado. En el documento conceptual sobre las reglas de FQDN y de red de salida para clústeres de AKS se proporciona una lista de los puntos de conexión necesarios para el clúster de AKS y sus complementos y características opcionales.
Una solución común para restringir el tráfico saliente del clúster es usar un dispositivo de firewall para restringir el tráfico en función de las reglas de firewall. El firewall es aplicable cuando la aplicación requiere acceso saliente, pero cuando se deben inspeccionar y proteger las solicitudes salientes. La configuración manual de un firewall con reglas de salida necesarias y FQDN es un proceso complicado, especialmente si el único requisito es crear un clúster de AKS aislado sin dependencias salientes para el arranque del clúster.
Para reducir el riesgo de filtración de datos, el clúster aislado de red permite arrancar el clúster de AKS sin dependencias de red salientes, incluso para capturar componentes o imágenes del clúster de Microsoft Artifact Registry (MAR). El operador de clúster podría configurar incrementalmente el tráfico saliente permitido para cada escenario que quiera habilitar. En este artículo se describen los pasos para crear un clúster aislado de red.
Antes de empezar
- Lea la introducción conceptual de esta característica, que proporciona una explicación de cómo funcionan los clústeres aislados de red. En el artículo de información general también:
- Explica dos opciones para el recurso de Azure Container Registry (ACR) privado que se usa para el arranque del clúster: ACR administrado por AKS o bring-your-own ACR.
- Explica dos modos de clúster privado para crear acceso privado al servidor de API: basado en vínculo privado o integración de la red virtual del servidor de API.
- Explica los dos tipos de salida para el control de egreso del clúster:
noneoblock(versión preliminar). - Describe las limitaciones actuales de los clústeres aislados de red.
Nota:
El tipo de salida none está disponible con carácter general.
El tipo de salida block está en versión preliminar.
Importante
Las características en versión preliminar de AKS están disponibles como opción de participación y autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y la garantía limitada. Las versiones preliminares de AKS reciben cobertura parcial del soporte al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Introducción a Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. para obtener más información, consulte ejecución de la cli de azure en un contenedor de docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Autenticación en Azure mediante la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para obtener más información sobre las extensiones, consulte Uso y administración de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
- Este artículo requiere la versión 2.73.0 o posterior de la CLI de Azure. Si usa Azure Cloud Shell, ya está instalada allí la versión más reciente.
- Debe instalar la versión
aks-preview9.0.0b2 o posterior de la extensión CLI de Azureblocksi utiliza el tipo de salida (versión preliminar).- Si aún no tiene la
aks-previewextensión, instálela mediante elaz extension addcomando.az extension add --name aks-preview - Si ya tiene la
aks-previewextensión, actualícela para asegurarse de que tiene la versión más reciente mediante elaz extension updatecomando.az extension update --name aks-preview
- Si aún no tiene la
- Los clústeres aislados de red se admiten en clústeres de AKS mediante Kubernetes versión 1.30 o posterior.
- Si elige usar la opción Bring your own (BYO) Azure Container Registry (ACR), debe asegurarse de que ACR es el nivel de servicio de SKU Premium.
- Si usa un clúster con aislamiento de red configurado con la integración de red virtual del servidor de API, siga los requisitos previos y las directrices de Uso de la integración de red virtual del servidor de API con Azure Kubernetes Service.
Establecimiento de variables de entorno
Establezca las variables de entorno que se usan en este artículo. El nombre de ACR debe ser único globalmente y contener solo caracteres alfanuméricos en minúsculas.
RESOURCE_GROUP="myResourceGroup"
LOCATION="eastus"
AKS_NAME="myAKSCluster"
VNET_NAME="myVNet"
AKS_SUBNET_NAME="aksSubnet"
ACR_SUBNET_NAME="acrSubnet"
APISERVER_SUBNET_NAME="apiServerSubnet"
REGISTRY_NAME="myregistry${RANDOM}"
CLUSTER_IDENTITY_NAME="clusterIdentity"
KUBELET_IDENTITY_NAME="kubeletIdentity"
az group create --name ${RESOURCE_GROUP} --location ${LOCATION}
- Una cuenta de Azure con una suscripción activa. Si no tienes una, crea una cuenta gratuita antes de empezar.
- Instale y configure Terraform.
- CLI de Azure instalado e iniciado sesión con
az login, se usa para comprobar la implementación y conectarse al clúster. Instale CLI de Azure si aún no lo tiene. -
kubectlinstalado para conectarse al clúster. Si usa Azure Cloud Shell,kubectlya está instalado. Para instalarlo localmente, use elaz aks install-clicomando . -
jqinstalado, utilizado para analizar el estado de Terraform al verificar la implementación. Azure Cloud Shell ya tienejqinstalado.
Implementación de un clúster aislado de red con ACR administrado por AKS
AKS crea, administra y reconcilia un recurso de ACR en esta opción. No es necesario asignar permisos ni administrar el ACR. AKS administra las reglas de caché, el vínculo privado y el punto de conexión privado que se usan en el clúster aislado de red.
Creación de un clúster aislado de red
Al crear un clúster de AKS con aislamiento de red, elija uno de los siguientes modos de clúster privado: basado en vínculo privado o integración de red virtual del servidor de API.
Establezca el origen del artefacto y el tipo de salida en función de los requisitos de aislamiento de red.
| Parameter | Valores aceptados/efecto |
|---|---|
--bootstrap-artifact-source |
Directextrae imágenes directamente de Microsoft Artifact Registry (MAR) y no está aislada de la red.
Cache extrae imágenes de un ACR privado y está aislada de la red. |
--outbound-type |
none no configura las conexiones salientes para el clúster, por lo que puede configurarlas.
block (versión preliminar) bloquea todas las conexiones salientes. |
Basado en vínculo privado
Cree un clúster de red aislada basada en vínculos privados mediante la ejecución del comando az aks create con los parámetros --bootstrap-artifact-source, --enable-private-cluster y --outbound-type.
az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --outbound-type none --network-plugin azure --enable-private-cluster
Integración con red virtual de un servidor de API
Cree un clúster de AKS aislado de red configurado con la integración con red virtual del servidor de API ejecutando el comando az aks create con los parámetros --bootstrap-artifact-source, --enable-private-cluster, --enable-apiserver-vnet-integration y --outbound-type.
az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --outbound-type none --network-plugin azure --enable-private-cluster --enable-apiserver-vnet-integration
Actualización de un clúster de AKS existente al tipo aislado de red
Si prefiere habilitar el aislamiento de red en un clúster de AKS existente en lugar de crear un nuevo clúster, use el comando az aks update.
Para habilitar la característica aislada de red en un clúster de AKS existente, ejecute primero el siguiente comando para actualizar bootstrap-artifact-source:
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache
A continuación, debe volver a crear una imagen manual de todos los grupos de nodos existentes:
az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only
Nota:
Debe asegurarse de que el saliente existe hasta que se complete la primera imagen de nuevo. Para comprobar si se completa la imagen de nuevo, ejecute:
NODEPOOLS=$(az aks nodepool list \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--query "[].name" -o tsv)
for NODEPOOL in $NODEPOOLS; do
echo "Waiting for node pool $NODEPOOL to finish upgrading..."
az aks nodepool wait \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--name "$NODEPOOL" \
--updated
echo "Node pool $NODEPOOL upgrade succeeded."
done
Espere y asegúrese de que se completa la imagen de imagen y, a continuación, ejecute el siguiente comando para actualizar outbound-type:
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --outbound-type none
Importante
Recuerde volver a generar la imagen de los grupos de nodos del clúster al instante después de actualizar el origen del artefacto en la Caché. De lo contrario, la característica no surtirá efecto para el clúster.
Implementación de un clúster aislado de red con BYO ACR
AKS admite la incorporación de su propio ACR (BYO ACR). Para admitir el escenario de BYO ACR, debe configurar un punto de conexión privado de ACR y una zona DNS privada antes de crear el clúster de AKS.
Los pasos siguientes muestran cómo preparar estos recursos:
- Red virtual personalizada y subredes para AKS y ACR.
- ACR, regla de caché de ACR, punto de conexión privado y zona DNS privada.
- Identidad del plano de control personalizado e identidad de kubelet.
Paso 1: Crear la red virtual y las subredes
az network vnet create --resource-group ${RESOURCE_GROUP} --name ${VNET_NAME} --address-prefixes 192.168.0.0/16
az network vnet subnet create --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.1.0/24
SUBNET_ID=$(az network vnet subnet show --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' --output tsv)
az network vnet subnet create --name ${ACR_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.2.0/24 --private-endpoint-network-policies Disabled
Paso 2: Deshabilitar la conectividad saliente de red virtual (opcional)
Por ejemplo, haga que la subred de AKS sea privada estableciendo su acceso de salida predeterminado a false.
az network vnet subnet update --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --name ${AKS_SUBNET_NAME} --default-outbound false
Para conocer otros métodos admitidos y consideraciones de transición, consulte Deshabilitación de la conectividad saliente de red virtual.
Paso 3: Crear el ACR y habilitación de la caché de artefactos
Cree el ACR con el acceso a la red pública deshabilitado.
az acr create --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --sku Premium --public-network-enabled false REGISTRY_ID=$(az acr show --name ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --query 'id' --output tsv)Crea una regla de caché de ACR mediante el siguiente comando para permitir a los usuarios almacenar en caché imágenes de contenedor MAR y binarios en el nuevo ACR. El nombre de la regla de caché y los nombres de repositorio deben seguir las instrucciones de la sección siguiente.
az acr cache create -n aks-managed-mcr -r ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --source-repo "mcr.microsoft.com/*" --target-repo "aks-managed-repository/*"
Nota:
Con BYO ACR, es su responsabilidad asegurarse de que la regla de caché de ACR se crea y mantiene correctamente como se indicó anteriormente. Este paso es fundamental para la creación, el funcionamiento y la actualización del clúster. Esta regla de caché NO debe modificarse.
Paso 4: Crear un punto de conexión privado para ACR
az network private-endpoint create --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --subnet ${ACR_SUBNET_NAME} --private-connection-resource-id ${REGISTRY_ID} --group-id registry --connection-name myConnection
NETWORK_INTERFACE_ID=$(az network private-endpoint show --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --query 'networkInterfaces[0].id' --output tsv)
REGISTRY_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry'].privateIPAddress" --output tsv)
DATA_ENDPOINT_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$LOCATION'].privateIPAddress" --output tsv)
Paso 5: Crear una zona DNS privada y agregar registros
Cree una zona DNS privada denominada privatelink.azurecr.io. Agregue los registros del punto de conexión REST del registro {REGISTRY_NAME}.azurecr.io y el punto de conexión de datos del registro {REGISTRY_NAME}.{LOCATION}.data.azurecr.io.
az network private-dns zone create --resource-group ${RESOURCE_GROUP} --name "privatelink.azurecr.io"
az network private-dns link vnet create --resource-group ${RESOURCE_GROUP} --zone-name "privatelink.azurecr.io" --name MyDNSLink --virtual-network ${VNET_NAME} --registration-enabled false
az network private-dns record-set a create --name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}
az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${REGISTRY_PRIVATE_IP}
az network private-dns record-set a create --name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}
az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${DATA_ENDPOINT_PRIVATE_IP}
Paso 6: Crear identidades del plano de control y de kubelet
Identidad del plano de control
az identity create --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}
CLUSTER_IDENTITY_RESOURCE_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)
CLUSTER_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)
Identidad de kubelet
az identity create --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}
KUBELET_IDENTITY_RESOURCE_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)
KUBELET_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)
Si va a actualizar un clúster de AKS existente, omita los comandos de creación de identidades anteriores y recupere el identificador de objeto de identidad kubelet existente:
KUBELET_IDENTITY_PRINCIPAL_ID=$(az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --query identityProfile.kubeletidentity.objectId -o tsv)
Conceder permisos de extracción de ACR a la identidad del kubelet
Compruebe el modo de permisos de asignación de roles del registro y seleccione el rol de extracción correspondiente. Los registros habilitados para ABAC usan el rol Container Registry Repository Reader. Los registros no habilitados para ABAC usan el AcrPull rol .
ROLE_ASSIGNMENT_MODE=$(az acr show --name ${REGISTRY_NAME} --resource-group ${RESOURCE_GROUP} --query roleAssignmentMode -o tsv)
if [[ "${ROLE_ASSIGNMENT_MODE}" == "rbac-abac" ]]; then
ACR_PULL_ROLE="Container Registry Repository Reader"
else
ACR_PULL_ROLE="AcrPull"
fi
az role assignment create --role "${ACR_PULL_ROLE}" --scope ${REGISTRY_ID} --assignee-object-id ${KUBELET_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal
Después de configurar estos recursos, puede continuar con la creación del clúster de AKS aislado de red con BYO ACR.
Paso 7: Creación de un clúster aislado de red mediante BYO ACR
Al crear un clúster con aislamiento de red, elija uno de los siguientes modos de clúster privado: basado en Private Link o Integración de VNet del servidor de API.
Establezca el origen del artefacto y el tipo de salida en función de los requisitos de aislamiento de red.
| Parameter | Valores aceptados/efecto |
|---|---|
--bootstrap-artifact-source |
Directextrae imágenes directamente de Microsoft Artifact Registry (MAR) y no está aislada de la red.
Cache extrae imágenes de un ACR privado y está aislada de la red. |
--outbound-type |
none no configura las conexiones salientes para el clúster, por lo que puede configurarlas.
block (versión preliminar) bloquea todas las conexiones salientes. |
Basado en vínculo privado
Cree un clúster aislado de red basado en vínculo privado que acceda a ACR mediante la ejecución del comando az aks create con los parámetros necesarios.
az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-private-cluster
Integración con red virtual de un servidor de API
En el caso de un clúster aislado de red configurado con la integración con red virtual del servidor de API, cree primero una subred y asigne el rol correcto con los siguientes comandos:
az network vnet subnet create --name ${APISERVER_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.3.0/24 --delegations Microsoft.ContainerService/managedClusters
export APISERVER_SUBNET_ID=$(az network vnet subnet show --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --name ${APISERVER_SUBNET_NAME} --query id -o tsv)
az role assignment create --scope ${APISERVER_SUBNET_ID} --role "Network Contributor" --assignee-object-id ${CLUSTER_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal
az role assignment create --scope ${SUBNET_ID} --role "Network Contributor" --assignee-object-id ${CLUSTER_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal
Cree un clúster aislado en una red privada configurado con la integración de red virtual del servidor de API y acceda a su ACR ejecutando el comando az aks create con los parámetros necesarios.
az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-private-cluster --enable-apiserver-vnet-integration --apiserver-subnet-id ${APISERVER_SUBNET_ID}
Actualización de un clúster de AKS ya existente
Si prefiere habilitar el aislamiento de red en un clúster de AKS existente en lugar de crear un nuevo clúster, use el comando az aks update.
Al crear el punto de conexión privado y la zona DNS privada para BYO ACR, use la red virtual y las subredes existentes del clúster de AKS existente. Al asignar el rol de extracción de ACR adecuado a la identidad de kubelet, use la identidad existente de kubelet del clúster de AKS ya existente.
Para habilitar la característica aislada de red en un clúster de AKS existente, ejecute primero el siguiente comando para actualizar bootstrap-artifact-source:
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID}
A continuación, debe volver a crear una imagen manual de todos los grupos de nodos existentes:
az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only
Nota:
Debe asegurarse de que el saliente existe hasta que se complete la primera imagen de nuevo. Para comprobar si se completa la imagen de nuevo, ejecute:
NODEPOOLS=$(az aks nodepool list \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--query "[].name" -o tsv)
for NODEPOOL in $NODEPOOLS; do
echo "Waiting for node pool $NODEPOOL to finish upgrading..."
az aks nodepool wait \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--name "$NODEPOOL" \
--updated
echo "Node pool $NODEPOOL upgrade succeeded."
done
Espere y asegúrese de que se completa la imagen de imagen y, a continuación, ejecute el siguiente comando para actualizar outbound-type:
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --outbound-type none
Importante
Recuerde volver a generar la imagen de los grupos de nodos del clúster al instante después de actualizar el origen del artefacto en la Caché. De lo contrario, la característica no surtirá efecto para el clúster.
Actualización del identificador de ACR
Puede actualizar el ACR privado que se usa con un clúster aislado de red. Para identificar el identificador de recurso de ACR, use el comando az aks show.
az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}
Para actualizar el identificador de ACR, ejecute el comando az aks update con los parámetros --bootstrap-artifact-source y --bootstrap-container-registry-resource-id.
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id <new-byo-acr-resource-id>
Al actualizar el identificador de ACR en un clúster existente, debe volver a crear una imagen manual de todos los nodos existentes.
az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only
Importante
Recuerde cambiar la imagen de los grupos de nodos del clúster después de habilitar la característica de clúster aislado de red. De lo contrario, la característica no surtirá efecto para el clúster.
Implementación de un clúster aislado de red con Terraform
Nota:
El código de ejemplo de este artículo está en el repositorio de GitHub de Azure Terraform. Puede ver el registro de resultados de pruebas para las versiones actuales y anteriores de Terraform.
Consulte más artículos y código de ejemplo en el que se muestra cómo usar Terraform para administrar recursos de Azure.
En este ejemplo de Terraform se implementa un clúster aislado de red mediante la opción ACR administrada por AKS descrita anteriormente en este artículo. El proveedor de AzureRM aún no expone toda la configuración de arranque aislada de red que usa este ejemplo, por lo que el ejemplo usa el proveedor AzAPI para implementar el recurso de clúster administrado en la versión de API necesaria. Actualmente no hay disponible un ejemplo de Terraform para la opción ACR bring your own (BYO). Para usar BYO ACR, siga las instrucciones de CLI de Azure anteriores en este artículo.
En el ejemplo se implementan los siguientes recursos:
- Un grupo de recursos (
Microsoft.Resources/resourceGroups). - Un clúster de AKS aislado de red (
Microsoft.ContainerService/managedClusters) que usa:- Una identidad administrada asignada por el sistema.
- Un único grupo de nodos del sistema con un
Standard_D2s_v3nodo y el escalado automático deshabilitados. - El
azureplugin de red, conoutboundTypeconfigurado ennonepara que el clúster no tenga dependencias de red externas para la inicialización. -
apiServerAccessProfile.enablePrivateClusterse establece entrue, lo que crea un clúster privado basado en Private Link. -
bootstrapProfile.artifactSourcese establece enCache, por lo que AKS crea, administra y concilia su propia caché de ACR para inicializar el clúster en lugar de extraer directamente desde Microsoft Artifact Registry (MAR). Como se ha descrito anteriormente en este artículo, no es necesario crear ni administrar este ACR usted mismo y AKS controla las reglas de caché, el vínculo privado y el punto de conexión privado que usa el clúster aislado de red.
El clúster se crea con la versión predeterminada de Kubernetes admitida en la región de implementación. Para fijar una versión específica, añada kubernetesVersion al bloque properties del clúster en main.tf y confirme que la versión está disponible en la región mediante el comando az aks get-versions.
Cree un directorio para probar el código de Terraform de ejemplo y convertirlo en el directorio actual.
Cree un archivo denominado
main.tfy copie la siguiente configuración de ejemplo probada en él.terraform { required_version = ">= 1.6.0" required_providers { azapi = { source = "Azure/azapi" version = "~> 2.0" } random = { source = "hashicorp/random" version = "~> 3.6" } } } provider "azapi" {} resource "random_string" "suffix" { length = 6 upper = false special = false } locals { location = "westus2" resource_group_name = "rg-aks-network-isolated-${random_string.suffix.result}" aks_name = "aks-netisolated-${random_string.suffix.result}" dns_prefix = "aksnetiso${random_string.suffix.result}" } resource "azapi_resource" "resource_group" { type = "Microsoft.Resources/resourceGroups@2024-03-01" name = local.resource_group_name location = local.location } resource "azapi_resource" "aks_cluster" { type = "Microsoft.ContainerService/managedClusters@2025-08-01" name = local.aks_name parent_id = azapi_resource.resource_group.id location = local.location identity { type = "SystemAssigned" } body = { properties = { dnsPrefix = local.dns_prefix agentPoolProfiles = [ { name = "systempool" count = 1 vmSize = "Standard_D2s_v3" mode = "System" osType = "Linux" type = "VirtualMachineScaleSets" enableAutoScaling = false } ] networkProfile = { networkPlugin = "azure" outboundType = "none" } apiServerAccessProfile = { enablePrivateCluster = true } bootstrapProfile = { artifactSource = "Cache" } } } }
Inicializar Terraform
Para inicializar la implementación de Terraform, ejecute terraform init. Este comando descarga los proveedores azapi y random necesarios para administrar los recursos de este ejemplo.
terraform init -upgrade
Dar formato y validar la configuración
Ejecute terraform fmt para dar formato al archivo de configuración y terraform validate para confirmar que la configuración es sintácticamente válida.
terraform fmt
terraform validate
Creación de un plan de ejecución de Terraform
Ejecute terraform plan para crear un plan de ejecución.
terraform plan -out main.tfplan
Aplicación de un plan de ejecución de Terraform
Ejecute terraform apply para aplicar el plan de ejecución a la suscripción de Azure.
terraform apply main.tfplan
La creación del grupo de recursos y el clúster de AKS privado aislado de red tarda varios minutos en completarse.
Comprobación de la implementación
En este ejemplo no se definen los outputs de Terraform, así que usa terraform show -json con jq para obtener el grupo de recursos y el nombre del clúster generados del archivo de estado después de que se complete terraform apply. Puede gestionar ambos recursos con el proveedor azapi, y el atributo name de ambos contiene el nombre del recurso resuelto.
RESOURCE_GROUP=$(terraform show -json | jq -r '.values.root_module.resources[] | select(.address=="azapi_resource.resource_group") | .values.name')
AKS_NAME=$(terraform show -json | jq -r '.values.root_module.resources[] | select(.address=="azapi_resource.aks_cluster") | .values.name')
Confirme que el clúster se creó con la configuración de aislamiento de red esperada mediante el az aks show comando .
az aks show --resource-group $RESOURCE_GROUP --name $AKS_NAME --query "{outboundType:networkProfile.outboundType, artifactSource:bootstrapProfile.artifactSource, privateCluster:apiServerAccessProfile.enablePrivateCluster}"
La salida muestra outboundType establecido en artifactSource, Cache establecido en none y privateCluster establecido en true, lo que confirma que el clúster está aislado de la red y se inicia desde la caché de ACR administrada por AKS.
Conectarse al clúster
Dado que se trata de un clúster privado, conéctese desde un cliente que tenga línea de visión de red al punto de conexión privado del clúster, como una máquina virtual en la misma red virtual emparejada o Azure Cloud Shell si está conectada a la red virtual del clúster. Obtenga las credenciales del clúster mediante el az aks get-credentials comando y, a continuación, compruebe la conexión mediante el kubectl get nodes comando .
az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME
kubectl get nodes
Limpieza de recursos
Si ya no necesita los recursos creados en este artículo, quítelos para evitar incurrir en cargos adicionales.
Warning
Al ejecutar terraform destroy, se eliminan todos los recursos registrados en el archivo de estado de Terraform para esta configuración, incluido el grupo de recursos y el clúster de AKS. Revise cuidadosamente el plan antes de destruirlo y evite ejecutarlo en la infraestructura compartida o de producción.
Ejecute terraform plan con el indicador -destroy para revisar qué elimina Terraform.
terraform plan -destroy -out main.destroy.tfplan
Ejecute terraform apply para aplicar el plan de destrucción y quitar todos los recursos creados por este ejemplo.
terraform apply main.destroy.tfplan
Compruebe que el clúster aislado de red está habilitado en AKS
Para validar que la característica de clúster aislado de red está habilitada, use el az aks show comando .
az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}
La siguiente salida muestra un clúster aislado en red configurado con el tipo de salida none. Confirme que outboundType está configurado en none o en block, y que artifactSource está configurado en Cache. El campo containerRegistryId identifica el ACR utilizado para la inicialización.
{
"kubernetesVersion": "<major>.<minor>.<patch>",
"name": "myAKSCluster",
"type": "Microsoft.ContainerService/ManagedClusters",
"properties": {
"networkProfile": {
"outboundType": "none"
},
"bootstrapProfile": {
"artifactSource": "Cache",
"containerRegistryId": "/subscriptions/my-subscription-id/resourceGroups/my-node-resource-group-name/providers/Microsoft.ContainerRegistry/registries/my-registry-name"
}
}
}
Deshabilitación del clúster aislado de red en AKS
Deshabilite la característica de clúster aislado de red ejecutando el comando az aks update con los parámetros --bootstrap-artifact-source y --outbound-type.
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Direct --outbound-type LoadBalancer
Al deshabilitar la característica en un clúster existente, debe volver a crear una imagen manual de todos los nodos existentes.
az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only
Importante
Recuerde cambiar la imagen de los grupos de nodos del clúster después de deshabilitar la característica de clúster aislado de red. De lo contrario, la característica no surtirá efecto para el clúster.
Solución de problemas
Si tiene problemas, como errores en la extracción de imágenes, consulte Solución de problemas de clústeres de Azure Kubernetes Service (AKS) aislados de red.
Pasos siguientes
Si desea configurar la configuración de restricción de salida mediante Azure Firewall, visite Control del tráfico de salida mediante Azure Firewall en AKS.
Si quiere restringir cómo se comunican los pods entre sí y con las restricciones de tráfico horizontal de derecha a izquierda en el clúster, vea Protección del tráfico entre pods mediante directivas de red en AKS.