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:

  1. 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.
  2. 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 implementar
    • id: identificador de recurso de la subred
    • name: 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