Dzielenie ruchu w usłudze Azure Container Apps

Domyślnie po włączeniu ruchu przychodzącego cały ruch jest kierowany do najnowszej wdrożonej poprawki. Po włączeniu trybu wielu wersji w aplikacji kontenera można podzielić ruch przychodzący między aktywne poprawki.

Dzielenie ruchu jest przydatne w przypadku testowania aktualizacji aplikacji kontenera. Podział ruchu można użyć do stopniowej fazy w nowej wersji wdrożeń niebieski-zielony lub w testach A/B.

Podział ruchu jest oparty na wadze (procentowej) ruchu kierowanego do każdej poprawki. Łączna waga wszystkich reguł podziału ruchu musi być równa 100%. Możesz określić poprawkę według nazwy poprawki lub etykiety poprawki.

W tym artykule pokazano, jak skonfigurować reguły podziału ruchu dla aplikacji kontenera. Aby uruchomić następujące przykłady, potrzebujesz aplikacji kontenera z wieloma poprawkami.

Konfigurowanie dzielenia ruchu

Skonfiguruj podział ruchu między poprawkami przy użyciu az containerapp ingress traffic set polecenia . Poprawki można określić według nazwy z parametrem --revision-weight lub etykietą poprawki z parametrem --label-weight .

Następujące polecenie ustawia wagę ruchu dla każdej poprawki na 50%:

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

Pamiętaj, aby zastąpić wartości symboli zastępczych otoczonych <> własnymi wartościami.

To polecenie ustawia wagę ruchu dla poprawki <LABEL_1> na 80% i poprawki <LABEL_2> do 20%:

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

  1. Przejdź do aplikacji kontenera w witrynie Azure Portal.
  2. Wybierz pozycję Zarządzanie poprawkami z menu po lewej stronie.
  3. Jeśli tryb poprawki to Pojedynczy, ustaw tryb na wielokrotny.
    1. Wybierz pozycję Wybierz tryb poprawki.
    2. Wybierz pozycję Wiele: kilka wersji aktywnych jednocześnie.
    3. Wybierz Zastosuj.
    4. Poczekaj, aż tryb poprawki zostanie zaktualizowany do wielu. Screenshot of the revision management revision mode setting.
  4. Wybierz pozycję Pokaż nieaktywne poprawki.
  5. Jeśli nie masz wielu poprawek, możesz utworzyć nową poprawkę.
    1. Wybierz pozycję Utwórz nową poprawkę.
    2. Możesz użyć ustawień domyślnych lub dostosować poprawkę.
    3. Wprowadź nazwę /sufiks poprawki.
    4. Wybierz pozycję Utwórz. Screenshot of Create and deploy new revision.
    5. Poczekaj na wdrożenie poprawki.
  6. Wybierz pozycję Aktywne , aby uzyskać poprawki, do których chcesz kierować ruch.
  7. Wprowadź wartość procentową ruchu, który ma być kierowany do każdej poprawki w kolumnie Ruch . Łączny procent całego ruchu musi być równy 100%.
  8. Wybierz pozycję Zapisz. Screenshot of traffic splitting in Revision management.

Włącz dzielenie ruchu, dodając configuration.ingress.traffic właściwości do ingress sekcji szablonu aplikacji kontenera. Poprawki można określić według nazwy z revisionName właściwością lub etykietą poprawek z właściwością label .

W poniższym przykładzie ustawiono 100% ruchu do najnowszej wdrożonej poprawki:

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

W poniższym przykładzie pokazano podział ruchu między dwiema poprawkami według nazwy:

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

W poniższym przykładzie pokazano podział ruchu między dwiema poprawkami według etykiety:

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

Przypadki użycia

W poniższych scenariuszach opisano ustawienia konfiguracji dla typowych przypadków użycia. Przykłady są wyświetlane w formacie JSON, ale można również użyć witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure do skonfigurowania podziału ruchu.

Szybka iteracja

W sytuacjach, w których często iterujesz tworzenie aplikacji kontenera, możesz ustawić reguły ruchu, aby zawsze przenosić cały ruch do najnowszej wdrożonej poprawki.

Poniższy przykładowy szablon kieruje cały ruch do najnowszej wdrożonej poprawki:

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

Po spełnieniu najnowszych poprawek możesz zablokować ruch do tej poprawki, aktualizując ingress ustawienia na:

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

Aktualizowanie istniejącej poprawki

Rozważ sytuację, w której masz znaną dobrą poprawkę, która obsługuje 100% ruchu, ale chcesz wydać aktualizację aplikacji. Nowe poprawki można wdrażać i testować przy użyciu ich bezpośrednich punktów końcowych bez wpływu na główną poprawkę obsługującą aplikację.

Po zadowoleniu ze zaktualizowanej poprawki możesz przenieść część ruchu do nowej poprawki na potrzeby testowania i weryfikacji.

Następujący szablon przenosi 20% ruchu do zaktualizowanej poprawki:

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

Przejściowe mikrousługi

Podczas tworzenia mikrousług warto zachować punkty końcowe produkcyjne i przejściowe dla tej samej aplikacji. Użyj etykiet, aby upewnić się, że ruch nie przełącza się między różnymi wersjami.

Poniższy przykładowy szablon stosuje etykiety do różnych poprawek.

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

Następne kroki