Creación de un clúster de Azure Kubernetes Service (AKS) aislado de red (versión preliminar)
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 manera predeterminada, los clústeres de Azure Kubernetes Service (AKS) tienen acceso de salida a Internet ilimitado. 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.
Un solución para proteger las direcciones de salida consiste en usar un dispositivo de firewall que pueda controlar el tráfico de salida en función de los nombres de dominio.
Otra solución, un clúster de AKS aislado de red (versión preliminar), simplifica la configuración de restricciones de salida para un clúster de fábrica. Un clúster de AKS aislado de red reduce el riesgo de filtración de datos o la exposición involuntaria de los puntos de conexión públicos del clúster.
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 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:
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:
- Se explican los dos métodos de acceso, ACR administrado por AKS o BYO ACR, entre los que puede elegir en este artículo.
- Se describen las limitaciones actuales.
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en 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 más información, vea 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 Inicio de sesión con 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 más información sobre las extensiones, consulte Uso 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.
En este artículo se necesita la versión 2.63.0, o versiones posteriores, de la CLI de Azure. Si usa Azure Cloud Shell, ya está instalada allí la versión más reciente.
Instale la extensión de la CLI de Azure
aks-preview
versión 9.0.0b2 o posterior.Si aún no tiene la
aks-preview
extensión, instálela mediante elaz extension add
comando.az extension add --name aks-preview
Si ya tiene la
aks-preview
extensión, actualícela para asegurarse de que tiene la versión más reciente mediante elaz extension update
comando.az extension update --name aks-preview
Registre la marca de la característica
NetworkIsolatedClusterPreview
mediante el comando az-feature-register.az feature register --namespace Microsoft.ContainerService --name NetworkIsolatedClusterPreview
Para comprobar el estado de registro se usa el comandoaz feature show. Tarda unos minutos en que el estado muestre Registrado:
az feature show --namespace Microsoft.ContainerService --name NetworkIsolatedClusterPreview
Nota:
Si decide crear un clúster aislado de red con la integración con red virtual de API Server configurada para el acceso privado del servidor de API, debe repetir los pasos anteriores para registrar también la marca de característica
EnableAPIServerVnetIntegrationPreview
. Cuando el estado se muestre como Registrado, actualice el registro de los proveedores de recursosMicrosoft.ContainerService
yMicrosoft.ContainerRegistry
mediante el comando az provider register:az provider register --namespace Microsoft.ContainerService az provider register --namespace Microsoft.ContainerRegistry
Si elige la opción de incorporación de su propio Azure Container Registry (BYO ACR), debe asegurarse de que ACR cumple los siguientes requisitos:
- El Acceso de extracción anónimo debe estar habilitado para ACR.
- ACR debe ser del nivel de servicio SKU Premium
(Opcional) Si desea usar cualquier característica o complemento opcional de AKS que requiera acceso de red saliente, este documento contiene los requisitos de salida para cada característica. Además, este documento enumera las funciones o complementos que admiten la integración de enlaces privados para una conexión segura desde la red virtual del clúster. Si la integración de private link no está disponible para ninguna de estas características, el clúster se puede configurar con una tabla de enrutamiento definida por el usuario y una instancia de Azure Firewall basada en las reglas de red y las reglas de aplicación necesarias para esa característica.
Nota:
Las siguientes extensiones de clúster de AKS aún no se admiten en los clústeres aislados de red:
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 aislado de red, puede elegir uno de los siguientes modos de clúster privado: vínculo privado o integración con red virtual del servidor de API.
Independientemente del modo que seleccione, establezca los parámetros --bootstrap-artifact-source
y --outbound-type
.
--bootstrap-artifact-source
se puede establecer en Direct
o Cache
correspondientes al uso de MCR directo (NO aislado de red) y ACR privado (aislado de red) para las extracciones de imágenes, respectivamente.
El valor de --outbound-type parameter
se puede establecer en none
o en block
. Si el tipo de salida se establece en none
, AKS no configura ninguna conexión saliente para el clúster, lo que permite al usuario configurarlas personalmente. Si el tipo de salida se establece en un bloqueo, se bloquean todas las conexiones salientes.
Private Link
Cree un clúster de AKS aislado de red basado en vínculo privado 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} --kubernetes-version 1.30.3 --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} --kubernetes-version 1.30.3 --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.
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --outbound-type none
Una vez habilitada la característica, los nodos recién agregados pueden arrancar correctamente sin salida. Al habilitar el aislamiento de red en un clúster existente, tenga en cuenta que 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 el modo de aislamiento de red para un clúster existente. 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
El acceso saliente predeterminado para la subred de AKS debe ser "false".
az group create --name ${RESOURCE_GROUP} --location ${LOCATION}
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 --default-outbound-access false
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: Crear el ACR y habilitación de la caché de artefactos
Cree el ACR con el vínculo privado y el acceso de extracción anónimo.
az acr create --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --sku Premium --public-network-enabled false az acr update --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --anonymous-pull-enabled true REGISTRY_ID=$(az acr show --name ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --query 'id' --output tsv)
Cree una regla de caché de ACR para permitir a los usuarios almacenar en caché imágenes de contenedor de MCR en el nuevo ACR.
az acr cache create -n acr-cache-rule -r ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --source-repo "mcr.microsoft.com/*" --target-repo "*"
Paso 3: 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 4: 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}.{REGISTRY_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 5: 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)
Concesión de permisos AcrPull para la identidad de kubelet
az role assignment create --role AcrPull --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 6: Crear un clúster aislado de red mediante BYO ACR
Al crear un clúster de AKS aislado de red, puede elegir uno de los siguientes modos de clúster privado: vínculo privado o integración con red virtual del servidor de API.
Independientemente del modo que seleccione, establezca los parámetros --bootstrap-artifact-source
y --outbound-type
.
--bootstrap-artifact-source
se puede establecer en Direct
o Cache
correspondientes al uso de MCR directo (NO aislado de red) y ACR privado (aislado de red) para las extracciones de imágenes, respectivamente.
El valor de --outbound-type parameter
se puede establecer en none
o en block
. Si el tipo de salida se establece en none
, AKS no configura ninguna conexión saliente para el clúster, lo que permite al usuario configurarlas personalmente. Si el tipo de salida se establece en un bloqueo, se bloquean todas las conexiones salientes.
Private Link
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} --kubernetes-version 1.30.3 --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 con 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
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
Cree un clúster de AKS aislado de red configurado con la integración con red virtual del servidor de API y 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} --kubernetes-version 1.30.3 --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-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 permiso AcrPull a la identidad de kubelet, use la identidad de kubelet existente del clúster de AKS existente.
Para habilitar la característica aislada de red en un clúster de AKS existente, use el siguiente comando:
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none
Una vez habilitada la característica de clúster aislado de red, los nodos del grupo de nodos recién agregados pueden arrancar correctamente sin salida. Debe volver a crear una imagen de los grupos de nodos existentes para que el nodo recién escalado pueda arrancar correctamente. Al habilitar 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 habilitar la característica de clúster aislado de red. De lo contrario, la característica no surtirá efecto para el clúster.
Actualización del identificador de ACR
Es posible actualizar el ACR privado que se usa con un clúster de AKS 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.
Validación de que el clúster aislado de red está habilitado
Para validar que la característica de clúster aislado de red está habilitada, use el comando az aks show
az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}
En la salida siguiente se muestra que la característica está habilitada, en función de los valores de la propiedad outboundType
(ninguno o bloqueado) y la propiedad artifactSource
(almacenado en caché).
"kubernetesVersion": "1.30.3",
"name": "myAKSCluster"
"type": "Microsoft.ContainerService/ManagedClusters"
"properties": {
...
"networkProfile": {
...
"outboundType": "none",
...
},
...
"bootstrapProfile": {
"artifactSource": "Cache",
"containerRegistryId": "/subscriptions/my-subscription-id/my-node-resource-group-name/providers/Microsoft.ContainerRegistry/registries/my-registry-name"
},
...
}
Deshabilitación del clúster aislado de red
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.
Pasos siguientes
En este artículo, ha aprendido qué puertos y direcciones se deben permitir si se quiere restringir el tráfico de salida para el clúster.
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.
Azure Kubernetes Service