Share via


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

  1. 移至Azure 入口網站 中的 容器應用程式。
  2. 從左側功能表中選取 [修訂管理 ]。
  3. 如果修訂模式為 Single ,請將模式設定為 多個
    1. 選取 [ 選擇修訂模式 ]。
    2. 選取 [多重:數個修訂同時作用中 ]。
    3. 選取套用
    4. 等候 修訂模式 更新為 多個 Screenshot of the revision management revision mode setting.
  4. 選取 [ 顯示非使用中的修訂 ]。
  5. 如果您沒有多個修訂,您可以建立新的修訂。
    1. 選取 [ 建立新修訂 ]。
    2. 您可以使用預設設定或自訂修訂。
    3. 輸入修訂的名稱/尾碼
    4. 選取建立Screenshot of Create and deploy new revision.
    5. 等候修訂部署。
  6. 針對您想要將流量路由傳送至的修訂,選取 [ 作用 中]。
  7. 輸入您想要路由傳送至流量 資料行中 每個修訂的流量百分比。 所有流量的合併百分比必須等於 100%。
  8. 選取 [儲存]。 Screenshot of traffic splitting in Revision management.

將屬性新增 configuration.ingress.trafficingress 容器應用程式範本的 區段,以啟用流量分割。 您可以使用 屬性或使用 屬性的修訂標籤 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"
    }
  ]
}

下一步