Разделение трафика в приложениях контейнеров Azure
По умолчанию при включении входящего трафика все трафик направляется в последнюю развернутую редакцию. При включении нескольких режимов редакции в приложении-контейнере можно разделить входящий трафик между активными редакциями.
Разделение трафика полезно для тестирования обновлений приложения-контейнера. Вы можете использовать разделение трафика для постепенного этапа в новой редакции в сине-зеленых развертываниях или в тестировании A/B.
Разделение трафика основано на весе (проценте) трафика, который направляется на каждую редакцию. Совокупный вес всех правил разделения трафика должен составлять 100 %. Можно указать редакцию по имени редакции или метки редакции.
В этой статье показано, как настроить правила разделения трафика для приложения контейнера. Для выполнения следующих примеров требуется приложение контейнера с несколькими редакциями.
Настройка разделения трафика
Настройте разделение трафика между редакциями с помощью az containerapp ingress traffic set
команды. Можно указать редакции по имени с параметром --revision-weight
или меткой редакции с параметром --label-weight
.
Следующая команда задает вес трафика для каждой редакции на 50%:
az containerapp ingress traffic set \
--name <APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--revision-weight <REVISION_1>=50 <REVISION_2>=50
Обязательно замените значения заполнителей, окруженные собственными значениями <>
.
Эта команда задает вес трафика для LABEL_1> редакции <на 80 %, а LABEL_2> редакции <— 20%:
az containerapp ingress traffic set \
--name <APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--label-weight <LABEL_1>=80 <LABEL_2>=20
- Перейдите в приложение-контейнер в портал Azure.
- Выберите управление редакцией в меню слева.
- Если режим редакции является одним, задайте для режима несколько.
- Выберите режим редакции.
- Выберите несколько: несколько версий, активных одновременно.
- Выберите Применить.
- Дождитесь обновления режима редакции до нескольких.
- Выберите "Показать неактивные редакции".
- Если у вас нет нескольких редакций, можно создать новую редакцию.
- Выберите "Создать новую версию".
- Параметры по умолчанию можно использовать или настроить редакцию.
- Введите имя или суффикс для редакции.
- Нажмите кнопку создания.
- Дождитесь развертывания редакции.
- Выберите "Активный " для редакций, в которые требуется маршрутизировать трафик.
- Введите процент трафика, который требуется направить к каждой редакции в столбце "Трафик ". Совокупный процент всего трафика должен составлять 100 %.
- Выберите Сохранить.
Включите разделение трафика, добавив configuration.ingress.traffic
свойства в ingress
раздел шаблона приложения контейнера. Можно указать редакции по имени с свойством revisionName
или меткой редакции с label
помощью свойства.
Следующий пример задает 100 % трафика в последнюю развернутую редакцию:
{
...
"configuration": {
"ingress": {
"external": true,
"targetPort": 80,
"allowInsecure": false,
"traffic": [
{
"latestRevision": true,
"weight": 100
}
]
},
},
В следующем примере показано разделение трафика между двумя редакциями по имени:
{
...
"configuration": {
"ingress": {
"external": true,
"targetPort": 80,
"allowInsecure": false,
"traffic": [
{
"revisionName": "my-example-app--5g3ty20",
"weight": 50
},
{
"revisionName": "my-example-app--qcfkbsv",
"weight": 50
}
],
},
},
В следующем примере показано разделение трафика между двумя редакциями по метке:
{
...
"configuration": {
"ingress": {
"external": true,
"targetPort": 80,
"allowInsecure": false,
"traffic": [
{
"weight": 50,
"label": "v-2"
},
{
"weight": 50,
"label": "v-1"
}
],
},
},
Случаи использования
В следующих сценариях описаны параметры конфигурации для распространенных вариантов использования. Примеры показаны в формате JSON, но вы также можете использовать портал Azure или Azure CLI для настройки разделения трафика.
Быстрая итерация
В ситуациях, когда вы часто выполняете разработку приложения-контейнера, вы можете задать правила трафика, чтобы всегда перемещать весь трафик на последнюю развернутую редакцию.
Следующий пример шаблона направляет весь трафик к последней развернутой редакции:
"ingress": {
"traffic": [
{
"latestRevision": true,
"weight": 100
}
]
}
После того как вы удовлетворены последней редакцией, вы можете заблокировать трафик этой редакции, обновив параметры следующим ingress
образом:
"ingress": {
"traffic": [
{
"latestRevision": false, // optional
"revisionName": "myapp--knowngoodrevision",
"weight": 100
}
]
}
Обновление существующей редакции
Рассмотрим ситуацию, когда у вас есть известная хорошая редакция, которая обслуживает 100 % трафика, но вы хотите выдать обновление для приложения. Вы можете развертывать и тестировать новые редакции с помощью их прямых конечных точек, не затрагивая основную редакцию, обслуживающую приложение.
После удовлетворения обновленной редакции можно переместить часть трафика в новую редакцию для тестирования и проверки.
Следующий шаблон перемещает 20 % трафика на обновленную редакцию:
"ingress": {
"traffic": [
{
"revisionName": "myapp--knowngoodrevision",
"weight": 80
},
{
"revisionName": "myapp--newerrevision",
"weight": 20
}
]
}
Промежуточные микрослужбы
При создании микрослужб может потребоваться поддерживать рабочие и промежуточные конечные точки для одного приложения. Используйте метки, чтобы убедиться, что трафик не переключается между различными редакциями.
В следующем примере шаблона применяются метки к разным редакциям.
"ingress": {
"traffic": [
{
"revisionName": "myapp--knowngoodrevision",
"weight": 100
},
{
"revisionName": "myapp--98fdgt",
"weight": 0,
"label": "staging"
}
]
}