企業應用程式藍圖會透過一系列自動化系統和管道部署。每個管道都會部署藍圖的特定面向。管道提供可控管、可稽核且可重複的機制,用於建構藍圖。下圖顯示各種管道、存放區和使用者類型的互動關係。
此藍圖會使用下列管道:
- 基礎架構管道 (企業基礎架構藍圖的一部分) 會部署應用程式工廠、多租戶基礎架構管道和車隊範圍管道。
- 多租戶基礎架構管道會部署 GKE 叢集,以及企業應用程式藍圖所依賴的其他代管服務。
- 機群範圍管道會設定機群範圍、命名空間,以及 RBAC 角色和繫結。
- 應用程式工廠提供一種機制,可透過範本程序部署新的應用程式管道。
- 應用程式 CI/CD 管道提供 CI/CD 管道,可將服務部署至 GKE 叢集。
- Config Sync 會部署及維護其他 Kubernetes 設定,包括 Policy Controller 限制。
存放區、存放區貢獻者和存放區變更核准者
藍圖管道會透過 Git 存放區的變更觸發。下表說明整個藍圖中使用的存放區、為存放區提供內容的使用者、核准存放區變更的使用者、使用存放區的管道,以及存放區內容的說明。
存放區 | 存放區貢獻者 | 存放區變更核准者 | pipeline | 說明 |
---|---|---|---|---|
|
開發人員平台開發人員 |
開發人員平台管理員 |
基礎架構管道 |
包含部署多租戶基礎架構管道、應用程式和車隊管道的程式碼的存放區 |
|
開發人員平台開發人員 |
開發人員平台管理員 |
多租戶基礎架構 |
開發人員平台團隊在建立基礎架構時使用的 Terraform 模組 |
|
開發人員平台開發人員 |
開發人員平台管理員 |
機群範圍 |
定義機群中機群團隊範圍和命名空間的存放區 |
|
開發人員平台開發人員 |
開發人員平台管理員 |
應用程式工廠 |
定義應用程式存放區並參照 |
|
應用程式開發人員 |
應用程式運算子 |
應用程式工廠 |
首次建立存放區時,放置在 |
|
開發人員平台開發人員 |
開發人員平台管理員 |
應用程式工廠 多租戶基礎架構 |
定義應用程式和基礎架構的 Terraform 模組 |
|
應用程式開發人員 |
應用程式運算子 |
應用程式 CI/CD |
部署至 GKE 叢集的應用程式程式碼 |
|
開發人員平台開發人員 |
開發人員平台管理員 |
Config Sync |
GKE 叢集用於維護其設定的政策 |
自動化管道可協助您在部署程序中建立安全性、可稽核性、可追溯性、可重複性、可控性和法規遵循性。使用具有不同權限的不同系統,並將不同人員歸入不同的作業群組,即可建立責任分工,並遵循最小權限原則。
基礎架構管道
基礎架構基礎結構管道已在企業基礎架構藍圖中說明,並用於進一步部署資源的一般進入點。下表說明管道建立的元件。
元件 | 說明 |
---|---|
建立由開發人員平台的所有租戶使用的共用基礎架構。 |
|
建立命名空間和 RBAC 角色繫結。 |
|
建立用於部署服務的應用程式 CI/CD 管道。 |
多租戶基礎架構管道
多租戶基礎架構管道會部署車隊、GKE 叢集和相關共用資源。下圖顯示多租戶基礎架構管道的元件。
下表說明多租戶基礎架構管道建構的元件。
元件 | 說明 |
---|---|
GKE 叢集 |
為容器化應用程式的服務提供代管服務。 |
Policy Controller |
提供政策,協助確保 GKE 叢集和服務的正確設定。 |
Config Sync |
將 Policy Controller 政策套用至叢集,並維持政策的一致性。 |
為 GKE、AlloyDB for PostgreSQL 和 Secret Manager 建立以客戶管理的加密金鑰 (CMEK) 為基礎的加密金鑰。 |
|
Secret Manager 密鑰 |
為RSA 金鑰組提供機密儲存庫,用於透過 JSON Web Token (JWT) 驗證使用者。 |
Google Cloud Armor 安全性政策 |
提供 Google Cloud Armor 網頁應用程式防火牆使用的政策。 |
機群範圍管道
機群範圍管道負責在機群的 GKE 叢集中設定命名空間和 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 服務使用的身分。Workload Identity Federation for GKE 會定義用於存取Google Cloud 資源的 Google Cloud 服務帳戶。 |
|
允許外部流量進入服務。只有接收外部流量的部署作業才需要閘道。 |
|
針對接收外部流量的部署作業,設定 SSL、Google Cloud Armor、工作階段相依性和連線排除功能。GCPBackendPolicy 僅供接收外部流量的部署作業使用。 |
|
設定應用程式匯出的 Prometheus 指標收集作業。 |
持續整合
下圖為持續整合程序。
流程如下:
- 開發人員將應用程式程式碼提交至應用程式原始碼存放區。這項作業會觸發 Cloud Build 開始整合管道。
- Cloud Build 會建立容器映像檔,並推送容器映像檔至 Artifact Registry,以及建立映像檔摘要。
- Cloud Build 會為應用程式執行自動化測試。視應用程式語言而定,您可能會執行不同的測試套件。
- Cloud Build 會對容器映像檔執行下列掃描作業:
- 掃描結果成功後,Cloud Build 會核准映像檔,以便在管道中繼續執行。
- 二進位授權會為圖片簽署。二進位授權是 Google Cloud 上的一項服務,可透過政策、規則、附註、認證、認證者和簽署者,為容器型應用程式提供軟體供應鏈安全性。在部署時,二進位授權政策強制執行程序會在允許容器部署前,確保容器的來源。
- Cloud Build 會在 Cloud Deploy 中建立版本,以便開始部署程序。
如要查看版本的安全性資訊,請前往「安全性深入分析」面板。這些洞察資料包括使用「Artifact Analysis」偵測到的漏洞,以及 SLSA 指南所指的安全性保證等級。
持續部署
下圖為持續部署程序。
流程如下:
- 建構程序結束時,應用程式 CI/CD 管道會建立新的 Cloud Deploy 版本,逐步將新建的容器映像檔發布至各個環境。
- Cloud Deploy 會啟動推出作業,將版本推出至部署管道的首個環境,通常是開發環境。每個部署階段都已設定為需要手動核准。
- Cloud Deploy 管道會使用序列式部署,依序將映像檔部署至環境中的每個叢集。
- 在每個部署階段結束時,Cloud Deploy 會驗證已部署容器的功能。您可以在應用程式的 Skaffold 設定中設定這些步驟。
部署新應用程式
下圖顯示應用程式工廠和應用程式 CI/CD 管道如何協同運作,共同建立及部署新應用程式。
定義新應用程式的程序如下:
- 應用程式操作員會執行 Cloud Build 觸發事件,產生應用程式定義,藉此在其租用戶中定義新的應用程式。
- 觸發條件會在 Terraform 中為應用程式新增項目,並將變更提交至應用程式工廠存放區。
- 已提交的變更會觸發建立應用程式專屬的存放區和專案。
- Cloud Build 會完成下列工作:
- 建立兩個新的 Git 存放區,用於託管應用程式的原始碼和 IaC。
- 將網路政策的 Kubernetes 資訊清單和 GKE 的工作負載身分聯盟推送至設定管理存放區。
- 建立應用程式的 CI/CD 專案和 Cloud Build IaC 觸發條件。
- 應用程式的 Cloud Build IaC 觸發事件會在應用程式的 CI/CD 專案中建立應用程式 CI/CD 管道和 Artifact Registry 存放區。
- Config Sync 會將網路政策和 Workload Identity Federation for GKE 設定部署至多租戶 GKE 叢集。
- 機群範圍建立管道會為多租戶 GKE 叢集中的應用程式建立機群範圍和命名空間。
- 應用程式的 CI/CD 管道會執行應用程式至 GKE 叢集的初始部署作業。
- 應用程式團隊可以選擇使用 Cloud Build IaC 觸發事件,將專案和其他資源 (例如資料庫和其他受管理的服務) 部署至專屬的單一租用戶專案,每個環境各一個。
GKE Enterprise 設定和政策管理
在藍圖中,開發人員平台管理員會使用 Config Sync 在各個環境中建立叢集層級設定。Config Sync 會連線至 Git 存放區,做為叢集設定所選狀態的可靠來源。Config Sync 會持續監控叢集中設定的實際狀態,並套用更新來調和任何差異,確保系統遵循所選狀態,即使是手動變更也一樣。您可以使用存放區的分支策略,將設定套用至環境 (開發、非實際工作環境和實際工作環境)。
在這個藍圖中,Config Sync 會套用 Policy Controller 限制。這些設定會定義安全性和法規遵循控管機制,而這些機制是由開發人員平台管理員為貴機構定義。這個藍圖會依賴其他管道套用其他設定:應用程式 CI/CD 管道會套用應用程式專屬設定,而車隊範圍管道會建立命名空間和相關角色繫結。
後續步驟
- 請參閱 Cymbal Bank 應用程式架構 (本系列的下一篇文件)。