本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon ECS Service Connect 元件
當您使用 Amazon ECS Service Connect 時,您可以將每個 Amazon ECS 服務設定為執行接收網路請求的伺服器應用程式 (用戶端伺服器服務),或執行發出請求的用戶端應用程式 (用戶端服務)。
當您準備開始使用 Service Connect 時,請先從用戶端-伺服器服務開始。您可以將 Service Connect 組態新增至新服務或現有服務。Amazon ECS 會在 命名空間中建立 Service Connect 端點。此外,Amazon ECS 會在服務中建立新部署來取代目前正在執行的任務。
現有任務和其他應用程式可以繼續連線到現有端點和外部應用程式。如果用戶端-伺服器服務透過向外擴展來新增任務,則來自用戶端的新連線將在所有任務之間取得平衡。如果用戶端-伺服器服務已更新,來自用戶端的新連線將在新版本 的任務之間取得平衡。
現有任務無法解析並連線到新端點。只有具有相同命名空間中 Service Connect 組態且在此部署之後開始執行的新任務,才能解析並連線至此端點。
這意味著用戶端應用程式的運算子會判斷其應用程式的組態何時變更,即使伺服器應用程式的運算子可以隨時變更其組態也是如此。每次部署命名空間中的任何服務時,命名空間中的端點清單都會變更。現有任務和替換任務的行為會繼續與最近部署之後的行為相同。
請考慮下列範例。
首先,假設您正在單一 AWS CloudFormation 範本和單一 AWS CloudFormation 堆疊中建立公有網際網路可用的應用程式。公有探索和連線能力應該最後由 建立 AWS CloudFormation,包括前端用戶端服務。需要按照此順序建立該服務,以防止在一段時間內,前端用戶端服務正在執行並可公開使用,但後端用戶端服務不是。如此可避免在該期間向大眾傳送錯誤訊息。在 中 AWS CloudFormation,您必須使用 dependsOn
來指示多個 AWS CloudFormation Amazon ECS 服務無法平行或同時進行。您應該為用戶端任務連線的每個後端用戶端-伺服器服務,將 dependsOn
新增至前端用戶端服務。
其次,假設前端服務存在,但沒有 Service Connect 組態。任務正在連線到現有的後端服務。請先使用 DNS 中或前端使用的 clientAlias
相同名稱,將用戶端-伺服器 Service Connect 組態新增至後端服務。這會建立新的部署,因此所有部署轉返偵測 AWS Management Console或 AWS SDKs AWS CLI和其他方法來轉返,並將後端服務還原至先前的部署和組態。如果您對後端服務的效能和行為感到滿意,請將用戶端或用戶端-伺服器 Service Connect 組態新增至前端服務。只有新部署中的任務會使用在這些新任務中新增的 Service Connect Proxy。如果此組態發生問題,您可以使用部署復原偵測或 AWS Management Console、 AWS CLI、 AWS SDKs和其他方法來復原和還原至先前的組態,並將後端服務還原至先前的部署和組態。如果您使用另一個以 DNS 為基礎的服務探索系統,而非 Service Connect,則任何前端或用戶端應用程式會在本機 DNS 快取到期後開始使用新端點和變更的端點組態,該過程通常需要數小時。
聯網
根據預設,Service Connect Proxy containerPort
會從任務定義連接埠映射接聽 。您的安全群組規則必須允許從用戶端將執行的子網路傳入 (傳入) 流量至此連接埠。
即使您在 Service Connect 服務組態中設定連接埠號碼,也不會變更 Service Connect Proxy 所接聽用戶端-伺服器服務的連接埠。當您設定此連接埠號碼時,Amazon ECS 會在這些任務內的 Service Connect Proxy 上變更用戶端服務連線到其中的端點連接埠。用戶端服務中的 Proxy 會使用 containerPort
連線至用戶端-伺服器服務中的 Proxy。
如果您想要變更 Service Connect Proxy 接聽的連接埠,請變更用戶端-伺服器服務 Service Connect 組態中的 ingressPortOverride
。如果您變更此連接埠號碼,則必須允許此連接埠上的傳入流量,供流量至此服務的流量使用。
應用程式傳送到針對 Service Connect 設定的 Amazon ECS 服務的流量,會要求 Amazon VPC 和子網路具有路由表規則和網路 ACL 規則,以允許您正在使用的 containerPort
和 ingressPortOverride
連接埠號碼。
您可以使用 Service Connect 在 VPCs之間傳送流量。路由表規則、網路 ACLs 和安全群組的相同需求適用於這兩個 VPCs。
例如,兩個叢集會在不同的 VPC 中建立任務。每個叢集中的服務會設定為使用相同的命名空間。這兩個服務中的應用程式無需任何 VPC DNS 組態,即可解析命名空間中的每個端點。不過,除非 VPC 對等互連、VPC 或子網路路由表和 VPC 網路 ACLs 允許 containerPort
和 ingressPortOverride
連接埠號碼上的流量,否則代理無法連線。
對於使用bridge
聯網模式的任務,您必須使用允許動態連接埠範圍上限流量的傳入規則來建立安全群組。然後,將安全群組指派給 Service Connect 叢集中的所有 EC2 執行個體。
Service Connect Proxy
如果您使用 Service Connect 組態建立或更新服務,Amazon ECS 會在啟動時將新容器新增至每個新任務。這種使用單獨容器的模式稱為 sidecar
。此容器在任務定義中不存在,您無法對其進行設定。Amazon ECS 會在 服務中管理容器組態。這可讓您在沒有 Service Connect 的情況下,在多個服務、命名空間和任務之間重複使用相同的任務定義。
Proxy 資源
-
對於任務定義,您必須設定 CPU 和記憶體參數。
建議您將額外的 256 個 CPU 單位和至少 64 MiB 的記憶體新增至 Service Connect 代理容器的任務 CPU 和記憶體。在 AWS Fargate 上,您可以設定的最低記憶體容量為 512 MiB。在 Amazon EC2 上,需要任務定義記憶體。
-
對於 服務,您可以在 Service Connect 組態中設定日誌組態。
-
如果您希望此服務中的任務在尖峰負載時每秒接收的請求數超過 500 個,建議在此 Service Connect Proxy 容器的任務定義中,將 512 個 CPU 單元新增至任務 CPU。
-
如果您希望在命名空間中建立超過 100 個 Service Connect 服務,或在命名空間內所有 Amazon ECS 服務中建立總共 2000 個任務,建議在 Service Connect Proxy 容器的任務記憶體中新增 128 MiB 記憶體。您應該在命名空間中所有 Amazon ECS 服務使用的每個任務定義中執行此操作。
代理組態
您的應用程式會以與應用程式所在的相同任務連線至附屬容器中的 Proxy。Amazon ECS 會設定任務和容器,讓應用程式只有在應用程式連線到相同命名空間中的端點名稱時,才會連線到代理。所有其他流量都不會使用 Proxy。其他流量包含相同 VPC、 AWS 服務端點和外部流量中的 IP 地址。
- 負載平衡
-
服務連線會將 Proxy 設定為使用循環配置策略,在 Service Connect 端點中的任務之間進行負載平衡。位於連線來源任務中的本機 Proxy,會挑選提供端點之用戶端-伺服器服務中的其中一項任務。
例如,請考慮在名為本機的命名空間中設定為用戶端服務的服務中執行 WordPress 的任務。有另一個包含具有執行 MySQL 資料庫 2 個任務的服務。此服務設定為在相同命名空間中透過 Service Connect 提供名為
mysql
的端點。在 WordPress 任務中,WordPress 應用程式使用端點名稱連線至資料庫。此名稱的連線會前往相同任務中附屬容器中執行的代理。然後,Proxy 可以使用循環配置策略連線至任一 MySQL 任務。負載平衡策略:循環配置
- 異常值偵測
-
此功能會使用 Proxy 先前連線失敗的相關資料,以避免傳送新的連線至連線失敗的主機。Service Connect 會設定 Proxy 的異常值偵測功能,以提供被動運作狀態檢查。
使用先前的範例,代理可以連線到任一 MySQL 任務。如果 Proxy 與特定 MySQL 任務進行了多個連線,並且在過去的 30 秒內有 5 次以上的連線失敗,那麼 Proxy 會在 30 到 300 秒內避免該 MySQL 任務。
- 重試
-
Service Connect 會將 Proxy 設定為重試透過 Proxy 傳遞且失敗的連線,而第二次嘗試則避免使用先前連線的主機。這可確保透過 Service Connect 的每個連線都不會因為一次性原因而失敗。
重試次數:2
- 逾時
-
Service Connect 會設定 Proxy 等待用戶端-伺服器應用程式回應的最長時間。預設逾時值為 15 秒,但可以更新。
選用參數:
idleTimeout - 連線在閒置時保持作用中狀態的秒數。的值會
0
停用idleTimeout
。HTTP
/HTTP2
/GRPC
的idleTimeout
預設值為 5 分鐘。的
idleTimeout
預設值TCP
為 1 小時。perRequestTimeout - 等待上游回應每個請求的完整回應的時間量。的值
0
會關閉perRequestTimeout
。這只能在應用程式容器appProtocol
的 為HTTP
/HTTP2
/ 時設定GRPC
。預設值為 15 秒。注意
如果
idleTimeout
設定為小於 的時間perRequestTimeout
,連線會在達到idleTimeout
而非 時關閉perRequestTimeout
。
考量事項
使用 Service Connect 時,請考慮下列事項:
-
在 Fargate 中執行的任務必須使用 Fargate Linux 平台版本
1.4.0
或更新版本,才能使用 Service Connect。 -
容器執行個體上的 Amazon ECS 代理程式版本必須
1.67.2
或更高版本。 -
容器執行個體必須執行 Amazon ECS 最佳化 Amazon Linux 2023 AMI 版本
20230428
或更高版本,或 Amazon ECS 最佳化 Amazon Linux 2 AMI 版本2.0.20221115
,才能使用 Service Connect。除 Amazon ECS 容器代理程式外,這些版本也具有 Service Connect 代理程式。如需有關 Service Connect 代理程式的更多資訊,請參閱 GitHub 上的 Amazon ECS Service Connect 代理程式。 -
容器執行個體必須具有資源
arn:aws:ecs:
的region
:0123456789012
:task-set/cluster
/*ecs:Poll
許可。如果您使用的是ecsInstanceRole
,則不需要新增其他許可。AmazonEC2ContainerServiceforEC2Role
受管政策具有必要的許可。如需詳細資訊,請參閱Amazon ECS 容器執行個體 IAM 角色。 -
Service Connect 只支援使用滾動部署的服務。
-
使用
bridge
網路模式和 Service Connect 的任務不支援hostname
容器定義參數。 -
任務定義必須設定任務記憶體限制,才能使用 Service Connect。如需詳細資訊,請參閱Service Connect Proxy。
-
不支援設定容器記憶體限制的任務定義。
您可以在容器上設定容器記憶體限制,但是您必須將任務記憶體限制設為大於容器記憶體限制總和的數字。任務限制中未在容器限制中配置的其他 CPU 和記憶體,會由 Service Connect Proxy 容器和其他未設定容器限制的容器使用。如需詳細資訊,請參閱Service Connect Proxy。
-
您可以設定 Service Connect 在相同區域中使用任何 AWS Cloud Map 命名空間 AWS 帳戶。
-
每個服務只能屬於一個命名空間。
-
僅支援 服務建立的任務。
-
所有端點在命名空間內必須不重複。
-
所有探索名稱在命名空間內必須不重複。
-
您必須先重新部署現有的服務,應用程式才能解析新的端點。不會將最近部署後新增至命名空間的新端點新增至任務組態。如需詳細資訊,請參閱Amazon ECS Service Connect 元件。
-
刪除叢集時,Service Connect 不會刪除命名空間。您必須刪除 中的命名空間 AWS Cloud Map。
-
Application Load Balancer 流量預設為在
awsvpc
網路模式下透過 Service Connect 代理程式路由。如果您希望非服務流量繞過 Service Connect 代理程式,請在 Service Connect 服務組態中使用ingressPortOverride
參數。 -
Service Connect with TLS 不支援 Bridge 網路模式。僅支援
awsvpc
聯網模式。
Service Connect 不支援下列項目:
-
Windows 容器
-
HTTP 1.0
-
獨立任務
-
使用藍/綠和外部部署類型的服務
-
Service Connect 不支援 Amazon ECS Anywhere 的
External
容器執行個體。 -
PPv2