部署方法

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、PostgreSQL 適用的 AlloyDB 和 Secret Manager 的客戶管理加密金鑰 (CMEK),建立加密金鑰。

Secret Manager 密鑰

提供 RSA 金鑰配對的密碼存放區,用於透過 JSON Web Token (JWT) 驗證使用者。

Cloud Armor 安全性政策

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

機群範圍管道

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

元件 說明

命名空間

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

RBAC (角色和繫結)

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

應用程式工廠

應用程式 Factory 會由基礎架構管道部署,並用於為每個新應用程式建立基礎架構。這項基礎架構包含 Google Cloud 專案,其中存放應用程式 CI/CD 管道。

隨著工程機構擴大規模,應用程式團隊可以透過應用程式工廠,導入新的應用程式。擴充功能可新增獨立的應用程式 CI/CD 管道,並支援在多租戶架構中部署新應用程式的基礎架構,進而促進成長。下圖顯示應用程式工廠。

應用程式工廠元件。

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

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

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

元件 說明

應用程式原始碼存放區

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

應用程式 CI/CD 管道

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

應用程式 CI/CD 管道

應用程式 CI/CD pipeline 可自動建構及部署以容器為基礎的應用程式。這個管道包含持續整合 (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、Cloud Armor、工作階段相依性和連線排除。GCPBackendPolicy 僅供接收外部流量的部署作業使用。

PodMonitoring

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

持續整合

下圖顯示持續整合程序。

藍圖持續整合程序。

程序如下:

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

如要查看建構版本的安全性資訊,請前往「安全性洞察」面板。 這些洞察資料包括使用構件分析偵測到的安全漏洞,以及 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. 將網路政策和 GKE 適用的工作負載身分聯盟的 Kubernetes 資訊清單,推送至 Configuration Management 存放區。
    3. 建立應用程式的 CI/CD 專案和 Cloud Build IaC 觸發條件。
  5. 應用程式的 Cloud Build IaC 觸發程序會在應用程式的 CI/CD 專案中,建立應用程式 CI/CD 管道和 Artifact Registry 存放區。
  6. Config Sync 會將網路政策和 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 管道會套用應用程式專屬設定,而機群範圍管道則會建立命名空間和相關聯的角色繫結。

後續步驟