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
- Passare all'app contenitore nel portale di Azure.
- Selezionare Gestione revisioni dal menu a sinistra.
- Se la modalità di revisione è Single, impostare la modalità su più.
- Selezionare Scegli modalità revisione.
- Selezionare Multiple (Multiple): più revisioni attive contemporaneamente.
- Selezionare Applica.
- Attendere che la modalità revisione venga aggiornata a multiple.
- Selezionare Mostra revisioni inattive.
- Se non si dispone di più revisioni, è possibile creare una nuova revisione.
- Selezionare Crea nuova revisione.
- È possibile usare le impostazioni predefinite o personalizzare la revisione.
- Immettere un nome/suffisso per la revisione.
- Seleziona Crea.
- Attendere la distribuzione della revisione.
- Selezionare Attivo per le revisioni a cui si vuole instradare il traffico.
- 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%.
- Seleziona Salva.
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"
}
]
}