Amazon ECS 藍/綠部署的 Network Load Balancer 資源 - Amazon Elastic Container Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon ECS 藍/綠部署的 Network Load Balancer 資源

若要將 Network Load Balancer 與 Amazon ECS 藍/綠部署搭配使用,您需要設定特定資源,以啟用藍和綠服務修訂之間的流量路由。本節說明必要的元件及其組態。

當您的組態包含 Network Load Balancer 時,Amazon ECS 會將延遲 10 分鐘新增至下列生命週期階段:

  • PRE_SCALE_UP

  • TEST_TRAFFIC_SHIFT

  • PRODUCTION_TRAFFIC_SHIFT

此延遲會考量 Network Load Balancer 時序問題,這些問題可能導致設定的流量權重與資料平面中的實際流量路由不相符。

目標群組

對於使用 Network Load Balancer 的藍/綠部署,您需要建立兩個目標群組:

  • 藍色服務修訂的主要目標群組 (目前的生產流量)

  • 綠色服務修訂 (新服務修訂) 的替代目標群組

兩個目標群組都應該使用下列設定進行設定:

  • 目標類型: ip (適用於具有awsvpc網路模式的 Fargate 或 EC2)

  • 通訊協定: TCP(或您的應用程式使用的通訊協定)

  • 連接埠:您的應用程式接聽的連接埠 (通常80用於 HTTP)

  • VPC:與您的 Amazon ECS 任務相同的 VPC

  • 運作狀態檢查設定:設定為正確檢查應用程式的運作狀態

    對於 TCP 運作狀態檢查,Network Load Balancer 會建立與目標的 TCP 連線。如果連線成功,目標會被視為運作狀態良好。

    對於 HTTP/HTTPS 運作狀態檢查,Network Load Balancer 會將 HTTP/HTTPS 請求傳送至目標,並驗證回應。

在藍/綠部署期間,Amazon ECS 會根據部署階段,自動向適當的目標群組註冊任務。

範例 建立 Network Load Balancer 的目標群組

下列 AWS CLI 命令會建立兩個目標群組,以便在藍/綠部署中與 Network Load Balancer 搭配使用:

aws elbv2 create-target-group \ --name blue-target-group \ --protocol TCP \ --port 80 \ --vpc-id vpc-abcd1234 \ --target-type ip \ --health-check-protocol TCP aws elbv2 create-target-group \ --name green-target-group \ --protocol TCP \ --port 80 \ --vpc-id vpc-abcd1234 \ --target-type ip \ --health-check-protocol TCP

Network Load Balancer

您需要使用下列組態建立 Network Load Balancer:

  • 結構描述:面向網際網路或內部,視您的需求而定

  • IP 地址類型:IPv4

  • VPC:與您的 Amazon ECS 任務相同的 VPC

  • 子網路:不同可用區域中至少有兩個子網路

與 Application Load Balancer 不同,Network Load Balancer 會在傳輸層 (第 4 層) 操作,請勿使用安全群組。反之,您需要確保與 Amazon ECS 任務相關聯的安全群組允許來自接聽程式連接埠上 Network Load Balancer 的流量。

範例 建立 Network Load Balancer

下列 AWS CLI 命令會建立 Network Load Balancer 以用於藍/綠部署:

aws elbv2 create-load-balancer \ --name my-network-load-balancer \ --type network \ --subnets subnet-12345678 subnet-87654321

搭配藍/綠部署使用 NLB 的考量事項

針對藍/綠部署使用 Network Load Balancer 時,請考慮下列事項:

  • Layer 4 操作:Network Load Balancer 會在傳輸層 (Layer 4) 操作,且不檢查應用程式層 (Layer 7) 內容。這表示您無法使用 HTTP 標頭或路徑進行路由決策。

  • 運作狀態檢查:Network Load Balancer 運作狀態檢查僅限於 TCP、HTTP 或 HTTPS 通訊協定。對於 TCP 運作狀態檢查,Network Load Balancer 只會驗證是否可以建立連線。

  • 連線保留:Network Load Balancer 會保留用戶端的來源 IP 地址,這對於安全與記錄用途非常有用。

  • 靜態 IP 地址:Network Load Balancer 為每個子網路提供靜態 IP 地址,這對於允許清單或用戶端需要連線到固定 IP 地址時非常有用。

  • 測試流量:由於 Network Load Balancer 不支援內容型路由,因此測試流量必須傳送至與生產流量不同的連接埠。

