使用自動 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 攔截。
如下圖所示。
圖表中的流量如下:
- 目的地通訊埠為
80的連入流量不會遭到攔截,而是直接轉送至監聽該通訊埠的服務。 - 攔截並重新導向至 Envoy 監聽器通訊埠的目標通訊埠
8080傳入流量。 - Envoy 會將流量從 (2) 轉送至監聽 localhost 通訊埠
8080的服務 2。 - 傳送至 Cloud Service Mesh 轉送規則 VIP 和通訊埠的出站流量,會遭到攔截並重新導向至 Envoy 接聽埠。
- Envoy 會將流量從 (4) 轉送至目的地 Cloud Service Mesh 後端服務的後端端點。
- 傳送至非 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 元件。
執行滾動式更新前,請先完成下列步驟。
- 將後端服務的連線排除時間設為至少 30 秒。
- 呼叫更新程式時,請使用
--min-ready參數,並將值設為 3 分鐘以上。--min-ready參數會讓代管執行個體群組在更新 VM 後等待一段時間,再繼續更新下一個 VM。如果沒有這項設定,新建立的 VM 就沒有足夠時間完整啟動 Envoy 和服務 Proxy 代理程式,更新程序也會進行得太快。
如要對代管執行個體群組執行滾動式更新,請按照下列步驟操作。
- 如上所述,建立新的執行個體範本,並提供服務 Proxy 資訊。如果原始版本的執行個體範本包含服務 Proxy 資訊,且您的目標是更新至最新穩定版的 Proxy 軟體,則可使用該範本進行更新。
- 對代管執行個體群組執行滾動式更新。請確認您已將
REPLACE設為 Updater 必須執行的最低動作。執行個體群組會安裝最新版 Proxy 軟體,並按照執行個體範本中的指定方式設定。
您也可以使用更新程序,從代管執行個體群組中移除 Service Proxy 元件:
建立新的執行個體範本,但不指定
--service-proxy旗標。使用代管執行個體群組更新程序執行滾動式更新。
這會從 VM 移除 Envoy Proxy。如果該代管執行個體群組是唯一連接至後端服務的 MIG,您可能需要移除設定 Cloud Service Mesh 時建立的 Cloud Service Mesh 設定。