Protección de un entorno de inferencia de Azure Machine Learning con redes virtuales (v1)
SE APLICA A: Azure ML del SDK de Python v1
SE APLICA A: Extensión de ML de la CLI de Azure v1
En este artículo, aprenderá a proteger los entornos de inferencia con una red virtual en Azure Machine Learning. Este artículo es específico del flujo de trabajo de SDK/CLI v1 de implementación de un modelo como servicio web.
Sugerencia
Este artículo forma parte de una serie sobre la protección de un flujo de trabajo de Azure Machine Learning. Consulte los demás artículos de esta serie:
- Información general sobre redes virtuales
- Protección de los recursos de un área de trabajo
- Protección del entorno de entrenamiento
- Habilitación de Estudio de Azure Machine Learning en una red virtual
- Uso de un DNS personalizado
- Uso de un firewall
Para obtener un tutorial sobre cómo crear un área de trabajo segura, vea Tutorial: Creación de un área de trabajo segura, Plantilla de Bicep o Plantilla de Terraform.
En este artículo aprenderá a proteger los siguientes recursos de inferencia en una red virtual:
- Clúster de Azure Kubernetes Service (AKS) predeterminado
- Clúster privado de AKS
- Clúster de AKS con Private Link
Requisitos previos
Lea el artículo Introducción a la seguridad de red para comprender los escenarios comunes de redes virtuales y la arquitectura de red virtual general.
Una red virtual y una subred existentes que se usarán con los recursos de proceso.
Para implementar recursos en una red virtual o subred, la cuenta de usuario debe tener permisos para realizar las siguientes acciones en los controles de acceso basados en roles de Azure (Azure RBAC):
- "Microsoft.Network/*/read" en el recurso de red virtual. Este permiso no es necesario para las implementaciones de plantillas de Azure Resource Manager (ARM).
- "Microsoft.Network/virtualNetworks/join/action" en el recurso de red virtual.
- "Microsoft.Network/virtualNetworks/subnets/join/action" en el recurso de subred.
Para obtener más información sobre Azure RBAC con redes, consulte los roles integrados de redes.
Importante
Algunos de los comandos de la CLI de Azure de este artículo usan la extensión azure-cli-ml
o v1 para Azure Machine Learning. La compatibilidad con la extensión v1 finalizará el 30 de septiembre de 2025. La extensión v1 se podrá instalar y usar hasta esa fecha.
Se recomienda pasar a la extensión ml
, o v2, antes del 30 de septiembre de 2025. Para más información sobre la extensión v2, consulte Extensión de la CLI de Azure ML y SDK de Python v2.
Limitaciones
Azure Container Instances
Cuando el área de trabajo de Azure Machine Learning está configurada con un punto de conexión privado, no se admite la implementación en Azure Container Instances en una red virtual. En su lugar, considere la posibilidad de usar un punto de conexión en línea administrado con aislamiento de red.
Azure Kubernetes Service
- Si el clúster de AKS está detrás de una red virtual, el área de trabajo y sus recursos asociados (almacenamiento, almacén de claves, Azure Container Registry) deben tener puntos de conexión privados o puntos de conexión de servicio en la misma red virtual que la red virtual del clúster de AKS. Lea el tutorial de creación de un área de trabajo segura para agregar esos puntos de conexión privados o puntos de conexión de servicio a la red virtual.
- Si el área de trabajo tiene un punto de conexión privado, el clúster de Azure Kubernetes Service debe estar en la misma región de Azure que el área de trabajo.
- El uso de un nombre de dominio completo (FQDN) público con un clúster de AKS privadono se admite con Azure Machine Learning.
Azure Kubernetes Service
Importante
Para usar un clúster de AKS en una red virtual, primero siga los requisitos previos de Configuración de redes avanzadas en Azure Kubernetes Service (AKS).
Para agregar AKS en una red virtual a su área de trabajo, siga los pasos siguientes:
Inicie sesión en Azure Machine Learning Studio y, después, seleccione la suscripción y el área de trabajo.
Seleccione Proceso a la izquierda, Inference clusters (Clústeres de inferencia) en el centro y, luego, seleccione + Nuevo. Por último, seleccione AksCompute.
En el cuadro de diálogo Crear AksCompute, seleccione Crear nuevo, la Ubicación y el tamaño de la máquina virtual que usará para el clúster. Por último, seleccione Siguiente.
En la sección Parámetros de configuración, escriba un nombre de proceso, seleccione el objetivo del clúster, el número de nodos y, luego, seleccione Avanzadas para mostrar la configuración de red. En el área Configurar red virtual, establezca los valores siguientes:
Establezca la red virtual que se usará.
Sugerencia
Si el área de trabajo usa un punto de conexión privado para conectarse a la red virtual, el campo de selección Red virtual está atenuado.
Establezca la subred en la que se crea el clúster.
En el campo Intervalo de direcciones del servicio de Kubernetes, escriba el intervalo de direcciones del servicio Kubernetes. Este intervalo de direcciones utiliza un intervalo de IP de notación CIDR (enrutamiento entre dominios sin clases) para definir las direcciones IP que están disponibles para el clúster. No debe superponerse con ningún intervalo IP de subred (por ejemplo, 10.0.0.0/16).
En el campo Dirección IP del servicio DNS de Kubernetes, escriba la dirección IP del servicio DNS de Kubernetes. Esta dirección IP se asigna al servicio DNS de Kubernetes. Debe estar dentro del intervalo de direcciones del servicio Kubernetes (por ejemplo, 10.0.0.10).
En el campo Dirección de puente de Docker, escriba la dirección del puente de Docker. Esta dirección IP se asigna al puente de Docker. No debe estar en ningún intervalo IP de subred o en el intervalo de direcciones del servicio Kubernetes (por ejemplo, 172.18.0.1/16).
Cuando se implementa un modelo como un servicio web en AKS, se crea un punto de conexión de puntuación para controlar las solicitudes de inferencia. Asegúrese de que el grupo de seguridad de red (NSG) que controla la red virtual tenga una regla de seguridad de entrada habilitada para la dirección IP del punto de conexión de puntuación si quiere llamarlo desde fuera de la red virtual.
Para buscar la dirección IP del punto de conexión de puntuación, examine el URI de puntuación para el servicio implementado. Para obtener información sobre cómo ver el URI de puntuación, vea Consumo de un modelo implementado como servicio web.
Importante
Mantenga las reglas de salida predeterminadas para el grupo de seguridad de red. Para más información, consulte las reglas de seguridad predeterminadas en Grupos de seguridad.
Importante
La dirección IP que se muestra en la imagen para el punto de conexión de puntuación será diferente para sus implementaciones. Aunque todas las implementaciones comparten la misma dirección IP en un clúster de AKS, cada clúster de AKS tendrá una dirección IP diferente.
También puede usar el SDK de Azure Machine Learning para agregar Azure Kubernetes Service en una red virtual. Si ya tiene un clúster de AKS en una red virtual, asócielo al área de trabajo como se describe en el tema sobre la implementación en AKS. El código siguiente crea una instancia de Azure Kubernetes Service en la subred default
de una red virtual denominada mynetwork
:
SE APLICA A: Azure ML del SDK de Python v1
from azureml.core.compute import ComputeTarget, AksCompute
# Create the compute configuration and set virtual network information
config = AksCompute.provisioning_configuration(location="eastus2")
config.vnet_resourcegroup_name = "mygroup"
config.vnet_name = "mynetwork"
config.subnet_name = "default"
config.service_cidr = "10.0.0.0/16"
config.dns_service_ip = "10.0.0.10"
config.docker_bridge_cidr = "172.17.0.1/16"
# Create the compute target
aks_target = ComputeTarget.create(workspace=ws,
name="myaks",
provisioning_configuration=config)
Cuando finalice el proceso de creación, puede ejecutar una inferencia, o puntuación de modelos, en un clúster de AKS detrás de una red virtual. Para más información, consulte Implementación en AKS.
Para más información sobre el uso del control de acceso basado en rol con Kubernetes, consulte Uso de Azure RBAC para la autorización de Kubernetes (versión preliminar).
Rol de colaborador de red
Importante
Si crea o asocia un clúster de AKS al proporcionar una red virtual creada anteriormente, debe conceder a la entidad de servicio (SP) o la identidad administrada del clúster de AKS el rol Colaborador de la red del grupo de recursos que contiene la red virtual.
Para agregar la identidad como colaborador de red, siga estos pasos:
Para buscar la entidad de servicio o el id. de identidad administrada para AKS, use los siguientes comandos de la CLI de Azure. Reemplace
<aks-cluster-name>
por el nombre del clúster. Reemplace<resource-group-name>
por el nombre del grupo de recursos que contiene el clúster de AKS:az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query servicePrincipalProfile.clientId
Si este comando devuelve el valor
msi
, use el siguiente comando para identificar el identificador de entidad de seguridad de la identidad administrada:az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query identity.principalId
Para buscar el identificador del grupo de recursos que contiene la red virtual, use el siguiente comando. Reemplace
<resource-group-name>
por el nombre del grupo de recursos que contiene la red virtual.az group show -n <resource-group-name> --query id
Para agregar la entidad de servicio o la identidad administrada como colaborador de la red, use el siguiente comando. Reemplace
<SP-or-managed-identity>
por el identificador devuelto para la entidad de servicio o la identidad administrada. Reemplace<resource-group-id>
por el identificador revuelto para el grupo de recursos que contiene la red virtual:az role assignment create --assignee <SP-or-managed-identity> --role 'Network Contributor' --scope <resource-group-id>
Para más información sobre el uso del equilibrador de carga interno con AKS, consulte Uso del equilibrador de carga interno con Azure Kubernetes Service.
Tráfico de red virtual seguro
Hay dos métodos para aislar el tráfico hacia y desde el clúster de AKS a la red virtual:
- Clúster privado de AKS: este enfoque usa Azure Private Link para proteger las comunicaciones con el clúster para las operaciones de implementación y administración.
- Equilibrador de carga interno de AKS: Este enfoque configura el punto de conexión de las implementaciones en AKS para usar una dirección IP privada en la red virtual.
Clúster privado de AKS
De manera predeterminada, los clústeres de AKS tienen un plano de control o un servidor de API con las direcciones IP públicas. Puede configurar AKS para usar un plano de control privado mediante la creación de un clúster privado de AKS. Para obtener más información, consulte Creación de un clúster privado de Azure Kubernetes Service.
Después de crear el clúster privado de AKS, adjunte el clúster a la red virtual para usarlo con Azure Machine Learning.
Equilibrador de carga interno de AKS
De manera predeterminada, las implementaciones de AKS usan un equilibrador de carga público. En esta sección, aprenderá a configurar AKS para usar un equilibrador de carga interno. Un equilibrador de carga interno (o privado) se usa cuando solo se admiten direcciones IP privadas como front-end. Los equilibradores de carga internos se usan para equilibrar la carga del tráfico dentro de una red virtual.
Un equilibrador de carga privado se habilita mediante la configuración de AKS para usar un equilibrador de carga interno.
Habilitación del equilibrador de carga privado
Importante
No se puede habilitar la IP privada al crear el clúster de Azure Kubernetes Service en Estudio de Azure Machine Learning. Puede crear uno con un equilibrador de carga interno al usar el SDK de Python o la extensión CLI de Azure para aprendizaje automático.
En los siguientes ejemplos se muestra cómo crear un clúster de AKS mediante la IP privada o el equilibrador de carga interno mediante el SDK y la CLI:
SE APLICA A: Azure ML del SDK de Python v1
import azureml.core
from azureml.core.compute import AksCompute, ComputeTarget
# Verify that cluster does not exist already
try:
aks_target = AksCompute(workspace=ws, name=aks_cluster_name)
print("Found existing aks cluster")
except:
print("Creating new aks cluster")
# Subnet to use for AKS
subnet_name = "default"
# Create AKS configuration
prov_config=AksCompute.provisioning_configuration(load_balancer_type="InternalLoadBalancer")
# Set info for existing virtual network to create the cluster in
prov_config.vnet_resourcegroup_name = "myvnetresourcegroup"
prov_config.vnet_name = "myvnetname"
prov_config.service_cidr = "10.0.0.0/16"
prov_config.dns_service_ip = "10.0.0.10"
prov_config.subnet_name = subnet_name
prov_config.load_balancer_subnet = subnet_name
prov_config.docker_bridge_cidr = "172.17.0.1/16"
# Create compute target
aks_target = ComputeTarget.create(workspace = ws, name = "myaks", provisioning_configuration = prov_config)
# Wait for the operation to complete
aks_target.wait_for_completion(show_output = True)
Al adjuntar un clúster existente al área de trabajo, use los parámetros load_balancer_type
y load_balancer_subnet
de AksCompute.attach_configuration() configurar el equilibrador de carga.
Para obtener información sobre cómo asociar un clúster, consulte Asociación de un clúster de AKS ya existente.
Limitación de la conectividad saliente de la red virtual
Si no quiere usar las reglas de salida predeterminadas y quiere limitar el acceso de salida de la red virtual, debe permitir el acceso a Azure Container Registry. Por ejemplo, asegúrese de que los grupos de seguridad de red (NSG) contienen una regla que permita el acceso a la etiqueta de servicio AzureContainerRegistry.RegionName, donde {RegionName} es el nombre de una región de Azure.
Pasos siguientes
Este artículo forma parte de una serie sobre la protección de un flujo de trabajo de Azure Machine Learning. Consulte los demás artículos de esta serie: