Suddivisione del traffico nelle app Azure Container

Per impostazione predefinita, quando l'ingresso è abilitato, tutto il traffico viene instradato alla revisione distribuita più recente. Quando si abilita più modalità di revisione nell'app contenitore, è possibile suddividere il traffico in ingresso tra revisioni attive.

La suddivisione del traffico è utile per testare gli aggiornamenti all'app contenitore. È possibile usare la suddivisione del traffico per eseguire gradualmente la fase in una nuova revisione nelle distribuzioni blu-verde o nei test A/B.

La suddivisione del traffico si basa sul peso (percentuale) del traffico indirizzato a ogni revisione. Il peso combinato di tutte le regole di divisione del traffico deve essere uguale al 100%. È possibile specificare la revisione in base al nome della revisione o all'etichetta di revisione.

Questo articolo illustra come configurare le regole di suddivisione del traffico per l'app contenitore. Per eseguire gli esempi seguenti, è necessaria un'app contenitore con più revisioni.

Configurare la suddivisione del traffico

Configurare la suddivisione del traffico tra revisioni usando il az containerapp ingress traffic set comando . È possibile specificare le revisioni in base al nome con il --revision-weight parametro o tramite l'etichetta di revisione con il --label-weight parametro .

Il comando seguente imposta il peso del traffico per ogni revisione su 50%:

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

Assicurarsi di sostituire i valori segnaposto racchiusi tra <> i propri valori.

Questo comando imposta il peso del traffico per la revisione <LABEL_1> all'80% e alla revisione <LABEL_2> su 20%:

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

  1. Passare all'app contenitore nel portale di Azure.
  2. Selezionare Gestione revisioni dal menu a sinistra.
  3. Se la modalità di revisione è Single, impostare la modalità su più.
    1. Selezionare Scegli modalità revisione.
    2. Selezionare Multiple (Multiple): più revisioni attive contemporaneamente.
    3. Selezionare Applica.
    4. Attendere che la modalità revisione venga aggiornata a multiple. Screenshot of the revision management revision mode setting.
  4. Selezionare Mostra revisioni inattive.
  5. Se non si dispone di più revisioni, è possibile creare una nuova revisione.
    1. Selezionare Crea nuova revisione.
    2. È possibile usare le impostazioni predefinite o personalizzare la revisione.
    3. Immettere un nome/suffisso per la revisione.
    4. Seleziona Crea. Screenshot of Create and deploy new revision.
    5. Attendere la distribuzione della revisione.
  6. Selezionare Attivo per le revisioni a cui si vuole instradare il traffico.
  7. Immettere la percentuale di traffico che si vuole instradare a ogni revisione nella colonna Traffico . La percentuale combinata di tutto il traffico deve essere uguale al 100%.
  8. Seleziona Salva. Screenshot of traffic splitting in Revision management.

Abilitare la suddivisione del traffico aggiungendo le configuration.ingress.traffic proprietà alla ingress sezione del modello di app contenitore. È possibile specificare le revisioni in base al nome con la revisionName proprietà o tramite l'etichetta di revisione con la label proprietà .

L'esempio seguente imposta il 100% del traffico sulla revisione distribuita più recente:

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

L'esempio seguente mostra la suddivisione del traffico tra due revisioni in base al nome:

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

L'esempio seguente mostra la suddivisione del traffico tra due revisioni per etichetta:

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

Casi d'uso

Gli scenari seguenti descrivono le impostazioni di configurazione per i casi d'uso comuni. Gli esempi sono illustrati in formato JSON, ma è anche possibile usare il portale di Azure o l'interfaccia della riga di comando di Azure per configurare la suddivisione del traffico.

Iterazione rapida

In situazioni in cui si esegue spesso l'iterazione dello sviluppo dell'app contenitore, è possibile impostare regole di traffico per spostare sempre tutto il traffico alla revisione distribuita più recente.

Il modello di esempio seguente indirizza tutto il traffico alla revisione distribuita più recente:

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

Dopo aver soddisfatto la revisione più recente, è possibile bloccare il traffico a tale revisione aggiornando le ingress impostazioni a:

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

Aggiornare la revisione esistente

Si consideri una situazione in cui si dispone di una revisione valida nota che gestisce il 100% del traffico, ma si vuole inviare un aggiornamento all'app. È possibile distribuire e testare le nuove revisioni usando gli endpoint diretti senza influire sulla revisione principale che gestisce l'app.

Dopo aver soddisfatto la revisione aggiornata, è possibile spostare una parte del traffico alla nuova revisione per il test e la verifica.

Il modello seguente sposta il 20% del traffico sulla revisione aggiornata:

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

Microservizi di gestione temporanea

Quando si creano microservizi, è possibile mantenere gli endpoint di produzione e di gestione temporanea per la stessa app. Usare le etichette per assicurarsi che il traffico non passi da revisioni diverse.

Il modello di esempio seguente applica etichette a revisioni diverse.

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

Passaggi successivi