使用自動 Envoy 部署功能設定 Compute Engine VM 的選項

本指南提供自動部署 Envoy 的其他選項和工作相關資訊。

其他執行個體範本建立選項

為自動部署 Envoy 代理程式建立執行個體範本時,您可以使用下列參數定義部署作業的某些層面,以及代理程式的行為。

參數 值和說明 必要或選填
--service-proxy enabled
控管是否要在 VM 上安裝及設定服務 Proxy 和代理程式。
如要自動部署及設定服務 Proxy,則必須提供這項資訊。如果省略這項設定,系統就不會安裝或設定服務 Proxy。
--service-proxy:serving-ports 以半形分號分隔的通訊埠清單。
應用程式/工作負載提供服務的通訊埠。服務 Proxy 會攔截傳入流量,然後轉送至 localhost 上指定的服務通訊埠。
選用
如果省略這個標記,服務 Proxy 只會處理工作負載的傳出流量。服務 Proxy 不會處理傳入流量。
--service-proxy:proxy-port 單一通訊埠。
服務 Proxy 監聽的通訊埠。VM 會攔截流量,並將流量重新導向至這個通訊埠,交由服務 Proxy 處理。
選填。
如果省略這個旗標,值預設為 15001
--service-proxy:network 有效虛擬私有雲網路的名稱。
服務 Proxy 控制層使用的虛擬私有雲網路,可為服務 Proxy 產生動態設定。 Google Cloud
如果 VM 位於多個網路上,則為必填;否則為選填。
如果省略這個標記,系統會使用建立 VM 執行個體範本時,透過 --network 參數指定的值。
--service-proxy:tracing ON 或 OFF
啟用服務 Proxy,產生分散式追蹤資訊。如果設為 ON,服務 Proxy 的控制層會產生設定,啟用以要求 ID 為準的追蹤功能。
詳情請參閱 Envoy Proxy 的 generate_request_id說明文件。
選用。
如果省略這個標記,系統就不會啟用追蹤功能。
--service-proxy:access-log 控制層傳送至服務 Proxy 的存取記錄檔案路徑。所有傳入和傳出的要求都會記錄在這個檔案中。
詳情請參閱 Envoy 代理伺服器的檔案存取記錄說明文件。
選用。沒有預設值。如未指定檔案路徑,系統不會建立記錄。
--service-proxy:intercept-all-outbound-traffic (預先發布版) 服務 Proxy 會攔截所有輸出流量,然後重新導向至外部主機。使用 gcloud beta 搭配這個選項。 選填。
--service-proxy:exclude-outbound-ip-ranges (預先發布版) 以半形分號 (;) 分隔的 IP 位址或 CIDR 範圍清單 (以半形引號 " 括住),這些位址或範圍應排除在重新導向範圍之外。只有在設定 intercept-all-outbound-traffic 旗標時才適用。使用 gcloud beta 搭配這個選項。

舉例來說:

exclude-outbound-ip-ranges="8.8.8.8;129.168.10.0/24"
選填。
--service-proxy:exclude-outbound-port-ranges (預先發布版) 以分號 (;) 分隔的通訊埠或通訊埠範圍清單 (以半形引號 (") 括住),這些通訊埠或通訊埠範圍應排除在重新導向之外。只有在設定 intercept-all-outbound-traffic 旗標時才適用。使用 gcloud beta 搭配這個選項。

舉例來說:

exclude-outbound-port-ranges="81;8080-8090"
選填。
--service-proxy:scope (預先發布版) scope 選項會定義 Gateway 資源的邏輯設定邊界。 VM 啟動時,服務 Proxy 會與 Cloud Service Mesh 通訊,擷取附加至閘道的路徑 (具有這個範圍名稱) 對應的轉送資訊。如果指定 scope,系統會忽略網路值。您無法同時指定 scope 和 mesh 值。使用 gcloud beta 搭配這個選項。 選填。
--service-proxy:mesh (預先發布版) mesh 選項會定義 Mesh 資源的邏輯設定邊界。 VM 啟動時,服務 Proxy 會與 Cloud Service Mesh 通訊,擷取附加至具有這個網格名稱的 Mesh 的路徑所對應的轉送資訊。如果指定 mesh,系統會忽略網路值。您無法同時指定 scope 和 mesh 值。透過這個選項使用 gcloud beta 選填。
--service-proxy:project-number (預先發布版) project-number 選項會指定要建立 Mesh 和 Gateway 資源的專案。如未指定,系統會使用執行個體所在的專案。這項功能僅適用於新的服務路徑 API。 選填。
--service-proxy:use-regional-control-plane 允許 VM 連線至 Cloud Service Mesh 的區域端點。 選填。
--service-proxy:envoy-bootstrap 這個參數會採用 JSON 檔案的 GCS 路徑,做為自訂 Envoy 啟動程序設定。例如 gs://gcs-bucket/bootstrap.json。 選填。
--service-proxy-labels 格式為 key=value 的鍵/值組合。
可套用至服務 Proxy 的標籤。這些都會反映在 Envoy 代理程式的啟動中繼資料中。標籤可以是您想設為 Proxy 中繼資料的任何 key=value 配對 (例如用於設定篩選)。舉例來說,您可能會使用 app=review 或 version=canary 標記,做為應用程式和版本標籤。你也可以同時使用這兩項功能。
選填。

舉例來說,下列 gcloud 指令會建立名為 proxy-it 的執行個體範本。從這個範本建立的執行個體會安裝 Envoy Proxy 和服務 Proxy 代理程式。

gcloud compute instance-templates create proxy-it \
    --service-proxy enabled,use-regional-control-plane

在下列範例中,執行個體範本稱為 proxy-it,系統會安裝 Envoy Proxy 和服務 Proxy 代理程式、設定服務通訊埠和 Proxy 通訊埠、啟用追蹤功能,並定義標籤。

gcloud compute instance-templates create proxy-it \
  --service-proxy enabled,serving-ports=8080,proxy-port=15001,tracing=ON \
  --service-proxy-labels version=canary

下圖說明指定服務連接埠為 8080 時的流量。傳入通訊埠 8080 的 TCP 連線會遭到 iptables 攔截,並重新導向至 Envoy Proxy,然後傳遞至 VM 上監聽 TCP 通訊埠 8080 的應用程式。此外:

  • 所有連至 Cloud Service Mesh 中設定的服務 VIP 的輸出連線,都會遭到 iptables 攔截,而 iptables 會設定 netfilter。Netfilter 可確保系統攔截網路堆疊中相應的流量,並將其重新導向至 Envoy Proxy。接著,系統會根據您設定 Cloud Service Mesh 的方式,對流量進行負載平衡。
  • 所有其他連入連線都不會遭到 iptables 攔截,而是直接傳遞至 VM 上的服務。
  • 所有外部端點的連線都會直接傳遞至外部 IP 位址,不會遭到攔截。
  • 所有 UDP 流量都會直接傳送至目的地,不會遭到 iptables 攔截。

如下圖所示。

使用 Cloud Service Mesh 分散流量 (按一下即可放大)
使用 Cloud Service Mesh 分散流量 (按一下可放大)

圖表中的流量如下:

  1. 目的地通訊埠為 80 的連入流量不會遭到攔截,而是直接轉送至監聽該通訊埠的服務。
  2. 攔截並重新導向至 Envoy 監聽器通訊埠的目標通訊埠 8080 傳入流量。
  3. Envoy 會將流量從 (2) 轉送至監聽 localhost 通訊埠 8080 的服務 2。
  4. 傳送至 Cloud Service Mesh 轉送規則 VIP 和通訊埠的出站流量,會遭到攔截並重新導向至 Envoy 接聽埠。
  5. Envoy 會將流量從 (4) 轉送至目的地 Cloud Service Mesh 後端服務的後端端點。
  6. 傳送至非 Cloud Service Mesh VIP 和通訊埠的輸出流量,不會遭到攔截,而是直接轉送至外部服務。

使用標籤

如要指定與 Cloud Service Mesh 中繼資料篩選條件搭配使用的標籤,或啟用 Envoy 代理伺服器的存取記錄,請使用 --service-proxy-labels 或 --service-proxy access-log 參數。

例如:

gcloud compute instance-templates create td-vm-template-auto \
   --service-proxy enabled,access-log=/var/log/envoy/access.log,network=default \
   --service-proxy-labels myapp=review,version=canary

Envoy Proxy 可以攔截 VM 上服務的健康狀態檢查通訊埠。如果這麼做,健康狀態檢查探測器會回報應用程式和 Envoy 代理程式的狀態。如果 Envoy Proxy 未正確執行,流量就不會導向至 VM。例如:

gcloud compute instance-templates create td-vm-template-auto \
  --service-proxy=enabled,serving-ports="80;8080"

使用代管執行個體群組更新程序

如果您使用自動程序設定 Envoy 代理,可以透過代管執行個體群組更新程序更新代管執行個體群組。請按照這個程序執行下列操作:

  • 將服務 Proxy 元件新增至現有的代管執行個體群組,並註冊至 Cloud Service Mesh 網路。
  • 更新 VM 上的服務 Proxy 元件。

執行滾動式更新前,請先完成下列步驟。

  1. 將後端服務的連線排除時間設為至少 30 秒。
  2. 呼叫更新程式時,請使用 --min-ready 參數,並將值設為 3 分鐘以上。--min-ready 參數會讓代管執行個體群組在更新 VM 後等待一段時間,再繼續更新下一個 VM。如果沒有這項設定,新建立的 VM 就沒有足夠時間完整啟動 Envoy 和服務 Proxy 代理程式,更新程序也會進行得太快。

如要對代管執行個體群組執行滾動式更新,請按照下列步驟操作。

  1. 如上所述,建立新的執行個體範本,並提供服務 Proxy 資訊。如果原始版本的執行個體範本包含服務 Proxy 資訊,且您的目標是更新至最新穩定版的 Proxy 軟體,則可使用該範本進行更新。
  2. 對代管執行個體群組執行滾動式更新。請確認您已將 REPLACE 設為 Updater 必須執行的最低動作。執行個體群組會安裝最新版 Proxy 軟體,並按照執行個體範本中的指定方式設定。

您也可以使用更新程序,從代管執行個體群組中移除 Service Proxy 元件:

  1. 建立新的執行個體範本,但不指定 --service-proxy 旗標。

  2. 使用代管執行個體群組更新程序執行滾動式更新。

這會從 VM 移除 Envoy Proxy。如果該代管執行個體群組是唯一連接至後端服務的 MIG,您可能需要移除設定 Cloud Service Mesh 時建立的 Cloud Service Mesh 設定。