本文最初发布于 Palo Alto Networks 工程博客。
我一直在思考,我在 Palo Alto Networks 公司的第一篇博客应该写什么,什么时候发表合适。我觉得,要回顾我领导云基础设施和平台工程的旅程和经验,现在就是一个完美的时间。
我于 2021 年 4 月加入 Palo Alto Networks,负责网络安全组织下云交付安全服务组织的生产工程团队,最近又承担了一个延伸角色,负责整个 NetSec 组织的基础设施平台。在这篇博文中,我将探讨下我们如何将生产工程服务转化为平台。首先,我将概要地介绍下我们的内部开发平台(IDP)。
让我们先快速了解一下 PAN IDP 的启动背景。以下是促使我们踏上这段旅程的两个主要因素:
Palo Alto Networks 的平台方法:众所周知,Palo Alto Networks 是网络安全的领导者,其成功的主要原因之一是其网络安全解决方案的平台方法。我们已经将这一理念应用于构建一个包含基础设施配置、成本管理、可观察性和事件管理等生产工程服务的平台,而不是将这些服务作为孤立的自动化解决方案提供给工程团队。
自助开发工具:遗留生产工程/DevOps/SRE 实践的一个主要问题源于提供相关文档的独立自动化脚本;人们必须阅读许多页的文档或者咨询主题专家才能理解和运行这些工具。
一旦我们决定采用平台方法,接下来的挑战就是决策:是内部开发还是购买。经过仔细分析,我们决定针对 Palo Alto Networks 特有的用例专门构建一个。我们的理念不是重新发明轮子,而是设法利用开源项目来实现飞跃。我们的团队发现,我们可以从一个很棒的开源项目backstage.io开启我们的旅程。我们将后台 OSS 代码分叉,添加了必要的抽象,并将其命名为“Palo Alto Networks DevClues”。
我们实现的第一个用例是“服务目录”,用于帮助开发人员或 SRE 轻松快速地找到特定生产服务的详细信息。现在,经过一年半的发展,我们的 IDP 已经提供了相当多的处于不同采用阶段的服务,如下图所示:
该平台包括 4 类服务:资源管理、基础设施管理、生产管理和开发者门户。开发者门户(DevClues)是平台提供的所有服务的入口点(一站式商店)。例如,如果任何工程团队想要将他们的服务安装到可观察性类别下,他们就可以简单地登录到开发者门户网站,并使用安装插件(由可观察性团队贡献的自定义插件)来完成可观察性集成。
如今,开发者门户(DevClues)提供了 12 个插件和数十个服务模板,提高了整体的工程效率。我们将继续根据我们的工程需求构建更多的模板和插件。我还想指出的是,其中一些是由开发团队(即我们的客户)贡献的。因此,我们从第一天起就采用了内部开源模式(即内部外包)。
接下来,我将简要介绍下 Palo Alto Networks IDP 的 4 个服务类别,以及根据2022年高德纳发布的报告,这些能力与以下开发生命周期阶段的关系:
发现与创建
集成与部署
运营与改进
图 1:Palo Alto Networks IDP 概述(在 Gartner 报告的语境下)
现在,让我们分阶段看下相关的 IDP 功能。
发现与创建(第 0 天)
发现与创建阶段涵盖了开发生命周期的初始部分,包括安装、培训、启动、本地开发等,如图 1 所示,所有这些功能都是 Palo Alto Networks“开发者门户”的一部分。
开发者门户(Palo Alto Networks DevClues)
如前所述,DevClues 基于开源项目backstage.io。这是一个一站式商店,包含基础设施平台提供的所有内部服务。现在,我们将详细看下 DevClues 的每个功能。
内部开发者门户应该使开发人员在软件交付生命周期(SDLC)的所有阶段都能够轻松地执行第 0 天、第 1 天和第 2 天的活动。
图 2:Palo Alto Networks DevClues 首页
Palo Alto Networks DevClues 为开发人员提供了可以直接使用的服务模板,其中嵌入了新建软件应用程序、服务和基础设施组件的最佳实践。
服务目录
该功能使开发人员能够轻松快速地搜索和查找生产服务(如 On Boarded into DevClues),包括:
可用的服务及其元数据(即所有者和电话值班工程师)
它们的 API 规范
其他详细信息,如文档、CICD 统计、代码覆盖率和如下所示的 DORA 指标
图 3:服务目录中的服务概述
服务生成模板
该功能使开发人员可以基于预定义的模板创建新的服务、基础设施组件或应用程序。目前,DevClues 为 Go、Python 和 React 应用程序开发提供了一套服务模板,为“GKE 集群启动”和“GitOps 安装”(借助 GitLab 和 argoCD)提供了基础设施组件配置模板。
文档和培训资料
这有助于开发人员了解如何以自助服务的方式最大限度地利用平台,并促进平台社区的发展,让来自不同服务团队的个人成为平台专家,帮助他们的团队实现自己的目标,而不必等待平台团队提供信息或帮助。其中包括:
平台使用指南
培训文档和视频
社区培训(brown-bags)和辅导(office hours)
自动支持 &搜索
为开发人员提供自助查找平台及其特性信息的方法,响应开发人员的提问,并自动帮助解决问题,其中包括:
全局搜索所有可用的文档、指南和示例
联系平台团队的 Slack 或电子邮件链接
聊天机器人协助安装
最佳实践指南和工具
为开发人员提供架构最佳实践:
模板和自助解决方案
生产就绪指南
SRE 最佳实践和标准
自定义插件
DevClues 是使 Palo Alto Networks 开发人员能够构建内部工具和流程的门户。在 Palo Alto Networks,我们有以下插件:
云计算成本
可观察性安装
事件分析
基础设施管理
证书管理
新增云区域
编辑自动修正
生产审计日志
适合“内部采购”的内部项目市场
集成与部署(第 1 天)
集成与部署阶段包括将应用程序部署到非生产/生产环境、分布式系统集成、资源配置等。提供一个统一的仪表板,管理跨云和本地环境管理分布式基础设施。以下是当前提供的功能,它们分属于基础设施管理和生产管理两个类别。
基础设施准备 &编排
在 Palo Alto Networks,我们构建了一个 DevClues 插件 Uno(如图 4),它可以帮助开发人员为使用 GitOps 的服务/应用准备和配置云资源和其他基础设施组件。这包括:
在私有云和公有云中按需提供资源
将所有必需资源定义为符合最佳实践的代码
图 4:Uno —— 用于多云基础设施管理的 DevClues 插件
策略管理
在资源和应用/服务运行上执行业务、运营和最佳实践策略。我们已经实现了一个基于 OPA(开放策略代理)的“控制平面”来帮助实现:
所有内部门户和底层 API 的授权(RBAC)
将资源配置限制为允许值(即 CICD)
执行特定的注解/标签
环境管理
我们构建的用于管理基础设施资源的 DevClues 插件经过扩展后,可以轻松创建、配置和管理服务/应用环境,例如:
轻松添加新环境/区域,或删除旧环境/区域
创建和删除用于开发和测试的临时环境
秘密管理
在 Palo Alto Networks,这项功能提供了一项服务,可以管理生产环境中的证书、秘密和配置同步,以便可以安全地:
将秘密管理系统与部署/交付系统自动集成
在一个集中的存储库中存储/调换它们的配置、秘密和证书(即 vault 或 GSM 或 ASM)
当相应的秘密/证书/配置发生变化时,无缝地重新配置/加载应用,它们运行在 K8s、Docker 和本地 Linux 进程上
运营与改进(第 2 天)
这个阶段通过 DevClues 插件访问工具箱,获得自动化、监控、可观察性和事件管理等功能,实现连续操作。
在 Palo Alto Networks,运营与改进阶段的能力分布在三个类别中——生产管理、基础设施管理和资源管理。
监控和可观察性
监视和可观察性是 Palo Alto Networks 的关键生产工程服务之一。我们已经建立了一个名为“Garuda”的内部可观察性平台,使用了一些成熟的开源技术,如 Grafana、Grafana Mimir、Grafana Loki、Grafana Tempo 和vector.dev。我们很快将单独发表一篇博文,深入介绍 Garuda 及其能力。
Garuda 现在提供的功能包括:
日志和事件
跟踪
指标
报警
仪表板
我们为 Garuda 构建了一个 DevClues 插件(见下图 5),以便工程团队可以轻松地将他们的基础设施和服务/应用安装到“可观察性平台”。
图 5:DevClues 中的 Garuda 安装插件
监控和可观察性的主要挑战之一是不同资源类型(云、本地、K8s、VM、无服务器和裸金属)的复杂安装过程。通过这个插件,我们使安装过程尽可能地顺畅无停顿。
图 6:Garuda 代理安装
事件管理
有效的事件管理是 SRE 最佳实践的一个关键方面,当影响业务的事件/中断发生时,我们可以及时提醒和通知工程师,并提供管理这些事件的工具,其中包括:
事件管理仪表板
事件分析
用于提醒和创建 Slack Channel 的工具
我们的 DevClues 事件分析插件提供了以下洞察:
按日统计的事件
按小时统计的事件
按组件统计的事件
按团队统计的事件
事故修复与发生对比
按组件/服务统计的重复事件
自动修复
根据最近的一项行业研究,30-50%的生产事故是重复的,并导致了大多数 SRE 工作。我们希望通过自动化来解决这个问题,因此建立了一个名为“Nutrix”的系统,即我们基于开源项目stackstorm构建的内部自动修复平台。
图 7:DevClues 中的 Nutrix 插件
同样,提升自动化应用的主要瓶颈之一是没有一个健壮的编辑框架,因此,我们在 DevClues Nutrix 插件中构建了编辑框架,如下所示:
图 8:DevClues 中的 Nutrix 自动修复编辑
洞察仪表板
仪表板利用可观察性和监控数据来诊断问题和调试运行中的系统,以减少 MTTR(平均解决时间),其中包括:
主机 360 仪表板
证书 360 仪表板
Kubernetes 360 仪表板
成本洞察
图 9:Garuda 主机 360 仪表板
图 10:Garuda 证书 360 仪表板
图 11:Garuda Kubernetes 360 仪表板
图 12:Garuda Kubernetes 成本洞察仪表板
IAM
管理身份信息,以及用户和工具对云资源和系统的访问。
下面是几个例子:
根据角色管理 K8s 集群的访问等级,如服务操作员和集群操作员进行不同的访问
定义 RBAC 权限来执行部署,更新服务/应用及资源的配置
将堡垒机作为访问生产基础设施的服务
即时访问管理
安全和合规管理
Palo Alto Networks 的信息安全团队负责定义和执行安全策略以及自动化验证和检查,但修复是工程团队的责任,其中包括:
安全审查和审批(信息安全)
漏洞扫描和检查(信息安全)
漏洞修复(工程)
实现符合业务策略的措施的框架(平台工程)
遵循治理规则和法规的框架(平台工程)
成本管理
在多云和混合云世界中,基础设施成本成了一个热门话题。毫无疑问,成本需要持续地监测、报告和优化。
在 Palo Alto Networks,我们开始从两个维度来解决这个问题,即自上而下和自下而上:
自上而下——由 FinOps 和 CloudOps 驱动执行团队在组织和业务单元层面推动成本优化;
自下而上——由基础设施平台和工程团队驱动,为了优化成本,我们提供了各个云资源或用户级的详细成本洞察,包括异常检测和自动化。
图 13:DevClues SKU 级的成本洞察
配置管理
在云世界中,基础设施管理有两个重要的方面,即基础设施准备和配置。在 Palo Alto Networks,我们用 Terrform 标准化了基础设施准备,用 Ansible 标准化了配置管理。
开发人员应该用一种可伸缩且可靠的方式来管理应用程序的配置,就像我们对源代码或基础设施即代码(IaC)进行管理和版本控制那样。
为了更好地管理 Ansible 代码,我们采用了Ansible Tower的开源版本awx,帮助开发人员/SRE 标准化配置的部署、初始化、下发和审计。
资源管理
在 Palo Alto Networks,资源和基础设施管理是密不可分的。DevClues 的 Uno 插件旨在提供简单流畅的基础设施准备和端到端管理,其中包括:
以代码形式管理 Kubernetes 集群和组件,并利用最佳实践和持续部署;
以代码的形式管理跨云提供商的虚拟机,并利用最佳实践;
云供应商资源管理;例如:谷歌 BigQuery、CloudSQL、Cloud Run、Cloud Functions 等。
小结
根据 Gartner 的报告,到 2025 年,75%拥有平台团队的组织将提供自助服务开发者门户,以改善开发体验并加速产品创新。
IDP 的采用与组织 DevOps、SRE 和平台工程实践的成熟度成正比。所以,成熟度指数越高,他们使用开发者门户的可能性就越高。
Palo Alto Networks 的平台工程团队致力于通过管理 IDP 采用、路线图、收集来自工程团队的反馈以及推广其功能来不断创新。
声明:本文为 InfoQ 翻译,未经许可禁止转载。
评论