企业应用蓝图通过一系列自动化系统和流水线进行部署。每个流水线部署蓝图的某个特定方面。流水线提供了一种用于构建蓝图的可控、可审核且可重复的机制。下图显示了各种流水线、代码库和角色的交互。
此蓝图使用以下流水线:
- 基础的基础架构流水线(企业基础蓝图的一部分)部署应用工厂、多租户基础架构流水线和舰队范围流水线。
- 多租户基础架构流水线部署 GKE 集群以及企业应用蓝图所依赖的其他托管式服务。
- 舰队范围流水线配置舰队范围、命名空间以及 RBAC 角色和绑定。
- 应用工厂提供了一种通过模板化流程部署新应用流水线的机制。
- 应用 CI/CD 流水线提供了 CI/CD 流水线,可将服务部署到 GKE 集群中。
- Config Sync 部署和维护其他 Kubernetes 配置,包括 Policy Controller 限制条件。
代码库、代码库贡献者和代码库更改审批者
通过更改 Git 代码库会触发蓝图流水线。下表介绍了整个蓝图中使用的代码库、代码库的贡献者、代码库更改的审批者、使用代码库的流水线以及代码库包含的内容。
代码库 | 代码库贡献者 | 代码库更改审批者 | 流水线 | 说明 |
---|---|---|---|---|
|
开发者平台开发者 |
开发者平台管理员 |
基础的基础架构流水线 |
包含用于部署多租户基础架构流水线、应用和舰队范围流水线的代码的代码库 |
|
开发者平台开发者 |
开发者平台管理员 |
多租户基础架构 |
开发者平台团队在创建基础架构时使用的 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 Secret |
为通过 JSON Web 令牌 (JWT) 进行用户身份验证所用的 RSA 密钥对提供 Secret 存储。 |
Google Cloud Armor 安全政策 |
提供 Google Cloud Armor Web 应用防火墙使用的政策。 |
舰队范围的流水线
舰队范围流水线负责在舰队的 GKE 集群中配置命名空间和 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 服务使用的身份。Workload Identity 定义用于访问 Google Cloud 资源的 Google Cloud 服务账号。 |
|
允许外部入站流量到达服务。只有接收外部流量的部署才需要网关。 |
|
为接收外部流量的部署配置 SSL、Google Cloud Armor、会话亲和性和连接排空。仅接收外部流量的部署会使用 GCPBackendPolicy。 |
|
配置应用导出的 Prometheus 指标集合。 |
持续集成
下图展示了持续集成过程。
具体过程如下:
- 开发者将应用代码提交到应用源代码库。此操作会触发 Cloud Build 以启动集成流水线。
- Cloud Build 会创建容器映像,将容器映像推送到 Artifact Registry,并创建映像摘要。
- Cloud Build 为应用执行自动化测试。系统会根据应用语言执行不同的测试软件包。
- Cloud Build 对容器映像执行以下扫描:
- 扫描成功后,Cloud Build 会批准映像在流水线中继续运行。
- Binary Authorization 会对映像签名。Binary Authorization 是 Google Cloud 中的一项服务,它使用政策、规则、备注、证明、证明者和签名者来为基于容器的应用提供软件供应链安全。在部署时,Binary Authorization 政策实施程序会帮助确保容器的来源安全无虞,然后才会允许部署容器。
- 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。
- 将网络政策和 Workload Identity 的 Kubernetes 清单推送到配置管理代码库。
- 创建应用的 CI/CD 项目和 Cloud Build IaC 触发器。
- 应用的 Cloud Build IaC 触发器会在应用的 CI/CD 项目中创建应用 CI/CD 流水线和 Artifact Registry 代码库。
- Config Sync 会将网络政策和 Workload Identity 配置部署到多租户 GKE 集群。
- 舰队范围创建流水线会为多租户 GKE 集群上的应用创建舰队范围和命名空间。
- 应用的 CI/CD 流水线初次将应用部署到 GKE 集群。
- (可选)应用团队使用 Cloud Build IaC 触发器将项目和其他资源(例如数据库和其他托管式服务)部署到专用单租户项目,每个环境部署一次。
GKE Enterprise 配置和政策管理
在该蓝图中,开发者平台管理员使用 Config Sync 在每个环境中创建集群级配置。Config Sync 连接到一个 Git 代码库,该 Git 代码库用作集群配置的所选状态的可靠来源。即使进行了手动更改,Config Sync 也会持续监控集群中配置的实际状态,并通过应用更新来协调任何差异,以确保遵循所选状态。配置通过代码库上的分支策略应用于环境(开发、非生产和生产)。
在此蓝图中,Config Sync 会应用 Policy Controller 限制条件。这些配置定义了由开发者平台管理员为组织定义的安全和合规控制。此蓝图依赖于其他流水线来应用其他配置:应用 CI/CD 流水线应用特定于应用的配置,而舰队范围流水线创建命名空间和关联的角色绑定。
后续步骤
- 了解 Cymbal Bank 应用架构(本系列的下一个文档)。