閘道安全性

本頁面說明在 Google Kubernetes Engine (GKE) 保護閘道的不同方法。您也可以瞭解如何保護閘道。

閘道安全性的運作方式

閘道代表負載平衡器的前端。視安全性和法規遵循需求而定,您可以透過閘道,以兩種主要方式保護流量:

  • TLS 終止:閘道會使用代管或自行管理的 SSL 憑證,在閘道前端終止用戶端 TLS 連線。閘道可以選擇使用 BackendTLSPolicy,重新加密閘道與後端 Pod 之間的流量。
  • TLS 直通:加密的 TLS 流量會直接透過閘道傳遞至後端 Pod,負載平衡器不會終止或解密流量。您可以使用 TLSRoute 資源,根據伺服器名稱指示 (SNI) 主機名稱轉送流量。

本頁面說明如何使用在閘道層級上傳及管理的憑證,保護用戶端到閘道路徑,以及如何設定端對端 TLS 直通。如要瞭解如何透過 TLS 終止功能保護閘道至 Pod 的流量,請參閱「使用 TLS 保護負載平衡器至應用程式的流量」。

TLS 終止與 TLS 直通的比較

GKE Gateway 支援兩種不同的 TLS 作業模式,取決於 TLS 是在負載平衡器解密,還是直接傳遞至後端工作負載:TLS 終止和 TLS 直通。

傳輸層安全標準 (TLS) 終止

啟用 TLS 終止功能後,閘道會在負載平衡器前端終止來自用戶端的 TLS 連線。

設定閘道監聽器時,如果將 tls.mode 欄位設為 Terminate,並將 protocol 欄位設為 HTTPS,您可以使用 Kubernetes Secret、SSL 憑證或 Certificate Manager,直接將 TLS 憑證附加至閘道。

TLS 終止的主要特性如下:

  • 第 7 層檢查:由於閘道會解密用戶端流量,因此可以評估 HTTP 要求屬性 (例如標頭、路徑和方法),並使用 HTTPRoute 資源轉送流量。
  • 邊緣安全性:可與 Google Cloud Armor 安全性政策、網頁應用程式防火牆 (WAF) 規則和 Cloud CDN 邊緣快取整合。
  • 使用 BackendTLSPolicy 進行後端加密:如果工作負載需要端對端傳輸中加密,您可以設定 BackendTLSPolicy 資源,重新加密閘道和後端 Pod 之間的流量。

