部署方法

Last reviewed 2024-12-13 UTC

企業應用程式藍圖會透過一系列自動化系統和管道部署。每個管道都會部署藍圖的特定面向。管道提供可控管、可稽核且可重複的機制,用於建構藍圖。下圖顯示各種管道、存放區和使用者類型的互動關係。

藍圖管道。

此藍圖會使用下列管道:

  • 基礎架構管道 (企業基礎架構藍圖的一部分) 會部署應用程式工廠、多租戶基礎架構管道和車隊範圍管道。
  • 多租戶基礎架構管道會部署 GKE 叢集,以及企業應用程式藍圖所依賴的其他代管服務。
  • 機群範圍管道會設定機群範圍、命名空間,以及 RBAC 角色和繫結。
  • 應用程式工廠提供一種機制,可透過範本程序部署新的應用程式管道。
  • 應用程式 CI/CD 管道提供 CI/CD 管道,可將服務部署至 GKE 叢集。
  • Config Sync 會部署及維護其他 Kubernetes 設定,包括 Policy Controller 限制。

存放區、存放區貢獻者和存放區變更核准者

藍圖管道會透過 Git 存放區的變更觸發。下表說明整個藍圖中使用的存放區、為存放區提供內容的使用者、核准存放區變更的使用者、使用存放區的管道,以及存放區內容的說明。

存放區 存放區貢獻者 存放區變更核准者 pipeline 說明

infra

開發人員平台開發人員

開發人員平台管理員

基礎架構管道

包含部署多租戶基礎架構管道、應用程式和車隊管道的程式碼的存放區

eab-infra

開發人員平台開發人員

開發人員平台管理員

多租戶基礎架構

開發人員平台團隊在建立基礎架構時使用的 Terraform 模組

fleet-scope

開發人員平台開發人員

開發人員平台管理員

機群範圍

定義機群中機群團隊範圍和命名空間的存放區

app-factory

開發人員平台開發人員

開發人員平台管理員

應用程式工廠

定義應用程式存放區並參照 terraform-modules 存放區中的模組的程式碼

app-template

應用程式開發人員

應用程式運算子

應用程式工廠

首次建立存放區時,放置在 app-code 存放區中的基礎程式碼

terraform-modules

開發人員平台開發人員

開發人員平台管理員

應用程式工廠

多租戶基礎架構

定義應用程式和基礎架構的 Terraform 模組

app-code

應用程式開發人員

應用程式運算子

應用程式 CI/CD

部署至 GKE 叢集的應用程式程式碼

config-policy

開發人員平台開發人員

開發人員平台管理員

Config Sync

GKE 叢集用於維護其設定的政策

自動化管道可協助您在部署程序中建立安全性、可稽核性、可追溯性、可重複性、可控性和法規遵循性。使用具有不同權限的不同系統,並將不同人員歸入不同的作業群組,即可建立責任分工,並遵循最小權限原則。

基礎架構管道

基礎架構基礎結構管道已在企業基礎架構藍圖中說明,並用於進一步部署資源的一般進入點。下表說明管道建立的元件。

元件 說明

多租戶基礎架構管道

建立由開發人員平台的所有租戶使用的共用基礎架構。

車輛管道

建立命名空間和 RBAC 角色繫結。

應用程式工廠

建立用於部署服務的應用程式 CI/CD 管道。

多租戶基礎架構管道

多租戶基礎架構管道會部署車隊、GKE 叢集和相關共用資源。下圖顯示多租戶基礎架構管道的元件。

基礎架構管道元件。

下表說明多租戶基礎架構管道建構的元件。

元件 說明

GKE 叢集

為容器化應用程式的服務提供代管服務。

Policy Controller

提供政策,協助確保 GKE 叢集和服務的正確設定。

Config Sync

將 Policy Controller 政策套用至叢集,並維持政策的一致性。

Cloud Key Management Service (Cloud KMS) 金鑰

為 GKE、AlloyDB for PostgreSQL 和 Secret Manager 建立以客戶管理的加密金鑰 (CMEK) 為基礎的加密金鑰。

Secret Manager 密鑰

RSA 金鑰組提供機密儲存庫,用於透過 JSON Web Token (JWT) 驗證使用者。

Google Cloud Armor 安全性政策

提供 Google Cloud Armor 網頁應用程式防火牆使用的政策。

機群範圍管道

