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

  1. 前往 Azure 入口網站的容器應用程式。
  2. 從左側功能表中選取 [修訂管理]
  3. 如果修訂模式為單一,請將模式設定為多重
    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.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"
    }
  ]
}

下一步

藍綠部署 (部分機器翻譯)