Implementación de instancias de contenedor en una red virtual de AzureDeploy container instances into an Azure virtual network

Azure Virtual Network proporciona acceso de red seguro y privado a los recursos locales y de Azure.Azure Virtual Network provides secure, private networking for your Azure and on-premises resources. 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.By deploying container groups into an Azure virtual network, your containers can communicate securely with other resources in the virtual network.

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.This article shows how to use the az container create command in the Azure CLI to deploy container groups to either a new virtual network or an existing virtual network.

Para conocer los escenarios y las limitaciones de red, consulte Escenarios y recursos de redes virtuales para Azure Container Instances.For networking scenarios and limitations, see Virtual network scenarios and resources for Azure Container Instances.

Importante

La implementación del grupo de contenedores en una red virtual está disponible con carácter general para contenedores de Linux en la mayoría de las regiones donde Azure Container Instances está disponible.Container group deployment to a virtual network is generally available for Linux containers, in most regions where Azure Container Instances is available. Para obtener más información, consulte Regiones y disponibilidad de recursos.For details, see Regions and resource availability.

Los ejemplos que aparecen en este artículo están formateados para el shell de Bash.Examples in this article are formatted for the Bash shell. Si prefiere otro shell como PowerShell o el símbolo del sistema, ajuste los caracteres de continuación de línea según corresponda.If you prefer another shell such as PowerShell or Command Prompt, adjust the line continuation characters accordingly.

Implementación en una nueva red virtualDeploy to new virtual network

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:To deploy to a new virtual network and have Azure create the network resources for you automatically, specify the following when you execute az container create:

  • Nombre de la red virtualVirtual network name
  • Prefijo de dirección de red virtual en formato CIDRVirtual network address prefix in CIDR format
  • Nombre de subredSubnet name
  • Prefijo de dirección de subred en formato CIDRSubnet address prefix in CIDR format

Los prefijos de direcciones de subred y red virtual especifican los espacios de direcciones para la subred y la red virtual, respectivamente.The virtual network and subnet address prefixes specify the address spaces for the virtual network and subnet, respectively. Estos valores se representan en notación de Enrutamiento de interdominios sin clases (CIDR), por ejemplo 10.0.0.0/16.These values are represented in Classless Inter-Domain Routing (CIDR) notation, for example 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.For more information about working with subnets, see Add, change, or delete a virtual network subnet.

Cuando haya implementado 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.Once you've deployed your first container group with this method, you can deploy to the same subnet by specifying the virtual network and subnet names, or the network profile that Azure automatically creates for you. Dado que Azure delega la subred en Azure Container Instances, solo puede implementar grupos de contenedores en la subred.Because Azure delegates the subnet to Azure Container Instances, you can deploy only container groups to the subnet.

EjemploExample

El comando az container create siguiente especifica valores para una nueva red virtual y una subred.The following az container create command specifies settings for a new virtual network and subnet. 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.Provide the name of a resource group that was created in a region where container group deployments in a virtual network are available. 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.This command deploys the public Microsoft aci-helloworld container that runs a small Node.js webserver serving a static web page. 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.In the next section, you'll deploy a second container group to the same subnet, and test communication between the two container instances.

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.When you deploy to a new virtual network by using this method, the deployment can take a few minutes while the network resources are created. Tras la implementación inicial, las implementaciones de grupos de contenedores adicionales en la misma subred se completan más rápido.After the initial deployment, additional container group deployments to the same subnet complete more quickly.

Implementación en una red virtual existenteDeploy to existing virtual network

Para implementar un grupo de contenedores en una red virtual existente:To deploy a container group to an existing virtual network:

  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 recursosCreate a subnet within your existing virtual network, use an existing subnet in which a container group is already deployed, or use an existing subnet emptied of all other resources
  2. Implemente un grupo de contenedores con az container create y especifique uno de los siguientes:Deploy a container group with az container create and specify one of the following:
    • Nombre de red virtual y nombre de subredVirtual network name and subnet name
    • El identificador de recurso de red virtual y el identificador de recurso de subred, lo permite usar una red virtual desde otro grupo de recursosVirtual network resource ID and subnet resource ID, which allows using a virtual network from a different resource group
    • El identificador o el nombre del perfil de red, que puede obtener mediante el comando az network profile listNetwork profile name or ID, which you can obtain using az network profile list

EjemploExample

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.The following example deploys a second container group to the same subnet created previously, and verifies communication between the two container instances.