機群範圍管道負責在機群的 GKE 叢集中設定命名空間和 RBAC 繫結。下表說明車隊範圍管道建構的元件。

元件 說明

命名空間

定義實體叢集中的邏輯叢集。

RBAC (角色和繫結)

定義 Kubernetes 服務帳戶在叢集層級或命名空間層級的授權。

應用程式工廠

應用程式工廠會由基礎架構管道部署,用於為每個新應用程式建立基礎架構。這個基礎架構包含一個 Google Cloud 專案,可保留應用程式 CI/CD 管道。

隨著工程團隊規模擴大,應用程式團隊可以使用應用程式工廠導入新的應用程式。透過新增個別應用程式 CI/CD 管道,並支援在多租戶架構中部署新應用程式的基礎架構,即可擴大規模以利成長。下圖顯示應用程式工廠。

應用程式工廠元件。

應用程式工廠包含下列元件:

  • 應用程式工廠存放區:用於儲存宣告式應用程式定義的 Git 存放區。
  • 建立應用程式的管道:需要 Cloud Build 完成下列作業的管道:
    • 建立宣告式應用程式定義,並儲存在應用程式目錄中。
    • 套用宣告式應用程式定義,建立應用程式資源。
  • 入門應用程式範本存放區:用於建立簡易應用程式的範本 (例如 Python、Golang 或 Java 微服務)。
  • 共用模組:使用標準做法建立的 Terraform 模組,可用於多種用途,包括應用程式新手上路和部署作業。

下表列出應用程式工廠為每個應用程式建立的元件。

元件 說明

應用程式原始碼存放區

包含用於建構及部署特定應用程式的原始碼和相關設定。

應用程式 CI/CD 管道

以 Cloud Build 為基礎的管道,用於連線至原始碼存放區,並提供用於部署應用程式服務的 CI/CD 管道。

應用程式 CI/CD 管道

應用程式 CI/CD 管道可讓您自動建構及部署以容器為基礎的應用程式。管道包含持續整合 (CI)持續部署 (CD) 步驟。管道架構以安全無虞的 CI/CD 藍圖為基礎。

應用程式 CI/CD 管道會在各環境中使用不可變動的容器映像檔。不可變更的容器映像檔有助於確保在所有環境中部署相同的映像檔,且不會在容器執行期間進行修改。如果必須更新應用程式的程式碼或套用修補程式,請建構新的映像檔,並重新部署。如要使用不可變動的容器映像檔,您必須將容器設定外部化,以便在執行期間讀取設定資訊。

為了透過私人網路路徑存取 GKE 叢集,並管理 kubeconfig 驗證,應用程式 CI/CD 管道會透過 Connect 閘道與 GKE 叢集互動。管道也會為 CI/CD 環境使用私人集區

每個應用程式原始碼存放區都包含 Kubernetes 設定。這些設定可讓應用程式成功在 GKE 上以 Kubernetes 服務的形式執行。下表說明應用程式 CI/CD 管道會套用的 Kubernetes 設定類型。

元件 說明

部署作業問題

定義一組可調整的 Pod (容器)。

服務

讓部署作業可透過叢集網路存取。

虛擬服務

將服務納入服務網格。

目的地規則

定義服務網格上的同級端如何連線至虛擬服務。在藍圖中用於設定東西向流量的地區負載平衡。

授權政策

設定服務網格中工作負載之間的存取權控管機制。

Kubernetes 服務帳戶

定義 Kubernetes 服務使用的身分。Workload Identity Federation for GKE 會定義用於存取Google Cloud 資源的 Google Cloud 服務帳戶。

閘道

允許外部流量進入服務。只有接收外部流量的部署作業才需要閘道。

GCPBackendPolicy

針對接收外部流量的部署作業,設定 SSL、Google Cloud Armor、工作階段相依性和連線排除功能。GCPBackendPolicy 僅供接收外部流量的部署作業使用。

PodMonitoring

設定應用程式匯出的 Prometheus 指標收集作業。

持續整合

下圖為持續整合程序。

藍圖持續整合程序。

