使用自動 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 ONOFF
可讓服務 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 值。您無法同時指定 scopemesh 值。請搭配使用 gcloud beta 和這個選項。 選填。
--service-proxy:mesh (預先發布版) mesh 選項會為 Mesh 資源定義邏輯設定邊界。當 VM 啟動時,服務 Proxy 會與 Cloud Service Mesh 通訊,擷取與此網格名稱的 Mesh 相關聯的路由。指定 mesh 時,系統會忽略網路值。您無法同時指定 scopemesh 值。使用 gcloud beta 搭配這個選項 選填。
--service-proxy:project-number (預先發布版) project-number 選項會指定建立 MeshGateway 資源的專案。如果未指定,系統會使用執行個體所在的專案。這項功能僅適用於新的服務路由 API。 選填。
--service-proxy-labels 鍵/值組合,格式為 key=value
您可以套用至服務 Proxy 的標籤。這些資訊會反映在 Envoy 代理程式的啟動中繼資料中。標籤可以是您要設為 Proxy 中繼資料的任何 key=value 組合 (例如用於搭配 config 篩選功能)。您可以將這些標記用於應用程式和版本標籤,例如 app=reviewversion=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 攔截。

如以下圖表所示。

使用 Cloud Service Mesh 分配流量 (按一下可放大)
使用 Cloud Service Mesh 進行流量分配 (按一下可放大)

圖中的流量如下:

  1. 目的地通訊埠為 80 的傳入流量,不會遭到攔截,也不會直接轉送至在該通訊埠上監聽的服務。
  2. 目的地通訊埠為 8080 的傳入流量,已遭到攔截並重新導向至 Envoy 事件監聽器通訊埠。
  3. Envoy 會將流量從 (2) 轉送至監聽本機端通訊埠 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 代理程式無法正常執行,系統就不會將流量導向 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 軟體,並按照執行個體範本中的指定方式進行設定。

您也可以使用更新程序,從受管理的執行個體群組中移除服務 Proxy 元件:

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

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

這麼做會從 VM 中移除 Envoy proxy。如果該代管執行個體群組是後端服務唯一連結的 MIG,建議您移除設定 Cloud Service Mesh 時建立的 Cloud Service Mesh 設定。