接聽程式和規則

對於使用 Network Load Balancer 的藍/綠部署,您需要設定接聽程式:

  • 生產接聽程式:處理生產流量 (通常位於連接埠 80 或 443)

    • 最初將流量轉送至主要目標群組 (藍色服務修訂)

    • 部署之後, 會將流量轉送至替代目標群組 (綠色服務修訂)

  • 測試接聽程式 (選用):在轉移生產流量之前處理測試流量以驗證綠色服務修訂

    • 可以在不同的連接埠上設定 (例如 8080 或 8443)

    • 在測試期間將流量轉送至替代目標群組 (綠色服務修訂)

與 Application Load Balancer 不同,Network Load Balancer 不支援內容型路由規則。反之,流量會根據接聽程式連接埠和通訊協定路由。

下列 AWS CLI 命令會建立 Network Load Balancer 的生產和測試接聽程式:

user-input 取代為您的值。

aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/net/my-network-lb/1234567890123456 \ --protocol TCP \ --port 80 \ --default-actions Type=forward, TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/blue-target-group/1234567890123456 aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/net/my-network-lb/1234567890123456 \ --protocol TCP \ --port 8080 \ --default-actions Type=forward, TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/1234567890123456

服務組態

您必須擁有許可,才能允許 Amazon ECS 代表您管理叢集中的負載平衡器資源。如需詳細資訊,請參閱適用於負載平衡器的 Amazon ECS 基礎設施 IAM 角色

使用 Network Load Balancer 建立或更新藍/綠部署的 Amazon ECS 服務時,您需要指定下列組態:

user-input 取代為您的值。

此組態中的關鍵元件為:

  • targetGroupArn:主要目標群組的 ARN (藍色服務修訂)

  • alternateTargetGroupArn:替代目標群組的 ARN (綠色服務修訂)

  • productionListenerArn:生產流量接聽程式的 ARN

  • testListenerArn:(選用) 測試流量的接聽程式 ARN

  • roleArn:允許 Amazon ECS 管理 Network Load Balancer 資源的角色 ARN

  • strategy:設定為 BLUE_GREEN 以啟用藍/綠部署

  • bakeTimeInMinutes:在部署綠色服務修訂版之後轉移生產流量之前等待的持續時間

{ "loadBalancers": [ { "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/blue-target-group/1234567890123456", "containerName": "container-name", "containerPort": 80, "advancedConfiguration": { "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/1234567890123456", "productionListenerArn": "arn:aws:elasticloadbalancing:region:123456789012:listener/net/my-network-lb/1234567890123456/1234567890123456", "testListenerArn": "arn:aws:elasticloadbalancing:region:123456789012:listener/net/my-network-lb/1234567890123456/2345678901234567", "roleArn": "arn:aws:iam::123456789012:role/ecs-nlb-role" } } ], "deploymentConfiguration": { "strategy": "BLUE_GREEN", "maximumPercent": 200, "minimumHealthyPercent": 100, "bakeTimeInMinutes": 5 } }

部署期間的流量流程

使用 Network Load Balancer 進行藍/綠部署期間,流量會流經系統,如下所示:

  1. 初始狀態:所有生產流量都會路由至主要目標群組 (藍色服務修訂)。

  2. 綠色服務修訂部署:Amazon ECS 部署新任務,並向替代目標群組註冊它們。

  3. 測試流量:如果已設定測試接聽程式,則測試流量會路由至替代目標群組,以驗證綠色服務修訂。

  4. 生產流量轉移:Amazon ECS 會更新生產接聽程式,將流量路由到替代目標群組 (綠色服務修訂)。

  5. 製作時間:生產流量轉移後,藍色和綠色服務修訂同時執行的持續時間。

  6. 完成:成功部署後,藍色服務修訂會終止。

如果在部署期間偵測到問題,Amazon ECS 可以透過將流量路由回主要目標群組 (藍色服務修訂) 來自動轉返。