Cloud Run 最新支援 Sidecar 部署,可監控 Agents 與 Proxies

Cloud Run 是一個全託管的容器執行時環境 (runtime),可自動將容器中的程式碼從零擴展到處理所有傳入請求所需的實例數量。以前,Cloud Run 服務中的每個實例都只在一個容器上運行。現在 Google 推出了 Cloud Run sidecars,讓您可以啟動獨立的 sidecar 容器,這些容器將與主容器一同處理 Web 發送的請求。

以下是幾個 Cloud Run sidecar 的應用場景: 

  • 監控、日誌和追蹤應用程式的運形狀況
  • 在應用程式容器前使用 Nginx、Envoy 或 Apache2 作為代理伺服器
  • 進行身份驗證和授權(例如 Open Policy Agent)
  • 執行外部連線代理,例如 Alloy DB Auth Proxy

 

(圖一):Cloud Run 運作示意圖
icon/enlarge

同個實例中的所有容器共享相同的網路命名空間 (namespace),可以透過 localhost:port(容器正在監聽的端口)進行通訊,也可以透過共享 volumes 來共享檔案。 

Cloud Run sidecars 開啟了許多新的模式與使用案例,例如自定義監控、日誌記錄、網路和安全:

進行應用程式監控、日誌和追蹤的 Sidecars

Sidecar 是與主容器一起運行的附加容器。您現在可以使用像 OpenTelemetry 的自定義代理來監控您的 Cloud Run 服務,將日誌、指標和追蹤資料導出到您選擇的後端伺服器。以下圖為例,使用者可以部署 Cloud Run 服務與 OpenTelemetry sidecar,藉此獲取自定義日誌、指標和追蹤資料。

(圖二):使用自定義代理來監控您的 Cloud Run 服務
icon/enlarge

代理伺服器

您還可以在主容器前面執行一個容器來代理請求。以下圖為例,您可以使用 DockerHub 上的官方 Nginx 鏡像。這樣的代理在用戶端與伺服器端之間建立一個額外的抽象層,透過將請求轉導到適當的端點,達成更有效率的流量。

(圖三):使用 DockerHub 上的官方 Nginx 鏡像在用戶端與伺服器端之間建立一個額外的抽象層
icon/enlarge

下面為包含 nginx sidecar 的 service.yaml 範例:

1apiVersion: serving.knative.dev/v1 2kind: Service 3metadata: 4 name: nginx-example 5 annotations: 6 run.googleapis.com/launch-stage: BETA 7spec: 8 template: 9 metadata: 10 annotations: 11 run.googleapis.com/container-dependencies: "{hello: [nginx]}" 12 spec: 13 containers: 14 - image: nginx 15 name: nginx 16 ports: 17 - name: http1 18 containerPort: 8080 19 resources: 20 limits: 21 cpu: 500m 22 memory: 256Mi 23 volumeMounts: 24 - name: nginx-conf-secret 25 readOnly: true 26 mountPath: /etc/nginx/conf.d/ 27 - image: us-docker.pkg.dev/cloudrun/container/hello 28 name: hello 29 env: 30 - name: PORT 31 value: '8888' 32 resources: 33 limits: 34 cpu: 1000m 35 memory: 512Mi 36 volumes: 37 - name: nginx-conf-secret 38 secret: 39 secretName: nginx_config 40 items: 41 - key: latest 42 path: default.conf

下面為支援以 gzip 壓縮的 nginx 配置檔範例,存放在 Secret Manager 中名為 “nginx_config” 的 secret 中:

1server { 2 listen 8080; 3 server_name _; 4 gzip on; 5 6 location / { 7 proxy_pass http://127.0.0.1:8888; 8 } 9}

在上面的範例中,您部署了兩個容器:

  1. 為網頁提供服務的 hello 容器
  2. 發送代理請求到 hello 容器的 nginx 容器。

為了取得 nginx 配置檔,我們將其放在 Secret Manager 中,並掛載在我們的 nginx 容器中的指定位置。您還可以使用 annotations run.googleapis.com/container-dependencies 設定容器的順序 ,讓 nginx 容器在 hello 容器之前啟動,以確保請求必定會經過 nginx 代理伺服器。

網路和安全

您可以運行用於複雜網路情境的 sidecar,例如透過 Envoy Proxy 進行複雜的流量路由和篩選,或者運行安全加固 sidecar,透過持續檢測和預防來阻斷流量以及避免遭受攻擊。

(圖四):透過 Envoy Proxy 進行複雜的流量路由和篩選,或者運行安全加固 sidecar
icon/enlarge

Nasdaq 透過這種模式以及 sidecars 改變其資料擷取工具:

「我們遇到了一個挑戰:達到非分塊 (non-chunked) 的 HTTP1 請求上限 32MB。為了解決這個問題,我們希望能接受 HTTP2 請求,但這涉及到大量的程式碼重構。為了盡量避免修改前端和後端程式碼,我們決定利用 Envoy 將傳入的 HTTP2 請求重寫為 HTTP1 請求,並將它們直接發送到我們的後端服務。Cloud Run 的 sidecar 功能幫助我們達成這個目標,讓我們能夠在無需修改程式碼的情況下,使用 Envoy sidecar 將請求負載大於 32MB 的 HTTP2 請求直接重定向到 HTTP1 的應用程式,從而為我們節省了大量的工程成本。」 - Nasdaq 軟體工程總監 Philippe Trembley

資料庫連接代理伺服器

您可以使用 sidecars 運行您的應用程式的資料庫用戶端代理,例如 CloudSQL 代理或 AlloyDB 代理等,以便透過更安全的方法、更簡單的授權和基於 IAM 的身份驗證來連接這些附屬的資料庫服務。

(圖五):您可以使用 sidecars 運行您的應用程式的資料庫用戶端代理
icon/enlarge

現在就開始使用

要為主要的容器加入代理伺服器或 sidecars,只需使用命令行或 Cloud Console 編輯 Cloud Run 服務的 YAML 檔即可,您可以在官方文件中閱讀更多內容。此外,您還可以創建在多個容器之間共享的內存 volumes,讓容器之間可以共享數據。

Cloud Run 讓您的服務可以非常輕鬆地運行。透過 sidecars 與代理伺服器,Cloud Run 現在提供了實現更多功能所需的可擴展性。您可以在官方文件找到為您的 Cloud Run 服務配置 sidecars 的教學。

原文章連結:https://cloud.google.com/blog/products/serverless/cloud-run-now-supports-multi-container-deployments

撰文者:Cindy Chen / 針對客戶的需求設計雲端服務架構



訂閱 CloudMile 電子報

所有 CloudMile 最新消息、產品動態、活動資訊和特別優惠,立即掌握。