Datenverkehrsaufteilung in Azure Container Apps

Wenn der Ingress aktiviert ist, wird standardmäßig der gesamte Datenverkehr an die neueste bereitgestellte Revision weitergeleitet. Wenn Sie in Ihrer Container-App mehrere Überarbeitungsmodus aktivieren, können Sie eingehenden Datenverkehr zwischen aktiven Überarbeitungen aufteilen.

Die Datenverkehrsteilung ist nützlich zum Testen von Updates für Ihre Container-App. Sie können die Datenverkehrsteilung verwenden, um schrittweise eine Phase in einer neuen Überarbeitung in blaugrünen Bereitstellungen oder in A/B-Tests durchzuführen.

Die Datenverkehrsteilung basiert auf der Gewichtung (Prozent) des Datenverkehrs, der an jede Überarbeitung weitergeleitet wird. Die kombinierte Gewichtung aller Datenverkehrsteilungsregeln muss 100 % betragen. Sie können die Überarbeitung nach Überarbeitungsnamen oder Überarbeitungsbezeichnungen angeben.

In diesem Artikel erfahren Sie, wie Sie Regeln für die Datenverkehrsteilung für Ihre Container-App konfigurieren. Zum Ausführen der folgenden Beispiele benötigen Sie eine Container-App mit mehreren Überarbeitungen.

Konfigurieren der Datenverkehrsteilung

Konfigurieren Sie die Datenverkehrsteilung zwischen Überarbeitungen mithilfe des az containerapp ingress traffic set Befehls. Sie können die Überarbeitungen anhand des Namens mit dem --revision-weight Parameter oder der Revisionsbezeichnung mit dem --label-weight Parameter angeben.

Mit dem folgenden Befehl wird die Datenverkehrsgewichtung für jede Revision auf 50 % festgelegt:

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

Ersetzen Sie unbedingt die Platzhalterwerte, die von <> Ihren eigenen Werten umgeben sind.

Mit diesem Befehl wird die Datenverkehrsgewichtung für die Überarbeitung <LABEL_1> auf 80 % festgelegt, und die Überarbeitung <LABEL_2> auf 20 %:

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

  1. Wechseln Sie in der Azure-Portal zu Ihrer Container-App.
  2. Wählen Sie im linken Menü die Revisionsverwaltung aus.
  3. Wenn der Überarbeitungsmodus single ist, legen Sie den Modus auf mehrere fest.
    1. Wählen Sie "Überarbeitungsmodus auswählen" aus.
    2. Wählen Sie "Mehrfach" aus : Mehrere Überarbeitungen, die gleichzeitig aktiv sind.
    3. Wählen Sie Übernehmen.
    4. Warten Sie, bis der Überarbeitungsmodus auf Mehrfach aktualisiert wird. Screenshot of the revision management revision mode setting.
  4. Wählen Sie "Inaktive Überarbeitungen anzeigen" aus.
  5. Wenn Sie nicht über mehrere Überarbeitungen verfügen, können Sie eine neue Revision erstellen.
    1. Wählen Sie Create new revision (Neue Revision erstellen) aus.
    2. Sie können die Standardeinstellungen verwenden oder die Überarbeitung anpassen.
    3. Geben Sie einen Namen/Suffix für die Überarbeitung ein.
    4. Wählen Sie Erstellen aus. Screenshot of Create and deploy new revision.
    5. Warten Sie, bis die Überarbeitung bereitgestellt wird.
  6. Wählen Sie "Aktiv " für die Überarbeitungen aus, an die Der Datenverkehr weitergeleitet werden soll.
  7. Geben Sie den Prozentsatz des Datenverkehrs ein, den Sie an jede Überarbeitung in der Spalte "Datenverkehr " weiterleiten möchten. Der kombinierte Prozentsatz des gesamten Datenverkehrs muss 100 % betragen.
  8. Wählen Sie Speichern aus. Screenshot of traffic splitting in Revision management.

Aktivieren Sie die Datenverkehrsteilung, indem Sie die configuration.ingress.traffic Eigenschaften zum ingress Abschnitt Ihrer Container-App-Vorlage hinzufügen. Sie können die Überarbeitungen mithilfe der revisionName Eigenschaft oder der Überarbeitungsbezeichnung mit der label Eigenschaft angeben.

Im folgenden Beispiel werden 100 % des Datenverkehrs auf die neueste bereitgestellte Revision festgelegt:

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

Das folgende Beispiel zeigt die Aufteilung des Datenverkehrs zwischen zwei Überarbeitungen anhand des Namens:

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

Das folgende Beispiel zeigt die Aufteilung des Datenverkehrs zwischen zwei Überarbeitungen nach Bezeichnung:

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

Anwendungsfälle

In den folgenden Szenarien werden Konfigurationseinstellungen für häufige Anwendungsfälle beschrieben. Die Beispiele werden im JSON-Format gezeigt, aber Sie können auch die Azure-Portal oder Azure CLI verwenden, um die Datenverkehrsteilung zu konfigurieren.

Schnelle Iteration

In Situationen, in denen Sie häufig die Entwicklung Ihrer Container-App iterieren, können Sie Datenverkehrsregeln festlegen, um immer den gesamten Datenverkehr auf die neueste bereitgestellte Revision zu verschieben.

Die folgende Beispielvorlage leitet den gesamten Datenverkehr an die neueste bereitgestellte Revision weiter:

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

Sobald Sie mit der neuesten Revision zufrieden sind, können Sie den Datenverkehr auf diese Überarbeitung sperren, indem Sie die ingress-Einstellungen aktualisieren auf:

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

Vorhandene Revision aktualisieren

Stellen Sie sich eine Situation vor, in der Sie über eine bekannte gute Revision verfügen, die 100 % Ihres Datenverkehrs bedient, Sie aber ein Update für Ihre App herausgeben möchten. Sie können neue Revisionen mithilfe ihrer direkten Endpunkte bereitstellen und testen, ohne dass sich dies auf die Hauptrevision auswirkt, die die App versorgt.

Sobald Sie mit der aktualisierten Revision zufrieden sind, können Sie einen Teil des Datenverkehrs auf die neue Revision zum Testen und Überprüfen verschieben.

Die folgende Vorlage verschiebt 20 % des Datenverkehrs in die aktualisierte Revision:

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

Staging von Microservices

Beim Erstellen von Microservices möchten Sie möglicherweise Produktions- und Stagingendpunkte für dieselbe App Standard. Verwenden Sie Bezeichnungen, um sicherzustellen, dass der Datenverkehr nicht zwischen verschiedenen Revisionen wechselt.

Die folgende Beispielvorlage wendet Bezeichnungen auf verschiedene Überarbeitungen an.

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

Nächste Schritte