流程如下:

  1. 開發人員將應用程式程式碼提交至應用程式原始碼存放區。這項作業會觸發 Cloud Build 開始整合管道。
  2. Cloud Build 會建立容器映像檔,並推送容器映像檔至 Artifact Registry,以及建立映像檔摘要
  3. Cloud Build 會為應用程式執行自動化測試。視應用程式語言而定,您可能會執行不同的測試套件。
  4. Cloud Build 會對容器映像檔執行下列掃描作業:
    1. Cloud Build 會使用容器結構測試架構分析容器。這個架構會執行指令測試、檔案存在性測試、檔案內容測試和中繼資料測試。
    2. Cloud Build 會使用安全漏洞掃描功能,根據 Google Cloud維護的安全漏洞資料庫,找出容器映像檔中的任何安全漏洞。
  5. 掃描結果成功後,Cloud Build 會核准映像檔,以便在管道中繼續執行。
  6. 二進位授權會為圖片簽署。二進位授權是 Google Cloud 上的一項服務,可透過政策規則附註認證認證者簽署者,為容器型應用程式提供軟體供應鏈安全性。在部署時,二進位授權政策強制執行程序會在允許容器部署前,確保容器的來源。
  7. Cloud Build 會在 Cloud Deploy 中建立版本,以便開始部署程序。

如要查看版本的安全性資訊,請前往「安全性深入分析」面板。這些洞察資料包括使用「Artifact Analysis」偵測到的漏洞,以及 SLSA 指南所指的安全性保證等級

持續部署

下圖為持續部署程序。

藍圖持續部署程序。

流程如下:

  1. 建構程序結束時,應用程式 CI/CD 管道會建立新的 Cloud Deploy 版本,逐步將新建的容器映像檔發布至各個環境。
  2. Cloud Deploy 會啟動推出作業,將版本推出至部署管道的首個環境,通常是開發環境。每個部署階段都已設定為需要手動核准。
  3. Cloud Deploy 管道會使用序列式部署,依序將映像檔部署至環境中的每個叢集。
  4. 在每個部署階段結束時,Cloud Deploy 會驗證已部署容器的功能。您可以在應用程式的 Skaffold 設定中設定這些步驟。

部署新應用程式

下圖顯示應用程式工廠和應用程式 CI/CD 管道如何協同運作,共同建立及部署新應用程式。

部署應用程式的程序。

定義新應用程式的程序如下:

  1. 應用程式操作員會執行 Cloud Build 觸發事件,產生應用程式定義,藉此在其租用戶中定義新的應用程式。
  2. 觸發條件會在 Terraform 中為應用程式新增項目,並將變更提交至應用程式工廠存放區。
  3. 已提交的變更會觸發建立應用程式專屬的存放區和專案。
  4. Cloud Build 會完成下列工作:
    1. 建立兩個新的 Git 存放區,用於託管應用程式的原始碼和 IaC。
    2. 將網路政策的 Kubernetes 資訊清單和 GKE 的工作負載身分聯盟推送至設定管理存放區。
    3. 建立應用程式的 CI/CD 專案和 Cloud Build IaC 觸發條件。
  5. 應用程式的 Cloud Build IaC 觸發事件會在應用程式的 CI/CD 專案中建立應用程式 CI/CD 管道和 Artifact Registry 存放區。
  6. Config Sync 會將網路政策和 Workload Identity Federation for GKE 設定部署至多租戶 GKE 叢集。
  7. 機群範圍建立管道會為多租戶 GKE 叢集中的應用程式建立機群範圍和命名空間。
  8. 應用程式的 CI/CD 管道會執行應用程式至 GKE 叢集的初始部署作業。
  9. 應用程式團隊可以選擇使用 Cloud Build IaC 觸發事件,將專案和其他資源 (例如資料庫和其他受管理的服務) 部署至專屬的單一租用戶專案,每個環境各一個。

GKE Enterprise 設定和政策管理

在藍圖中,開發人員平台管理員會使用 Config Sync 在各個環境中建立叢集層級設定。Config Sync 會連線至 Git 存放區,做為叢集設定所選狀態的可靠來源。Config Sync 會持續監控叢集中設定的實際狀態,並套用更新來調和任何差異,確保系統遵循所選狀態,即使是手動變更也一樣。您可以使用存放區的分支策略,將設定套用至環境 (開發、非實際工作環境和實際工作環境)。

在這個藍圖中,Config Sync 會套用 Policy Controller 限制。這些設定會定義安全性和法規遵循控管機制,而這些機制是由開發人員平台管理員為貴機構定義。這個藍圖會依賴其他管道套用其他設定:應用程式 CI/CD 管道會套用應用程式專屬設定,而車隊範圍管道會建立命名空間和相關角色繫結。

後續步驟