如何从Homelab到AWS构建生产级DevSecOps平台[全书]

如何从Homelab到AWS构建生产级DevSecOps平台[全书]

💡 原文英文,约43300词,阅读约需158分钟。
📝

内容提要

第7.5阶段为系统添加了追踪功能,使用OpenTelemetry和Grafana Tempo实现请求链路分析。第8阶段将应用迁移至AWS,使用Terraform部署EKS、RDS、ECR等资源,通过ArgoCD和External Secrets Operator管理部署和密钥,并支持CI/CD、安全扫描及生产加固。

🔎

延伸解读

为什么先手动部署再自动化

本书刻意让读者从手动部署开始,先感受没有自动化时的痛点,再逐步引入CI、GitOps、安全扫描等工具。这种"先体验问题,再引入解决方案"的方式,能帮助读者理解每个工具存在的必要性,而不是机械地安装配置。对于面试准备而言,能够解释"为什么用这个工具"比会运行命令更重要。

安全层的递进关系

平台的安全能力是分层递进的:CI阶段扫描代码和镜像,Kyverno在部署时拦截不合规的Pod,Vault管理密钥,Falco监控运行时行为。每一层解决前一阶段无法覆盖的问题,形成纵深防御。这种设计思路与生产环境中的安全实践一致,读者可以借鉴到自己的项目中。

本地资源不足时的替代路径

如果本机内存不足24GB,可以选择Docker Compose先体验应用,或使用Lite集群完成前5个阶段,也可以租用云虚拟机运行完整实验。文章提供了多种路径,但强调要根据自身资源提前选择,避免中途切换导致时间浪费。这提醒读者在开始前评估环境,合理规划学习路线。

Q&A

ClearLedger 应用包含哪些组件?

ClearLedger 是一个金融交易账本应用,包含四个组件:auth-service(处理用户注册、登录和 JWT 认证)、ledger-service(处理交易、维护账户余额和交易历史)、notification-service(通过 Redis 监听大额交易并生成合规警报)以及 frontend(Web 界面,用于登录、查看余额、提交交易和查看警报)。

在 Stage 0 中,为什么需要手动部署 Kubernetes 应用?

Stage 0 要求手动部署应用,目的是让学习者先理解系统在没有自动化的情况下如何运行。这有助于建立对平台的基础理解,为后续引入自动化工具(如 CI/CD、GitOps 等)打下基础。

在 Stage 0 中,为什么使用 sed 命令替换部署文件中的 DOCKER_USERNAME?

部署文件中的镜像名称包含占位符 DOCKER_USERNAME,因为每个人的 Docker Hub 用户名不同。sed 命令将占位符替换为实际用户名,以便 Kubernetes 能够从 Docker Hub 拉取正确的镜像。如果不替换,Kubernetes 会尝试拉取不存在的镜像。

在 Stage 0 中,如果 Postgres 一直处于 Pending 状态,可能的原因是什么?如何解决?

Postgres 一直 Pending 通常是因为缺少存储类(StorageClass),导致 PersistentVolumeClaim 无法绑定。解决方法是在 VM 中启用 MicroK8s 的 storage 插件(以及 ingress 和 rbac),然后删除 Postgres pod 使其重新调度。

在 Stage 0 中,如何验证应用是否正常运行?

可以通过浏览器访问 http://clearledger.local,注册并登录后查看余额、交易历史和警报。也可以使用 curl 命令进行 API 测试,例如注册、登录、创建大额交易并检查警报。最后运行 make check-0 进行验证。

在 Stage 0 中,为什么 Redis 在部署应用服务之前就需要运行?

Redis 作为消息总线,ledger-service 在检测到大额交易后会发布消息到 Redis,notification-service 订阅该消息并生成警报。因此,Redis 必须在 notification-service 部署之前运行,以确保消息传递正常。

在 Stage 0 中,为什么应用部署时使用了两个副本(replicas)?

在 Stage 0 的部署文件中,auth-service 和 ledger-service 配置了 2 个副本,以提高可用性和负载均衡。其他服务(如 notification-service 和 frontend)可能只有 1 个副本,具体取决于部署配置。

在 Stage 0 中,如何配置本地域名解析?

需要将 clearledger.local 等域名添加到 /etc/hosts 文件中,指向 VM 的 IP 地址。可以运行 sudo bash scripts/setup-hosts.sh 自动完成,或手动添加。对于 WSL2 用户,需要将域名添加到 Windows 的 hosts 文件。

🏷️

标签

➡️

继续阅读