# 📊 Kubernetes 配置管理完整方案汇总 ## 🎯 项目完成内容 ### 已生成的文件 ``` d:\coding-area\devops\helm\ 📋 文档和分析 ├── CONFIG-AND-SECRET-STRATEGY.md # 详细配置策略分析(13 个服务分类) ├── K8S-DEPLOYMENT-GUIDE.md # 完整实施指南(包含故障排查) ├── CONFIG-MANAGEMENT-SUMMARY.md # 本文件 🔐 Secret 模板 ├── secret-templates-common.yaml # 7 个公共 Secret(Base64 编码示例) │ ├── common-db-credentials │ ├── common-redis-credentials │ ├── common-rabbitmq-credentials │ ├── wechat-credentials │ ├── nacos-credentials │ ├── seata-credentials │ └── mongodb-credentials 📦 ConfigMap 和 Deployment 模板 ├── service-configmap-deployment-template.yaml # 通用模板库(可复制使用) ├── gateway-configmap.yaml # Gateway 配置(已优化) ├── gateway-deployment.yaml # Gateway 部署(已优化) ├── gateway-service.yaml # Gateway 服务 🛠️ 自动化工具 └── generate-k8s-manifests.sh # 自动生成脚本 📂 配置源文件 └── conf/ └── shop-recycle-[service]/ └── conf/ ├── application.yml └── application.properties ``` --- ## 📊 配置分析结果 ### 服务统计 | 指标 | 数量 | 说明 | |------|------|------| | **总微服务数** | 34 | 完整的微服务系统 | | **需要 DB 凭证** | 26 | 有数据库的服务 | | **仅 Cache 服务** | 8 | Web 前端服务(无数据库) | | **需要微信凭证** | 5 | WeChat 集成服务 | | **需要 MongoDB** | 2-3 | 存储使用 MongoDB 的服务 | | **需要 Seata** | 2-3 | 分布式事务的服务 | ### 敏感信息分类 **Secret 包含的敏感信息类型:** 1. **数据库凭证**(26 个服务) - 用户名:`root`(所有库相同) - 密码:`Fxjxtdacf8f_a3d_202600104d6c_41`(所有库相同) - 主机:`rm-bp19t90t7u8n5b0fh.mysql.rds.aliyuncs.com` - 每个服务有不同的数据库名 2. **Redis Sentinel 凭证**(30+ 个服务) - 密码:`3sm_redis` - 数据库:`15` - Sentinel Master:`mymaster` - 节点地址:`redis.jxfx[1-3].com:27000` 3. **RabbitMQ 凭证**(20+ 个服务) - 用户名:`guest` - 密码:`guest` - 主机:`mq.bak.com` 4. **微信凭证**(5 个服务) - 门店/商户/代卖/AI宝 的 AppID 和 AppSecret - 共 8 个密钥对 5. **Nacos 凭证**(部分服务) - 用户名:`nacos` - 密码:`nacos` 6. **Seata 凭证**(分布式事务) - 用户名:`nacos` - 密码:`nacos` 7. **MongoDB 凭证**(2-3 个服务) - 用户名:`root` - 密码:`123456` --- ## 🗂️ 推荐的配置架构 ### 分层设计 ``` Kubernetes 资源层级 │ ├─ 共享 Secret(全局) │ ├─ common-db-credentials # 26 个服务共用 │ ├─ common-redis-credentials # 30+ 个服务共用 │ ├─ common-rabbitmq-credentials # 20+ 个服务共用 │ ├─ wechat-credentials # 5 个服务共用 │ ├─ nacos-credentials # 全局 │ ├─ seata-credentials # 2-3 个服务 │ └─ mongodb-credentials # 2-3 个服务 │ ├─ 服务特定 ConfigMap │ └─ [service-name]-config × 34 # 非敏感配置 │ ├─ 服务特定 Deployment × 34 │ └─ 引用 ConfigMap + Secret │ └─ 服务特定 Service × 34 └─ 负载均衡和服务发现 ``` ### 权限隔离方案 ``` RBAC 权限划分 │ ├─ Application 容器 │ └─ 可读:所有 Secret、ConfigMap │ ├─ 监控容器 │ └─ 可读:ConfigMap(指标配置) │ └─ 特权用户(DevOps) └─ 完全访问:Secret、ConfigMap、Deployment ``` --- ## 🚀 快速部署步骤 ### 1. 准备 Secret 文件 ```bash # 编辑 secret-templates-common.yaml,替换为实际的 Base64 编码凭证 # 或使用脚本生成 echo -n "your-actual-password" | base64 ``` ### 2. 部署共享 Secret ```bash kubectl apply -f secret-templates-common.yaml ``` ### 3. 为每个服务创建 ConfigMap **自动方法(推荐):** ```bash bash generate-k8s-manifests.sh kubectl apply -f k8s-manifests/configmaps/ ``` **手动方法:** 复制 `service-configmap-deployment-template.yaml` 中的 ConfigMap 部分,为每个服务修改: - `[SERVICE_NAME]` - `[PORT]` - 数据库名称(如果有) - 其他服务特定的配置 ### 4. 为每个服务创建 Deployment **自动方法:** ```bash kubectl apply -f k8s-manifests/deployments/ ``` **手动方法:** 复制 `service-configmap-deployment-template.yaml` 中的 Deployment 部分,修改: - `[SERVICE_NAME]` - `[IMAGE_REGISTRY]` - `[REPLICAS]` - 资源限制 ### 5. 为每个服务创建 Service ```bash # 使用通用模板为每个服务创建 bash generate-k8s-manifests.sh # 生成 service-* 文件 kubectl apply -f k8s-manifests/services/ ``` ### 6. 验证部署 ```bash # 查看所有资源 kubectl get secrets,configmaps,deployments,pods,svc | grep shop-recycle # 查看特定服务状态 kubectl get deployment shop-recycle-payment -o wide kubectl get pods -l app=shop-recycle-payment # 查看日志 kubectl logs -l app=shop-recycle-payment -f # 验证环境变量注入 kubectl exec -it [pod-name] -- env | grep -E "DB_|REDIS_|RABBITMQ_" # 测试服务健康 kubectl port-forward svc/shop-recycle-payment 1218:1218 curl http://localhost:1218/actuator/health ``` --- ## 📋 ConfigMap vs Secret 分割规则 ### 什么放在 ConfigMap ✅ **非敏感的应用配置:** - 应用端口号 - 日志级别 - Logging 配置 - 服务发现地址(Nacos 地址,不含凭证) - Redis Sentinel 节点地址(不含密码) - RabbitMQ 主机地址(不含凭证) - Dubbo 配置 - MyBatis 配置 - 业务参数(如第三方 API 地址) - Swagger 配置 - 特性开关 ### 什么放在 Secret ✅ **敏感的凭证信息:** - 数据库用户名和密码 - Redis 密码 - RabbitMQ 用户名和密码 - WeChat AppID 和 AppSecret - MongoDB 密码 - Nacos 凭证 - Seata 凭证 - API Token 和密钥 - 加密密钥 - SSH 密钥 - TLS 证书 --- ## 🔄 配置更新流程 ### 场景 1:更新应用配置(ConfigMap) ```bash # 1. 编辑 ConfigMap kubectl edit configmap shop-recycle-payment-config # 2. 重启 Pod 以应用新配置 kubectl rollout restart deployment shop-recycle-payment # 3. 验证 kubectl logs -l app=shop-recycle-payment -f ``` ### 场景 2:更新敏感信息(Secret) ```bash # 1. 更新 Secret(需要编码) echo -n "new-password" | base64 # 输出: bmV3LXBhc3N3b3Jk # 2. 更新 Secret kubectl patch secret common-db-credentials -p '{"data":{"db-password":"bmV3LXBhc3N3b3Jk"}}' # 3. 重启所有使用该 Secret 的 Pod kubectl rollout restart deployment shop-recycle-payment kubectl rollout restart deployment shop-recycle-merchant # ... 重启所有 26 个使用数据库凭证的服务 ``` ### 场景 3:大规模更新(推荐使用 GitOps) 使用 ArgoCD 或 Flux 管理配置版本控制和自动化部署。 --- ## 🛡️ 安全建议 ### 短期(必做) - [ ] 使用 RBAC 限制 Secret 访问权限 - [ ] 启用 Secret 加密(etcd 加密) - [ ] 定期轮换敏感凭证(密码、API 密钥) - [ ] 审计 Secret 访问日志 - [ ] 不要提交 Secret 内容到 Git ### 中期(推荐) - [ ] 使用 External Secrets Operator 从 Vault 同步 - [ ] 使用 Sealed Secrets 加密存储在 Git 中 - [ ] 实施最小权限原则(按服务类型分配权限) - [ ] 启用 Pod 安全策略(Pod Security Policy) - [ ] 配置网络策略(限制 Pod 间通信) ### 长期(高级) - [ ] 集成 HashiCorp Vault 或云厂商密钥管理服务 - [ ] 实现密钥自动轮换 - [ ] 使用 Service Mesh 加密所有通信 - [ ] 实施零信任网络架构 - [ ] 定期安全审计和渗透测试 --- ## 📚 文档导航 | 文档 | 用途 | 目标用户 | |------|------|---------| | [CONFIG-AND-SECRET-STRATEGY.md](CONFIG-AND-SECRET-STRATEGY.md) | 详细配置策略分析 | 架构师、DevOps | | [K8S-DEPLOYMENT-GUIDE.md](K8S-DEPLOYMENT-GUIDE.md) | 完整部署指南和故障排查 | DevOps、运维 | | [secret-templates-common.yaml](secret-templates-common.yaml) | 公共 Secret 模板 | DevOps、系统管理员 | | [service-configmap-deployment-template.yaml](service-configmap-deployment-template.yaml) | 通用模板库 | 开发、DevOps | | [generate-k8s-manifests.sh](generate-k8s-manifests.sh) | 自动生成脚本 | DevOps | --- ## ⚡ 快速命令参考 ```bash # 查看所有 Secret kubectl get secrets -o name | grep common- # 查看 Secret 详情(不显示内容) kubectl describe secret common-db-credentials # 查看 Secret 内容(Base64) kubectl get secret common-db-credentials -o yaml # 解码 Base64(MacOS/Linux) echo "cmV3LXBhc3N3b3Jk" | base64 -d # 删除并重建 Secret kubectl delete secret common-db-credentials kubectl apply -f secret-templates-common.yaml # 批量应用所有资源 kubectl apply -f secret-templates-common.yaml kubectl apply -f k8s-manifests/ # 检查资源依赖关系 kubectl describe pod [pod-name] | grep -A 10 "Mounts:" # 监控 Pod 启动 kubectl get pods -l app=shop-recycle-payment -w # 导出部署配置 kubectl get deployment shop-recycle-payment -o yaml > shop-recycle-payment-backup.yaml ``` --- ## 📈 性能优化建议 ### ConfigMap 大小优化 ```bash # ConfigMap 单个键值对大小限制:1MB # 总大小限制:1MB(etcd) # 检查 ConfigMap 大小 kubectl get configmap shop-recycle-payment-config -o yaml | wc -c # 优化: # 1. 使用环境变量注入大配置文件 # 2. 使用 InitContainer 从远程拉取配置 # 3. 使用 ConfigMapGenerator(Kustomize)压缩配置 ``` ### Secret 查询优化 ```bash # Secret 缓存: # 每个 Secret 的读取都会触发 API 调用 # 使用 Projected Volumes 或 Secret 联邦机制减少查询 # 推荐配置: # - 使用共享 Secret 减少重复 # - 定期清理过期 Secret ``` --- ## 🎓 相关学习资源 - [Kubernetes ConfigMap 官方文档](https://kubernetes.io/docs/concepts/configuration/configmap/) - [Kubernetes Secret 官方文档](https://kubernetes.io/docs/concepts/configuration/secret/) - [OWASP 密钥管理最佳实践](https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html) - [Spring Cloud Config 参考](https://spring.io/projects/spring-cloud-config) - [12 Factor App 配置](https://12factor.net/config) --- ## ✅ 实施清单 ### 初期(第 1 周) - [ ] 阅读所有文档 - [ ] 理解服务分类和敏感信息类型 - [ ] 编制实际 Secret 文件 - [ ] 部署共享 Secret - [ ] 部署 Gateway 服务作为试点 ### 中期(第 2-3 周) - [ ] 为所有 34 个服务生成 ConfigMap - [ ] 为所有服务生成 Deployment - [ ] 配置 RBAC 权限 - [ ] 建立监控告警 ### 长期(第 4 周+) - [ ] 集成 External Secrets Operator - [ ] 建立配置变更流程(GitOps) - [ ] 定期安全审计 - [ ] 优化性能和成本 --- **最后更新:** 2026-01-16 **维护者:** DevOps 团队 **版本:** 1.0.0