下圖顯示當您使用 TLS 終止和後端加密時,GKE Gateway 如何加密兩個流量路徑。外部用戶端會將加密的 HTTPS 要求 (https://example.com) 傳送至虛擬私有雲 (VPC) 網路中的閘道,負載平衡器會在該處終止 TLS 連線。接著,負載平衡器會建立獨立的重新加密連線,將流量轉送至 GKE 叢集中的後端 Store Pod:

用戶端對閘道和閘道對後端加密,並終止 TLS

除了加密之外,您也可以使用授權政策,保護用戶端到閘道路徑。授權政策會檢查傳入要求,並根據用戶端身分、HTTP 標頭和要求的路徑強制執行存取控管,然後才將流量轉送至後端 Pod,藉此啟用零信任架構。

如要進一步瞭解如何設定 TLS 終止和後端 TLS,請參閱「保護閘道」。

TLS 直通

使用 TLS 直通功能時,閘道會將加密的 TLS 流量直接傳送至後端工作負載,不會在負載平衡器解密酬載。

設定閘道監聽器時,如果將 tls.mode 欄位設為 Passthrough,並將 protocol 欄位設為 TLS,閘道就不會終止 TLS 或保留 SSL 憑證。相反地,負載平衡器只會檢查 TLS ClientHello 握手中未加密的伺服器名稱指示 (SNI) 主機名稱,並使用 TLSRoute 資源將原始加密 TCP 串流轉送至後端 Pod。

TLS 直通的主要特性如下:

  • 端對端加密:流量從用戶端傳輸至後端 Pod 的過程中,會保持加密狀態。後端應用程式會管理憑證、終止 TLS,並解密酬載。
  • 閘道不需要管理憑證:您不必將憑證或 Kubernetes Secret 附加至閘道監聽器。
  • 第 4 層 Proxy:負載平衡器會轉送加密的 TCP 串流,並使用 TLSRoute 資源,根據未加密的 TLS 握手中繼資料 (例如 SNI 主機名稱) 轉送流量。
  • 安全性權衡:TLS 傳遞適用於無法與雲端基礎架構共用私密金鑰的法規遵循要求,或非 HTTP TLS 通訊協定。不過,這會排除第 7 層負載平衡器檢查和邊緣安全性服務,例如 Google Cloud Armor WAF 規則。

下圖顯示使用 TLS 直通時,閘道如何加密及轉送從用戶端到後端 Pod 的流量。用戶端會將含有 store.example.com SNI 主機名稱的加密 TLS 要求傳送至閘道,閘道則會將加密串流直接轉送至目標 Store Pod,而不進行解密:

從用戶端到後端 Pod 的端對端加密 TLS 直通

如要進一步瞭解如何使用 TLSRoute 部署 TLS 直通閘道,請參閱「部署 TLS 直通閘道」。

優點

您可以使用 Gateway API,以多種方式保護應用程式,為與閘道互動的不同角色提供彈性。

誰擁有網域和 TLS 設定?

Gateway API 模型導入了兩個使用或部署閘道的角色:

  • 平台管理員:叢集運作人員是整個叢集的管理員。他們會管理政策、網路存取權和應用程式權限。
  • 應用程式開發人員:應用程式開發人員定義應用程式和服務設定。

下圖顯示閘道和 HTTPRoute 資源中的欄位,這些欄位會影響兩個應用程式 store-v1 和 store-v2 的 TLS 和網域擁有權。

在圖表中,叢集運算子控制:

  • 應用程式開發人員可在各命名空間中,為應用程式使用哪些網域。
  • 終止不同網域的特定憑證。
  • 由閘道擁有者提供的憑證。
  • HTTPRoute 擁有者是否可以指定自己的主機名稱來產生憑證。

如果閘道定義允許,應用程式開發人員可以控制產生憑證的主機名稱。

這種作業任務區隔方式可讓應用程式開發人員部署及管理自己的 HTTPRoute,以便進行更分散的控管,並讓平台管理員部署及管理閘道,以便集中控管 TLS。

閘道憑證管理

您可以使用下列任一方法保護閘道:

如果您使用 Kubernetes Secret 或 Compute Engine API 的 SslCertificate 資源,最多可以將 15 個憑證附加至單一閘道。

如果申請提高配額,Certificate Manager 可讓您為每個負載平衡器附加最多 10,000,000 個憑證。

如要進一步瞭解 Google Cloud SSL 憑證,請參閱「SSL 憑證總覽」。

Kubernetes Secret

Gateway API 規格支援 Kubernetes Secret,可用於儲存憑證並附加至閘道。您可以使用 Gateway.spec.tls.certificateRef 欄位,將一或多個 Kubernetes Secret 與閘道建立關聯。

透過 Kubernetes Secret 保護的閘道資源須符合下列規定:

  • 您必須將閘道監聽器 port 和 protocol 設為 443 和 HTTPS。
  • 您必須將 listener.tls.mode 欄位設為 Terminate。
  • 您必須在 listeners.tls 區塊中參照 TLS 憑證。

使用 Kubernetes Secret 保護的閘道資源有下列限制:

  • 只有 HTTPS 監聽器會使用指定的 Secret 終止流量,不過您可以指定多個監聽器,並混合使用 HTTP 和 HTTPS。
  • 如果同一個閘道有多個使用 HTTPS 的監聽器,每個監聽器都必須有專屬主機名稱。
  • 您只能省略單一主機名稱,或為每個通訊埠和通訊協定組合指派 *。
  • 每個閘道只能指派一個預設憑證。

如要瞭解如何使用 Kubernetes Secret 保護閘道,請參閱「使用 Kubernetes Secret 保護閘道」。

SSL 憑證

SSL 憑證會儲存憑證,並將憑證傳送至負載平衡器。SSL 憑證可以自行管理,也可以由 Google 代管。

  • 自行管理的 SSL 憑證是您自行取得、佈建及更新的憑證。
  • Google 代管的 SSL 憑證是 Google Cloud 自動取得、管理及更新的憑證。

如要進一步瞭解這兩種憑證的差異,請參閱「SSL 憑證總覽」。

SSL 憑證的範圍和位置必須與使用該憑證的閘道範圍和位置相符。舉例來說,全域 SSL 憑證無法用於區域性閘道。

下表列出各 GatewayClass 的 SSL 憑證範圍和位置規定:

GatewayClass SSL 憑證範圍 SSL 憑證位置
gke-l7-global-external-managed 全域 SSL 憑證 全球
gke-l7-global-external-managed-mc
gke-l7-gxlb
gke-l7-gxlb-mc
gke-l7-regional-external-managed 區域性 SSL 憑證 必須與閘道位於相同區域
gke-l7-regional-external-managed-mc
gke-l7-cross-regional-internal-managed-mc
gke-l7-rilb
gke-l7-rilb-mc

Google 代管的 SSL 憑證與區域性閘道不相容。如要保護區域閘道,請改用 Certificate Manager。

如要瞭解如何使用 SSL 憑證保護閘道,請參閱「使用 SSL 憑證保護閘道」。

Certificate Manager

Certificate Manager 是集中管理 TLS 憑證的位置。

使用 Certificate Manager 保護閘道時,您可以執行下列操作:

  • 直接從您在 Certificate Manager 中建立的閘道參照 CertificateMap。
  • 管理自己的憑證。
  • 縮短憑證傳播時間。
  • 使用 Cloud Monitoring 監控過期憑證和憑證傳播。

Certificate Manager 支援自行管理和 Google 代管的 SSL 憑證。如要瞭解如何使用 Certificate Manager 保護閘道,請參閱「使用 Certificate Manager 保護閘道」。

GatewayClass TLS 支援

下表說明 GKE 針對各個 GatewayClass 支援的 TLS 終止方法:

GatewayClass gke-l7-global-external-managed
gke-l7-global-external-managed-mc
gke-l7-gxlb
gke-l7-gxlb-mc
gke-l7-regional-external-managed
gke-l7-regional-external-managed-mc
gke-l7-rilb
gke-l7-rilb-mc
gke-l7-cross-regional-internal-managed-mc
用戶端對閘道 TLS 支援 支援
閘道至後端 TLS 支援 支援
Google Cloud 憑證資源 全域 SSL 憑證
CertificateMap
區域性 SSL 憑證
TLS 直通 (TLSRoute) 不支援 支援 支援
使用 Kubernetes Secret 自行管理憑證 支援 支援 不支援
自行管理的 Compute Engine SSL 憑證 支援 支援 不支援
Google 代管的 Compute Engine SSL 憑證 支援 不支援 不支援
使用 Certificate Manager 自行管理 SSL 憑證 支援 支援 支援
使用 Certificate Manager 取得 Google 代管的 SSL 憑證 支援 支援 支援

授權和存取控管

GKE Gateway 支援使用 GCPAuthzPolicy 自訂資源,進行身分型存取控管。平台管理員可透過這項資源,為南北向流量定義明確的 ALLOW 或 DENY 規則。

此外,閘道可使用 GCPAuthzExtension 資源與 Service Extensions 整合。這項資源可讓閘道對外部、自訂或第三方授權引擎 (例如 Identity-Aware Proxy) 進行內嵌呼叫,即時評估要求。

後續步驟