部署方法

Last reviewed 2024-04-19 UTC

企业应用蓝图通过一系列自动化系统和流水线进行部署。每个流水线部署蓝图的某个特定方面。流水线提供了一种用于构建蓝图的可控、可审核且可重复的机制。下图显示了各种流水线、代码库和角色的交互。

蓝图流水线。

此蓝图使用以下流水线:

  • 基础的基础架构流水线(企业基础蓝图的一部分)部署应用工厂、多租户基础架构流水线和舰队范围流水线。
  • 多租户基础架构流水线部署 GKE 集群以及企业应用蓝图所依赖的其他托管式服务。
  • 舰队范围流水线配置舰队范围、命名空间以及 RBAC 角色和绑定。
  • 应用工厂提供了一种通过模板化流程部署新应用流水线的机制。
  • 应用 CI/CD 流水线提供了 CI/CD 流水线,可将服务部署到 GKE 集群中。
  • Config Sync 部署和维护其他 Kubernetes 配置,包括 Policy Controller 限制条件。

代码库、代码库贡献者和代码库更改审批者

通过更改 Git 代码库会触发蓝图流水线。下表介绍了整个蓝图中使用的代码库、代码库的贡献者、代码库更改的审批者、使用代码库的流水线以及代码库包含的内容。

代码库 代码库贡献者 代码库更改审批者 流水线 说明

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 Secret

为通过 JSON Web 令牌 (JWT) 进行用户身份验证所用的 RSA 密钥对提供 Secret 存储。

Google Cloud Armor 安全政策

提供 Google Cloud Armor Web 应用防火墙使用的政策。

舰队范围的流水线

舰队范围流水线负责在舰队的 GKE 集群中配置命名空间和 RBAC 绑定。下表介绍了舰队范围流水线构建的组件。

组件 说明

命名空间

定义物理集群中的逻辑集群。

RBAC(角色和绑定)

定义 Kubernetes 服务账号在集群级层或命名空间级层拥有的授权。

应用工厂

应用工厂由基础的基础架构流水线部署,用于为每个新应用创建基础架构。此基础架构包含一个用于存储应用 CI/CD 流水线的 Google Cloud 项目。

随着工程组织的扩展,应用团队可以使用应用工厂初始配置新应用。通过添加独立的应用 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 定义用于访问 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. Binary Authorization 会对映像签名。Binary Authorization 是 Google Cloud 中的一项服务,它使用政策规则备注证明证明者签名者来为基于容器的应用提供软件供应链安全。在部署时,Binary Authorization 政策实施程序会帮助确保容器的来源安全无虞,然后才会允许部署容器。
  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. 将网络政策和 Workload Identity 的 Kubernetes 清单推送到配置管理代码库。
    3. 创建应用的 CI/CD 项目和 Cloud Build IaC 触发器。
  5. 应用的 Cloud Build IaC 触发器会在应用的 CI/CD 项目中创建应用 CI/CD 流水线和 Artifact Registry 代码库。
  6. Config Sync 会将网络政策和 Workload Identity 配置部署到多租户 GKE 集群。
  7. 舰队范围创建流水线会为多租户 GKE 集群上的应用创建舰队范围和命名空间。
  8. 应用的 CI/CD 流水线初次将应用部署到 GKE 集群。
  9. (可选)应用团队使用 Cloud Build IaC 触发器将项目和其他资源(例如数据库和其他托管式服务)部署到专用单租户项目,每个环境部署一次。

GKE Enterprise 配置和政策管理

在该蓝图中,开发者平台管理员使用 Config Sync 在每个环境中创建集群级配置。Config Sync 连接到一个 Git 代码库,该 Git 代码库用作集群配置的所选状态的可靠来源。即使进行了手动更改,Config Sync 也会持续监控集群中配置的实际状态,并通过应用更新来协调任何差异,以确保遵循所选状态。配置通过代码库上的分支策略应用于环境(开发、非生产和生产)。

在此蓝图中,Config Sync 会应用 Policy Controller 限制条件。这些配置定义了由开发者平台管理员为组织定义的安全和合规控制。此蓝图依赖于其他流水线来应用其他配置:应用 CI/CD 流水线应用特定于应用的配置,而舰队范围流水线创建命名空间和关联的角色绑定。

后续步骤