從網際網路接收輸入連線 - Amazon Elastic Container Service

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

從網際網路接收輸入連線

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

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

Application Load Balancer

應用程式負載平衡器會在應用程式層運作。這是開放系統互連(OSI)模型的第七層。這使得應用程序負載平衡器適用於公共 HTTP 服務。如果您有網站或 HTTP REST API,則 Application Load Balancer 就是適用於此工作負載的負載平衡器。如需詳細資訊,請參閱什麼是應用程式負載平衡器? 在《應用程式負載平衡器使用者指南》中。

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

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

應用程式負載平衡器具有下列優點。

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

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

  • gRPC 支援和網路通訊端 — Application Load Balancer 可以處理的不僅僅是 HTTP。它還可以負載平衡 gRPC 和基於網絡通訊端的服務,並支持 HTTP/2。

  • 安全性 — 應用程式負載平衡器可協助保護您的應用程式免受惡意流 它包含 HTTP de 同步緩和措施等功能,並與 AWS Web 應用程式防火牆整合 (AWS WAF)。 AWS WAF 可進一步過濾掉可能包含攻擊模式的惡意流量,例如 SQL 插入或跨網站指令碼。

Network Load Balancer

Network Load Balancer 是在開放系統互連 (OSI) 模型的第四層運作。它適用於非 HTTP 通訊協定或需要 end-to-end 加密的案例,但不具有 Application Load Balancer 相同的 HTTP 特定功能。因此,Network Load Balancer 最適合不使用 HTTP 的應用程式。如需詳細資訊,請參閱什麼是 Network Load Balancer? 在《網路負載平衡器使用者指南》中。

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

使用 Network Load Balancer 作為輸入時,其功能與 Application Load Balancer 類似。這是因為它是在公共子網中創建的,並且具有可以在 Internet 上訪問的公共 IP 地址。然後,Network Load Balancer 會開啟與執行容器之主機私有 IP 位址的連線,並將封包從公用端傳送到私有端。

Network Load Balancer 功能

由於 Network Load Balancer 在較低層級的網路堆疊上運作,因此它沒有與 Application Load Balancer 相同的功能集。但是,它確實具有以下重要功能。

  • E nd-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 模型的較高層觀察應用程式通訊協定,因此無法傳送關閉訊息給這些通訊協定中的用戶端。與應用程式負載平衡器不同,這些連線必須由應用程式關閉,或者您可以設定 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

Amazon API Gateway HTTP API 是一種無伺服器輸入,適用於在請求磁碟區突然爆發或低請求磁碟區的 HTTP 應用程式。如需詳細資訊,請參閱什麼是 Amazon API Gateway?API Gateway 開發人員指南中。

圖顯示使用 API Gateway 的網絡的體系結構。

應用程式負載平衡器和 Network Load Balancer 的定價模式均包含每小時價格,讓負載平衡器隨時可用於接受傳入連線。相反地,API Gateway 會分別針對每個要求收取費用。這樣做的效果是,如果沒有請求進入,則不收取任何費用。在高流量負載下,應用程式負載平衡器或 Network Load Balancer 可以以比 API Gateway 更便宜的每個請求價格處理更大量的請求。不過,如果您的整體要求數量較少或流量較低,則使用 API Gateway 的累計價格應該比支付每小時費用來維護未充分利用的負載平衡器費用更具成本效益。API Gateway 也可以快取 API 回應,這可能會導致後端要求率較低。

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

API Gateway 支援下列功能。

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

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

  • API Gateway 可支援邊緣、地區和私有 API 閘道端點。Edge 端點可透過受管理 CloudFront 發佈取得。區域和私有端點都是區域的本地端點。

  • SSL/TLS 終止

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

除了上述功能之外,API Gateway 還支援使用自訂 Lambda 授權器,您可以使用這些授權程式來保護您的 API 不受未經授權的使用。如需詳細資訊,請參閱欄位備註:搭配 Amazon ECS 和 Amazon API 閘道的無伺服器容器型 API。