Implementación de instancias de contenedor en una red virtual de Azure
Azure Virtual Network proporciona acceso de red seguro y privado a los recursos locales y de Azure. Al implementar grupos de contenedores en una red virtual de Azure, los contenedores pueden comunicarse de forma segura con otros recursos de la red virtual.
En este artículo se muestra cómo usar el comando az container create en la CLI de Azure para implementar grupos de contenedores en una red virtual nueva o existente.
Importante
- Las subredes deben delegarse antes de usar una red virtual
- Antes de implementar grupos de contenedores en redes virtuales, se recomienda comprobar primero la limitación. Para conocer los escenarios y las limitaciones de red, consulte Escenarios y recursos de redes virtuales para Azure Container Instances.
- La implementación del grupo de contenedores en una red virtual está disponible con carácter general para contenedores de Linux y Windows en la mayoría de las regiones donde Azure Container Instances está disponible. Para obtener más información, consulte las regiones disponibles.
Importante
Los perfiles de red han quedado en desuso desde la versión 2021-07-01
de la API. Si usa esta versión o una versión más reciente, omita los pasos y las acciones relacionados con los perfiles de red.
Los ejemplos que aparecen en este artículo están formateados para el shell de Bash. Si prefiere otro shell como PowerShell o el símbolo del sistema, ajuste los caracteres de continuación de línea según corresponda.
Requisitos previos
Necesita un grupo de recursos para administrar todos los recursos usados en los ejemplos siguientes. Para crear un grupo de recursos, use az group create:
az group create --name myResourceGroup --location eastus
Implementación en una nueva red virtual
Nota:
Si usa el intervalo IP de subred /29 para tener solo 3 direcciones IP. se recomienda ir siempre un intervalo por encima (nunca por debajo). Por ejemplo, use el intervalo IP de subred /28 para que pueda tener al menos 1 o más búferes de IP por grupo de contenedores. Al hacerlo, puede evitar que los contenedores se bloqueen, no puedan iniciarse, reiniciarse o tampoco puedan detener los estados.
Para implementarlos en una nueva red virtual y hacer que Azure cree automáticamente los recursos de red, especifique lo siguiente al ejecutar az container create:
- Nombre de la red virtual
- Prefijo de dirección de red virtual en formato CIDR
- Nombre de subred
- Prefijo de dirección de subred en formato CIDR
Los prefijos de direcciones de subred y red virtual especifican los espacios de direcciones para la subred y la red virtual, respectivamente. Estos valores se representan en notación de Enrutamiento de interdominios sin clases (CIDR), por ejemplo 10.0.0.0/16
. Para más información sobre cómo trabajar con las subredes, consulte Incorporación, cambio o eliminación de una subred de red virtual.
Cuando implemente el primer grupo de contenedores con este método, puede implementarlo en la misma subred; para ello, especifique los nombres de la red virtual y la subred, o el perfil de red que Azure crea automáticamente para usted. Dado que Azure delega la subred en Azure Container Instances, solo puede implementar grupos de contenedores en la subred.
Ejemplo
El comando az container create siguiente especifica valores para una nueva red virtual y una subred. Proporcione el nombre de un grupo de recursos creado en una región en la que haya disponibles implementaciones de grupo de contenedores en una red virtual. Este comando implementa el contenedor aci-helloworld público de Microsoft que ejecuta un pequeño servidor web de Node.js que sirve una página web estática. En la siguiente sección, implementará un segundo grupo de contenedores en la misma subred y probará la comunicación entre las dos instancias de contenedor.
az container create \
--name appcontainer \
--resource-group myResourceGroup \
--image mcr.microsoft.com/azuredocs/aci-helloworld \
--vnet aci-vnet \
--vnet-address-prefix 10.0.0.0/16 \
--subnet aci-subnet \
--subnet-address-prefix 10.0.0.0/24
Al implementar en una nueva red virtual mediante este método, la implementación puede tardar unos minutos mientras se crean los recursos de red. Tras la implementación inicial, las implementaciones de grupos de contenedores adicionales en la misma subred se completan más rápido.
Implementación en una red virtual existente
Para implementar un grupo de contenedores en una red virtual existente:
- Cree una subred en la red virtual existente, use una subred existente en la que ya se haya implementado un grupo de contenedores, o bien use una subred existente vacía de todos los demás recursos y configuración. La subred que usó para los grupos de contenedores puede contener solo grupos de contenedores. Antes de implementar un grupo de contenedores en una subred, debe delegar explícitamente la subred antes del aprovisionamiento. Una vez delegada, la subred se puede usar solo para grupos de contenedores. Si intenta implementar recursos distintos de grupos de contenedores en una subred delegada, se produce un error en la operación.
- Implemente un grupo de contenedores con az container create y especifique uno de los siguientes:
- Nombre de red virtual y nombre de subred
- El identificador de recurso de red virtual y el identificador de recurso de subred, lo permite usar una red virtual desde otro grupo de recursos
Ejemplo
En el ejemplo siguiente se implementa un segundo grupo de contenedores en la misma subred creada anteriormente y se comprueba la comunicación entre las dos instancias de contenedor.
En primer lugar, obtenga la dirección IP del primer grupo de contenedores que implementó, appcontainer:
az container show --resource-group myResourceGroup \
--name appcontainer \
--query ipAddress.ip --output tsv
La salida muestra la dirección IP del grupo de contenedores en la subred privada. Por ejemplo:
10.0.0.4
Ahora, establezca CONTAINER_GROUP_IP
en la dirección IP que recuperó con el comando az container show
y ejecute el siguiente comando az container create
. Este segundo contenedor, commchecker, ejecuta una imagen basada en Linux de Alpine y wget
con la dirección IP de la subred privada del primer grupo de contenedores.
CONTAINER_GROUP_IP=<container-group-IP-address>
az container create \
--resource-group myResourceGroup \
--name commchecker \
--image alpine:3.5 \
--command-line "wget $CONTAINER_GROUP_IP" \
--restart-policy never \
--vnet aci-vnet \
--subnet aci-subnet
Una vez completada esta segunda implementación de contenedor, extraiga sus registros para que pueda ver la salida del comando wget
que ejecutó:
az container logs --resource-group myResourceGroup --name commchecker
Si el segundo contenedor se comunicó correctamente con el primero, la salida es similar a la siguiente:
Connecting to 10.0.0.4 (10.0.0.4:80)
index.html 100% |*******************************| 1663 0:00:00 ETA
La salida del registro debe mostrar que wget
fue capaz de conectarse y descargar el archivo de índice del primer contenedor usando su dirección IP privada en la subred local. El tráfico de red entre los dos grupos de contenedores permanece dentro de la red virtual.
Ejemplo: YAML
También puede implementar un grupo de contenedores en una red virtual existente mediante un archivo YAML, una plantilla de Resource Manager u otro método de programación como con el SDK de Python.
Por ejemplo, si usa un archivo YAML, puede realizar la implementación en una red virtual con una subred delegada en Azure Container Instances. Especifique las propiedades siguientes:
ipAddress
: la configuración de direcciones IP privadas para el grupo de contenedores.ports
: los puertos que deben abrirse, si hay alguno.protocol
: el protocolo (TCP o UDP) para el puerto abierto.
subnetIds
: identificadores de recursos de las subredes en las que se va a implementarid
: identificador de recurso de la subredname
: nombre de la subred
Este YAML crea un grupo de contenedores denominado appcontaineryaml en la red virtual.
apiVersion: '2021-07-01'
location: westus
name: appcontaineryaml
properties:
containers:
- name: appcontaineryaml
properties:
image: mcr.microsoft.com/azuredocs/aci-helloworld
ports:
- port: 80
protocol: TCP
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
ipAddress:
type: Private
ports:
- protocol: tcp
port: '80'
osType: Linux
restartPolicy: Always
subnetIds:
- id: <subnet-id>
name: default
tags: null
type: Microsoft.ContainerInstance/containerGroups
Implemente el grupo de contenedores con el comando az container create y especifique el nombre del archivo YAML para el parámetro --file
:
az container create --resource-group myResourceGroup \
--file vnet-deploy-aci.yaml
Una vez completada la implementación, ejecute el comando az container show para mostrar su estado. Salida del ejemplo:
Name ResourceGroup Status Image IP:ports Network CPU/Memory OsType Location
---------------- --------------- -------- ------------------------------------------ ----------- --------- --------------- -------- ----------
appcontaineryaml myResourceGroup Running mcr.microsoft.com/azuredocs/aci-helloworld 10.0.0.5:80 Private 1.0 core/1.5 gb Linux westus
Limpieza de recursos
Eliminación de instancias de contenedor
Cuando termine de trabajar con las instancias de contenedor que creó, elimínelas con los siguientes comandos:
az container delete --resource-group myResourceGroup --name appcontainer -y
az container delete --resource-group myResourceGroup --name commchecker -y
az container delete --resource-group myResourceGroup --name appcontaineryaml -y
Eliminación de recursos de red
Actualmente, esta característica necesita varios comandos adicionales para eliminar los recursos de red que ha creado antes. Si ha usado los comandos de ejemplo en las secciones anteriores de este artículo para crear la red virtual y la subred, puede usar el siguiente script para eliminar esos recursos de red. El script presupone que el grupo de recursos contiene una sola red virtual con un único perfil de red.
Antes de ejecutar el script, establezca la variable RES_GROUP
en el nombre del grupo de recursos que contenga la red virtual y la subred que se deben eliminar. Actualice el nombre de la red virtual si no usó el nombre aci-vnet
que se sugirió anteriormente. El script tiene el formato adecuado para el shell de Bash. Si prefiere otro shell como PowerShell o el símbolo del sistema, debe ajustar los descriptores de acceso y la asignación de variables según corresponda.
Advertencia
Este script elimina los recursos. Elimina la red virtual y todas las subredes que contiene. Asegúrese de que ya no necesita ninguno de los recursos en la red virtual, incluidas las subredes que contiene, antes de ejecutar este script. Una vez eliminado, estos recursos son irrecuperables.
# Replace <my-resource-group> with the name of your resource group
# Assumes one virtual network in resource group
RES_GROUP=<my-resource-group>
# Get network profile ID
# Assumes one profile in virtual network
NETWORK_PROFILE_ID=$(az network profile list --resource-group $RES_GROUP --query [0].id --output tsv)
# Delete the network profile
az network profile delete --id $NETWORK_PROFILE_ID -y
# Delete virtual network
az network vnet delete --resource-group $RES_GROUP --name aci-vnet
Pasos siguientes
Para implementar una nueva red virtual, subred, perfil de red y grupo de contenedores mediante una plantilla de Resource Manager, consulte el artículo sobre la creación de un grupo de contenedores de Azure con red virtual.
Para implementar Azure Container Instances que puedan extraer imágenes de un Azure Container Registry a través de un punto de conexión privado, consulte Implementación en Azure Container Instances desde Azure Container Registry mediante una identidad administrada.