從ECS網際網路接收 Amazon 傳入連線的最佳實務 - Amazon Elastic Container Service

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

從ECS網際網路接收 Amazon 傳入連線的最佳實務

如果您執行公有服務,則必須接受來自網際網路的傳入流量。例如,您的公有網站必須接受來自瀏覽器的傳入HTTP請求。在這種情況下,網際網路上的其他主機也必須啟動與應用程式主機的傳入連線。

此問題的一個方法是在具有公有 IP 地址的公有子網路主機上啟動容器。不過,我們不建議大規模應用程式使用此功能。對於這些,更好的方法是在網際網路和應用程式之間具有可擴展的輸入層。對於此方法,您可以使用本節中列出的任何 AWS 服務作為輸入。

Application Load Balancer

Application Load Balancer 會在應用程式層執行函數。這是 Open Systems Interconnection (OSI) 模型的第七層。這使得 Application Load Balancer 適用於公有HTTP服務。如果您有網站或 HTTP REST API,則 Application Load Balancer 是適合此工作負載的負載平衡器。如需詳細資訊,請參閱 Application Load Balancer 使用者指南中的什麼是 Application Load Balancer?

顯示使用 Application Load Balancer 之網路架構的圖表。

使用此架構,您可以在公有子網路中建立 Application Load Balancer,以便其具有公有 IP 地址,並可從網際網路接收傳入連線。當 Application Load Balancer 收到傳入連線,或更具體地收到HTTP請求時,它會使用其私有 IP 地址開啟與應用程式的連線。然後,它會透過內部連線轉送請求。

Application Load Balancer 具有下列優點。

  • SSL/TLS 終止 — Application Load Balancer 可以維持安全HTTPS通訊和憑證,以便與客戶進行通訊。它可以選擇性地終止負載平衡器層級的SSL連線,這樣您就不必在自己的應用程式中處理憑證。

  • 進階路由 — Application Load Balancer 可以具有多個DNS主機名稱。它還具有進階路由功能,可根據主機名稱或HTTP請求的路徑等指標,將傳入的請求傳送至不同的目的地。這表示您可以使用單一 Application Load Balancer 作為許多不同內部服務的輸入,甚至是 REST 不同路徑上的微服務API。

  • gRPC 支援和 Websocket:Application Load Balancer 不僅可以處理 ,還可以處理 HTTP。它還可以載入平衡 gRPC 和 Websocket 型服務,並支援 HTTP/2。

  • 安全:Application Load Balancer 有助於保護您的應用程式免受惡意流量的影響。它包含諸如HTTP去同步緩解功能等功能,並與 AWS Web Application Firewall (AWS WAF) 整合。 AWS WAF 可以進一步篩選可能包含攻擊模式的惡意流量,例如SQL注入或跨網站指令碼。

Network Load Balancer

Network Load Balancer 會在 Open Systems Interconnection (OSI) 模型的第四層運作。它適用於需要加密的非HTTP通訊協定或案例 end-to-end,但沒有 Application Load Balancer 的相同 HTTP特定功能。因此,Network Load Balancer 最適合不使用 的應用程式HTTP。如需詳細資訊,請參閱 Network Load Balancer 使用者指南中的什麼是 Network Load Balancer?

顯示使用 Network Load Balancer 之網路架構的圖表。

使用 Network Load Balancer 做為輸入時,其運作方式與 Application Load Balancer 類似。這是因為其是在公有子網路中建立,且具有可在網際網路上存取的公有 IP 地址。然後,Network Load Balancer 會開啟與執行容器之主機私有 IP 地址的連線,並將封包從公有端傳送至私有端。

Network Load Balancer 功能

由於 Network Load Balancer 以較低的網路堆疊層級運作,因此其功能集與 Application Load Balancer 不同。不過,它確實具有下列重要功能。

  • End-to-end 加密:由於 Network Load Balancer 會在OSI模型的第四層運作,因此不會讀取封包的內容。這使得它適用於需要 end-to-end加密的負載平衡通訊。

  • TLS 加密 — 除了加密之外 end-to-end,Network Load Balancer 也可以終止TLS連線。如此一來,您的後端應用程式就不必實作自己的 TLS。

  • UDP 支援:由於 Network Load Balancer 會在OSI模型的第四層運作,因此適合 以外的非HTTP工作負載和通訊協定TCP。

關閉連線

由於 Network Load Balancer 未在OSI模型的較高層觀察應用程式通訊協定,因此無法傳送關閉訊息給這些通訊協定中的用戶端。與 Application Load Balancer 不同,這些連線需要由應用程式關閉,或者您可以設定 Network Load Balancer 在任務停止或取代時關閉第四層連線。請參閱 Network Load Balancer 文件 中 Network Load Balancer 目標群組的連線終止設定。

如果用戶端未處理,讓 Network Load Balancer 關閉第四層的連線可能會導致用戶端顯示不需要的錯誤訊息。有關建議用戶端組態的詳細資訊,請參閱這裡的建置程式庫。

關閉連線的方法因應用程式而異,但其中一種方法是確保 Network Load Balancer 目標取消註冊延遲比用戶端連線逾時更長。用戶端會先逾時,並透過 Network Load Balancer 正常重新連線至下一個任務,而舊任務會慢慢耗盡其所有用戶端。如需有關 Network Load Balancer 目標取消註冊延遲的詳細資訊,請參閱 Network Load Balancer 文件

Amazon API Gateway HTTP API

Amazon API Gateway 適用於請求磁碟區或低請求磁碟區突然爆量HTTP的應用程式。如需詳細資訊,請參閱API閘道開發人員指南 中的什麼是 Amazon Gateway?API

顯示使用 API Gateway 網路架構的圖表。

Application Load Balancer 和 Network Load Balancer 的定價模型包含每小時價格,讓負載平衡器隨時接受傳入連線。相反地,APIGateway 會分別針對每個請求收取費用。這會產生以下影響:如果沒有請求出現,則無需收費。在高流量負載下,Application Load Balancer 或 Network Load Balancer 可以比 API Gateway 更便宜的每次請求價格處理更多請求。不過,如果您的整體請求數量較少,或流量週期很低,則使用 API Gateway 的累積價格應該比支付每小時費用更符合成本效益,以維持未充分利用的負載平衡器。API Gateway 也可以快取API回應,這可能會導致較低的後端請求速率。

API 使用VPC連結的閘道函數,允許 AWS 受管服務VPC使用其私有 IP 地址,連線至 私有子網路內的主機。它可以透過查看由 Amazon ECS Service Discovery 管理 AWS Cloud Map 的服務探索記錄來偵測這些私有 IP 地址。

API Gateway 支援下列功能。

  • API Gateway 操作類似於負載平衡器,但具有API管理特有的其他功能

  • API Gateway 提供有關用戶端授權、使用層和請求/回應修改的其他功能。如需詳細資訊,請參閱 Amazon API Gateway 功能。

  • API Gateway 可以支援邊緣、區域和私有API閘道端點。邊緣端點可透過受管 CloudFront 分佈取得。區域和私有端點皆為區域本機。

  • SSL/TLS 終止

  • 將不同的HTTP路徑路由至不同的後端微服務

除了上述功能之外,APIGateway 還支援使用自訂 Lambda 授權方,您可以使用這些授權方來保護您的 API 免受未經授權的使用。如需詳細資訊,請參閱 欄位備註:APIs使用 Amazon ECS和 Amazon API Gateway 以 Serverless Container 為基礎的