División del tráfico en Azure Container Apps

De forma predeterminada, cuando la entrada está habilitada, todo el tráfico se enruta a la revisión implementada más reciente. Al habilitar varios modos de revisión en la aplicación contenedora, puede dividir el tráfico entrante entre revisiones activas.

La división de tráfico es útil para probar las actualizaciones de la aplicación contenedora. Puede usar la división de tráfico para realizar gradualmente una nueva revisión en implementaciones azul-verde o en pruebas A/B.

La división de tráfico se basa en el peso (porcentaje) del tráfico que se enruta a cada revisión. El peso combinado de todas las reglas de división de tráfico debe ser igual al 100 %. Puede especificar la revisión por nombre de revisión o etiqueta de revisión.

En este artículo se muestra cómo configurar reglas de división de tráfico para la aplicación contenedora. Para ejecutar los ejemplos siguientes, necesita una aplicación contenedora con varias revisiones.

Configuración de la división de tráfico

Configure la división de tráfico entre revisiones mediante el az containerapp ingress traffic set comando . Puede especificar las revisiones por nombre con el parámetro o por etiqueta --revision-weight de revisión con el --label-weight parámetro .

El siguiente comando establece el peso del tráfico de cada revisión en 50 %:

az containerapp ingress traffic set \
    --name <APP_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --revision-weight <REVISION_1>=50 <REVISION_2>=50

Asegúrese de reemplazar los valores de marcador de posición rodeados por <> sus propios valores.

Este comando establece el peso del tráfico de la revisión <LABEL_1> en un 80 % y el LABEL_2> de revisión <en 20 %:

az containerapp ingress traffic set \
    --name <APP_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --label-weight <LABEL_1>=80 <LABEL_2>=20

  1. Vaya a la aplicación contenedora en Azure Portal.
  2. Seleccione Administración de revisiones en el menú izquierdo.
  3. Si el modo de revisión es Single, establezca el modo en múltiplo.
    1. Seleccione Elegir modo de revisión.
    2. Seleccione Múltiple: varias revisiones activas simultáneamente.
    3. Seleccione Aplicar.
    4. Espere a que el modo de revisión se actualice a múltiplo. Screenshot of the revision management revision mode setting.
  4. Seleccione Mostrar revisiones inactivas.
  5. Si no tiene varias revisiones, puede crear una nueva revisión.
    1. Seleccione Crear nueva revisión.
    2. Puede usar la configuración predeterminada o personalizar la revisión.
    3. Escriba un nombre o sufijo para la revisión.
    4. Seleccione Crear. Screenshot of Create and deploy new revision.
    5. Espere a que se implemente la revisión.
  6. Seleccione Activo para las revisiones a las que desea enrutar el tráfico.
  7. Escriba el porcentaje de tráfico que desea enrutar a cada revisión de la columna Tráfico . El porcentaje combinado de todo el tráfico debe ser igual al 100 %.
  8. Seleccione Guardar. Screenshot of traffic splitting in Revision management.

Habilite la división de tráfico agregando las configuration.ingress.traffic propiedades a la sección de la ingress plantilla de aplicación de contenedor. Puede especificar las revisiones por nombre con la revisionName propiedad o por etiqueta de revisión con la label propiedad .

En el ejemplo siguiente se establece el 100 % del tráfico en la revisión implementada más reciente:

{
  ...
  "configuration": {
    "ingress": {
      "external": true,
      "targetPort": 80,
      "allowInsecure": false,
      "traffic": [
        {
          "latestRevision": true,
          "weight": 100
        }
      ]
    },
  },

En el ejemplo siguiente se muestra la división de tráfico entre dos revisiones por nombre:

{
  ...
  "configuration": {
    "ingress": {
      "external": true,
      "targetPort": 80,
      "allowInsecure": false,
      "traffic": [
          {
              "revisionName": "my-example-app--5g3ty20",
              "weight": 50
          },
          {
              "revisionName": "my-example-app--qcfkbsv",
              "weight": 50
            }
        ],
    },
  },

En el ejemplo siguiente se muestra la división del tráfico entre dos revisiones por etiqueta:

{
  ...
  "configuration": {
    "ingress": {
      "external": true,
      "targetPort": 80,
      "allowInsecure": false,
      "traffic": [
          {
              "weight": 50,
              "label": "v-2"
          },
          {
              "weight": 50,
              "label": "v-1"
          }
        ],
    },
  },

Casos de uso

En los siguientes escenarios se describen las opciones de configuración para casos de uso comunes. Los ejemplos se muestran en formato JSON, pero también puede usar Azure Portal o la CLI de Azure para configurar la división de tráfico.

Iteración rápida

En situaciones en las que suele iterar el desarrollo de la aplicación de contenedor, puede establecer reglas de tráfico para siempre cambiar todo el tráfico a la revisión implementada más reciente.

La plantilla de ejemplo siguiente enruta todo el tráfico a la revisión implementada más reciente:

"ingress": { 
  "traffic": [
    {
      "latestRevision": true,
      "weight": 100
    }
  ]
}

Una vez que esté satisfecho con la revisión más reciente, puede bloquear el tráfico a esa revisión mediante la actualización de la configuración ingress a:

"ingress": { 
  "traffic": [
    {
      "latestRevision": false, // optional
      "revisionName": "myapp--knowngoodrevision",
      "weight": 100
    }
  ]
}

Actualización de la revisión existente

Considere una situación en la que tiene una buena revisión conocida que atiende el 100 % del tráfico, pero quiere emitir una actualización en la aplicación. Puede implementar y probar nuevas revisiones mediante sus puntos de conexión directos sin afectar a la revisión principal que sirve a la aplicación.

Una vez que esté satisfecho con la revisión actualizada, puede cambiar una parte del tráfico a la nueva revisión para pruebas y comprobación.

La plantilla siguiente mueve el 20 % del tráfico a la revisión actualizada:

"ingress": {
  "traffic": [
    {
      "revisionName": "myapp--knowngoodrevision",
      "weight": 80
    },
    {
      "revisionName": "myapp--newerrevision",
      "weight": 20
    }
  ]
}

Almacenamiento provisional de microservicios

Al compilar microservicios, es posible que quiera mantener los puntos de conexión de producción y almacenamiento provisional para la misma aplicación. Use etiquetas para asegurarse de que el tráfico no cambie entre diferentes revisiones.

La plantilla de ejemplo siguiente aplica etiquetas a diferentes revisiones.

"ingress": { 
  "traffic": [
    {
      "revisionName": "myapp--knowngoodrevision",
      "weight": 100
    },
    {
      "revisionName": "myapp--98fdgt",
      "weight": 0,
      "label": "staging"
    }
  ]
}

Pasos siguientes