环境管理、配置与密钥
一、开发、测试、预发、生产环境的隔离与一致性
多环境的目的:开发/测试敢试、敢拆,不影响用户;预发(Staging)尽量贴近生产,做发布前验证;生产服务真实用户,稳定第一。隔离指:环境之间网络与数据分离(测试库与生产库分开、不互通)、权限分离(生产仅少数人可操作)、部署与变更独立(发测试不触发生产)。一致性指:同一制品、同一部署方式、同一操作系统与中间件版本,差异只在于配置(连接串、开关、域名等)。这样「在预发过了」才更有信心在生产过;若每环境各起一套不一样的依赖,问题难以复现。
二、配置管理:环境变量、配置文件、配置中心
配置是「随环境变、不写死进代码」的项:数据库连接串、服务地址、特性开关、日志级别等。环境变量:在进程启动时注入,简单、与 12-Factor 契合,适合少量键值;敏感的不放代码里,由部署或编排层注入。配置文件:如 YAML/JSON,按环境分文件(config.dev.yaml、config.prod.yaml)或由部署时替换;要避免把生产配置误提交到仓库。配置中心(如 Consul、Apollo、Spring Cloud Config):配置集中存、按应用与环境拉取,支持动态更新与审计;适合多服务、配置多的场景。原则:配置与代码分离、敏感配置不落库、环境间仅配置不同。
三、密钥与敏感信息:不落库、轮换与审计
密钥与敏感信息(数据库密码、API Key、证书私钥等)不能出现在代码库、镜像层或日志里;否则一旦泄露,影响面大。不落库:用占位符或「从某处读取」的约定,真实值存在密钥管理服务(如 Vault、云厂商 Secrets Manager、K8s Secret)或部署流水线的受保护变量中,运行时注入。轮换:定期更换密钥,并支持多版本过渡(如新旧 Key 并存一段时间再下线旧 Key)。审计:谁在何时访问或使用了哪条密钥,可查日志;最小权限,仅需要的服务/人有权限取用。
密钥管理要点
- 不落库:代码与镜像中不包含真实密钥;用密钥管理服务或 CI/CD 受保护变量,运行时注入。
- 轮换:定期更换;支持多版本过渡,避免换钥即断线。
- 审计:访问与使用可追溯;最小权限,按需授权。
推荐
- 密钥存专用服务(Vault、云 Secret Manager、K8s Secret)
- 部署时或启动时注入,应用只读环境变量或 API
- 配置与代码分离,敏感项用占位符 + 文档说明来源
禁止
- 密钥写进代码、配置文件并提交仓库
- 写在镜像层或日志里
- 多人共用同一密钥且不轮换、不审计
一句话: 环境要隔离(数据、权限、部署独立)且一致(同一制品、同一方式,只换配置)。配置用环境变量、配置文件或配置中心,与代码分离、敏感不落库。密钥不写进代码与仓库,存密钥管理服务或 CI 受保护变量、运行时注入;要轮换与审计,最小权限。
四、小结
环境:开发、测试、预发、生产隔离且一致;同一制品 + 各环境配置。配置管理:环境变量、配置文件、配置中心;配置与代码分离、敏感不落库。密钥:不落库、存专用服务或受保护变量、运行时注入;轮换与审计、最小权限。下一章讲监控、日志与可观测性,把指标、日志、追踪与 On-call 说细。