En primer lugar, obtenga la dirección IP del primer grupo de contenedores que implementó, appcontainer:First, get the IP address of the first container group you deployed, the 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.The output displays the IP address of the container group in the private subnet. Por ejemplo:For example:

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.Now, set CONTAINER_GROUP_IP to the IP you retrieved with the az container show command, and execute the following az container create command. 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.This second container, commchecker, runs an Alpine Linux-based image and executes wget against the first container group's private subnet IP address.

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ó:After this second container deployment has completed, pull its logs so you can see the output of the wget command it executed:

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:If the second container communicated successfully with the first, output is similar to:

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.The log output should show that wget was able to connect and download the index file from the first container using its private IP address on the local subnet. El tráfico de red entre los dos grupos de contenedores permanece dentro de la red virtual.Network traffic between the two container groups remained within the virtual network.

Ejemplo: YAMLExample - 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.You can also deploy a container group to an existing virtual network by using a YAML file, a Resource Manager template, or another programmatic method such as with the Python SDK.

Por ejemplo, si usa un archivo YAML, puede realizar la implementación en una red virtual con una subred delegada en Azure Container Instances.For example, when using a YAML file, you can deploy to a virtual network with a subnet delegated to Azure Container Instances. Especifique las propiedades siguientes:Specify the following properties:

  • ipAddress: la configuración de direcciones IP privadas para el grupo de contenedores.ipAddress: The private IP address settings for the container group.
    • ports: los puertos que deben abrirse, si hay alguno.ports: The ports to open, if any.
    • protocol: el protocolo (TCP o UDP) para el puerto abierto.protocol: The protocol (TCP or UDP) for the opened port.
  • networkProfile: configuración de red para la red virtual y la subred.networkProfile: Network settings for the virtual network and subnet.
    • id: el identificador de recurso del Administrador de recursos completo de networkProfile.id: The full Resource Manager resource ID of the networkProfile.

Para obtener el identificador del perfil de red, ejecute el comando az network profile list y especifique el nombre del grupo de recursos que contiene la red virtual y la subred delegada.To get the ID of the network profile, run the az network profile list command, specifying the name of the resource group that contains your virtual network and delegated subnet.

az network profile list --resource-group myResourceGroup \
  --query [0].id --output tsv

Salida del ejemplo:Sample output:

/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkProfiles/aci-network-profile-aci-vnet-aci-subnet

Una vez que tenga el identificador del perfil de red, copie el siguiente YAML en un nuevo archivo denominado vnet-deploy-aci.yaml.Once you have the network profile ID, copy the following YAML into a new file named vnet-deploy-aci.yaml. En networkProfile, reemplace el valor de id con el identificador recién recuperado y, después, guarde el archivo.Under networkProfile, replace the id value with ID you just retrieved, then save the file. Este YAML crea un grupo de contenedores denominado appcontaineryaml en la red virtual.This YAML creates a container group named appcontaineryaml in your virtual network.

apiVersion: '2019-12-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'
  networkProfile:
    id: /subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkProfiles/aci-network-profile-aci-vnet-subnet
  osType: Linux
  restartPolicy: Always
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:Deploy the container group with the az container create command, specifying the YAML file name for the --file parameter:

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.Once the deployment completes, run the az container show command to display its status. Salida del ejemplo:Sample output:

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 recursosClean up resources

Eliminación de instancias de contenedorDelete container instances

Cuando termine de trabajar con las instancias de contenedor que creó, elimínelas con los siguientes comandos:When you're done working with the container instances you created, delete them with the following commands:

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 redDelete network resources

Actualmente, esta característica necesita varios comandos adicionales para eliminar los recursos de red que ha creado antes.This feature currently requires several additional commands to delete the network resources you created earlier. 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.If you used the example commands in previous sections of this article to create your virtual network and subnet, then you can use the following script to delete those network resources. El script presupone que el grupo de recursos contiene una sola red virtual con un único perfil de red.The script assumes that your resource group contains a single virtual network with a single network profile.

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.Before executing the script, set the RES_GROUP variable to the name of the resource group containing the virtual network and subnet that should be deleted. Actualice el nombre de la red virtual si no usó el nombre aci-vnet que se sugirió anteriormente.Update the name of the virtual network if you did not use the aci-vnet name suggested earlier. El script tiene el formato adecuado para el shell de Bash.The script is formatted for the Bash shell. Si prefiere otro shell como PowerShell o el símbolo del sistema, deberá ajustar los descriptores de acceso y la asignación de variables según corresponda.If you prefer another shell such as PowerShell or Command Prompt, you'll need to adjust variable assignment and accessors accordingly.

Advertencia

Este script elimina los recursos.This script deletes resources! Elimina la red virtual y todas las subredes que contiene.It deletes the virtual network and all subnets it contains. 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.Be sure that you no longer need any of the resources in the virtual network, including any subnets it contains, prior to running this script. Una vez eliminado, estos recursos son irrecuperables.Once deleted, these resources are unrecoverable.

# 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 siguientesNext steps

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 VNet.To deploy a new virtual network, subnet, network profile, and container group using a Resource Manager template, see Create an Azure container group with VNet.