Azure Container Apps 中的流量分割
根據預設,啟用輸入時,所有流量都會路由傳送至最新的已部署修訂。 當您在容器應用程式中啟用 多個修訂模式 時,您可以在作用中修訂之間分割連入流量。
流量分割對於測試容器應用程式的更新很有用。 您可以使用流量分割,在藍綠部署 或 A/B 測試 中 逐步分階段進行新的修訂。
流量分割是以路由傳送至每個修訂的流量權數(百分比)為基礎。 所有流量分割規則的合併權數必須等於 100%。 您可以依修訂名稱或 修訂標籤 指定修訂。
本文說明如何設定容器應用程式的流量分割規則。 若要執行下列範例,您需要具有多個修訂的容器應用程式。
設定流量分割
使用 az containerapp ingress traffic set
命令設定修訂之間的流量分割。 您可以使用 參數或使用 參數的修訂標籤 --label-weight
來指定修訂 --revision-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 入口網站 中的 容器應用程式。
- 從左側功能表中選取 [修訂管理 ]。
- 如果修訂模式為 Single ,請將模式設定為 多個 。
- 選取 [ 選擇修訂模式 ]。
- 選取 [多重:數個修訂同時作用中 ]。
- 選取套用。
- 等候 修訂模式 更新為 多個 。
- 選取 [ 顯示非使用中的修訂 ]。
- 如果您沒有多個修訂,您可以建立新的修訂。
- 選取 [ 建立新修訂 ]。
- 您可以使用預設設定或自訂修訂。
- 輸入修訂的名稱/尾碼 。
- 選取建立。
- 等候修訂部署。
- 針對您想要將流量路由傳送至的修訂,選取 [ 作用 中]。
- 輸入您想要路由傳送至流量 資料行中 每個修訂的流量百分比。 所有流量的合併百分比必須等於 100%。
- 選取 [儲存]。
將屬性新增 configuration.ingress.traffic
至 ingress
容器應用程式範本的 區段,以啟用流量分割。 您可以使用 屬性或使用 屬性的修訂標籤 label
來指定修訂 revisionName
。
下列範例會將 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"
}
]
}