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
- Wechseln Sie in der Azure-Portal zu Ihrer Container-App.
- Wählen Sie im linken Menü die Revisionsverwaltung aus.
- Wenn der Überarbeitungsmodus single ist, legen Sie den Modus auf mehrere fest.
- Wählen Sie "Überarbeitungsmodus auswählen" aus.
- Wählen Sie "Mehrfach" aus : Mehrere Überarbeitungen, die gleichzeitig aktiv sind.
- Wählen Sie Übernehmen.
- Warten Sie, bis der Überarbeitungsmodus auf Mehrfach aktualisiert wird.
- Wählen Sie "Inaktive Überarbeitungen anzeigen" aus.
- Wenn Sie nicht über mehrere Überarbeitungen verfügen, können Sie eine neue Revision erstellen.
- Wählen Sie Create new revision (Neue Revision erstellen) aus.
- Sie können die Standardeinstellungen verwenden oder die Überarbeitung anpassen.
- Geben Sie einen Namen/Suffix für die Überarbeitung ein.
- Wählen Sie Erstellen aus.
- Warten Sie, bis die Überarbeitung bereitgestellt wird.
- Wählen Sie "Aktiv " für die Überarbeitungen aus, an die Der Datenverkehr weitergeleitet werden soll.
- 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.
- Wählen Sie Speichern aus.
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"
}
]
}