Dela via


Trafikdelning i Azure Container Apps

När ingress är aktiverat dirigeras som standard all trafik till den senaste distribuerade revisionen. När du aktiverar flera revisionslägen i containerappen kan du dela inkommande trafik mellan aktiva revisioner.

Trafikdelning är användbart för att testa uppdateringar av containerappen. Du kan använda trafikdelning för att gradvis fasa in en ny revision i blågröna distributioner eller i A/B-testning.

Trafikdelning baseras på vikten (procent) av trafiken som dirigeras till varje revision. Den kombinerade vikten för alla regler för trafikdelning måste vara lika med 100 %. Du kan ange revision med revisionsnamn eller revisionsetikett.

Den här artikeln visar hur du konfigurerar regler för trafikdelning för containerappen. Om du vill köra följande exempel behöver du en containerapp med flera revisioner.

Konfigurera trafikdelning

Konfigurera trafikdelning mellan revisioner med hjälp av az containerapp ingress traffic set kommandot . Du kan ange revisionerna efter namn med parametern --revision-weight eller med revisionsetiketten med parametern --label-weight .

Följande kommando anger trafikvikten för varje revision till 50 %:

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

Ersätt platshållarvärdena som omges av <> med dina egna värden.

Det här kommandot anger trafikvikten för revision <LABEL_1> till 80 % och revision <LABEL_2> till 20 %:

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

  1. Gå till containerappen i Azure Portal.
  2. Välj Revisionshantering på menyn till vänster.
  3. Om revisionsläget är Enkel anger du läget till flera.
    1. Välj Välj revisionsläge.
    2. Välj Flera: Flera revisioner är aktiva samtidigt.
    3. Välj Använd.
    4. Vänta tills revisionsläget har uppdaterats till Flera. Skärmbild av revisionslägesinställningen för revisionshantering.
  4. Välj Visa inaktiva revisioner.
  5. Om du inte har flera revisioner kan du skapa en ny revision.
    1. Välj Skapa ny revision.
    2. Du kan använda standardinställningarna eller anpassa revisionen.
    3. Ange ett namn/suffix för revisionen.
    4. Välj Skapa. Skärmbild av Skapa och distribuera ny revision.
    5. Vänta tills revisionen har distribuerats.
  6. Välj Aktiv för de revisioner som du vill dirigera trafik till.
  7. Ange den procentandel av trafiken som du vill dirigera till varje revision i kolumnen Trafik . Den sammanlagda procentandelen av all trafik måste vara lika med 100 %.
  8. Välj Spara. Skärmbild av trafikdelning i revisionshantering.

Aktivera trafikdelning genom att lägga till configuration.ingress.traffic egenskaperna i ingress avsnittet i containerappmallen. Du kan ange revisionerna efter namn med revisionName egenskapen eller med revisionsetiketten med egenskapen label .

I följande exempel anges 100 % av trafiken till den senaste distribuerade revisionen:

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

I följande exempel visas trafikdelning mellan två revisioner efter namn:

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

I följande exempel visas trafikdelning mellan två revisioner efter etikett:

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

Användningsfall

I följande scenarier beskrivs konfigurationsinställningar för vanliga användningsfall. Exemplen visas i JSON-format, men du kan också använda Azure Portal eller Azure CLI för att konfigurera trafikdelning.

Snabb iteration

I situationer där du ofta itererar utvecklingen av containerappen kan du ställa in trafikregler för att alltid flytta all trafik till den senaste distribuerade revisionen.

Följande exempelmall dirigerar all trafik till den senaste distribuerade revisionen:

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

När du är nöjd med den senaste revisionen kan du låsa trafiken till revisionen ingress genom att uppdatera inställningarna till:

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

Uppdatera befintlig revision

Överväg en situation där du har en känd bra revision som hanterar 100 % av trafiken, men du vill utfärda en uppdatering av din app. Du kan distribuera och testa nya revisioner med hjälp av deras direkta slutpunkter utan att påverka huvudrevisionen som betjänar appen.

När du är nöjd med den uppdaterade revisionen kan du flytta en del av trafiken till den nya revisionen för testning och verifiering.

Följande mall flyttar över 20 % av trafiken till den uppdaterade revisionen:

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

Mellanlagring av mikrotjänster

När du skapar mikrotjänster kanske du vill underhålla produktions- och mellanlagringsslutpunkter för samma app. Använd etiketter för att se till att trafiken inte växlar mellan olika revisioner.

Följande exempelmall tillämpar etiketter på olika revisioner.

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

Nästa steg