Azure 容器应用中的流量拆分
默认情况下,在启用入口后,所有流量将路由到最新部署的修订版。 在容器应用中启用多修订版模式后,可以在活动修订版之间拆分传入流量。
流量拆分有助于测试对容器应用所做的更新。 可以使用流量拆分在蓝绿部署中逐步地分阶段部署新修订版。
流量拆分基于路由到每个修订版的流量的权重(百分比)。 所有流量拆分规则的总权重必须等于 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"
}
]
}