使用自動 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 控制平面使用的 Google Cloud 虛擬私有雲網路,可為服務 Proxy 產生動態設定。 |
如果 VM 位於多個網路中,則必須使用此標記;否則,這是選用的。 如果您略過這個標記,系統會使用在建立 VM 執行個體範本時,使用 --network 參數指定的值。 |
--service-proxy:tracing |
ON 或 OFF 可讓服務 Proxy 產生分散追蹤資訊。如果設為 ON ,服務 Proxy 的控制層會產生設定,啟用以要求 ID 為基礎的追蹤功能。詳情請參閱 Envoy 代理程式的 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 範圍清單,並以引號 (「") 指定,這些 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 時,系統會忽略 network 值。您無法同時指定 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-labels |
鍵/值組合,格式為 key=value 。您可以套用至服務 Proxy 的標籤。這些資訊會反映在 Envoy 代理程式的啟動中繼資料中。標籤可以是您要設為 Proxy 中繼資料的任何 key=value 組合 (例如用於搭配 config 篩選功能)。您可以將這些標記用於應用程式和版本標籤,例如 app=review 或 version=canary 。您也可以同時使用這兩種運算子。 |
選填。 |
舉例來說,下列 gcloud
指令會建立名為 proxy-it
的執行個體範本。透過這個範本建立的執行個體已安裝 Envoy 代理程式和服務代理程式代理程式。
gcloud compute instance-templates create proxy-it \ --service-proxy enabled
在下列範例中,執行個體範本稱為 proxy-it
,Envoy 代理程式和服務代理程式代理程式已安裝,服務通訊埠和代理程式通訊埠已設定,追蹤已啟用,且已定義標籤。
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
的傳入流量,不會遭到攔截,也不會直接轉送至在該通訊埠上監聽的服務。 - 目的地通訊埠為
8080
的傳入流量,已遭到攔截並重新導向至 Envoy 事件監聽器通訊埠。 - Envoy 會將流量從 (2) 轉送至監聽本機端通訊埠
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 代理程式無法正常執行,系統就不會將流量導向 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 軟體,並按照執行個體範本中的指定方式進行設定。
您也可以使用更新程序,從受管理的執行個體群組中移除服務 Proxy 元件:
建立新的執行個體範本,但不指定
--service-proxy
旗標。使用代管執行個體群組更新程序執行滾動式更新。
這麼做會從 VM 中移除 Envoy proxy。如果該代管執行個體群組是後端服務唯一連結的 MIG,建議您移除設定 Cloud Service Mesh 時建立的 Cloud Service Mesh 設定。