CONFIG-MANAGEMENT-SUMMARY.md 11 KB

📊 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 文件

# 编辑 secret-templates-common.yaml,替换为实际的 Base64 编码凭证
# 或使用脚本生成

echo -n "your-actual-password" | base64

2. 部署共享 Secret

kubectl apply -f secret-templates-common.yaml

3. 为每个服务创建 ConfigMap

自动方法(推荐):

bash generate-k8s-manifests.sh
kubectl apply -f k8s-manifests/configmaps/

手动方法: 复制 service-configmap-deployment-template.yaml 中的 ConfigMap 部分,为每个服务修改:

  • [SERVICE_NAME]
  • [PORT]
  • 数据库名称(如果有)
  • 其他服务特定的配置

4. 为每个服务创建 Deployment

自动方法:

kubectl apply -f k8s-manifests/deployments/

手动方法: 复制 service-configmap-deployment-template.yaml 中的 Deployment 部分,修改:

  • [SERVICE_NAME]
  • [IMAGE_REGISTRY]
  • [REPLICAS]
  • 资源限制

5. 为每个服务创建 Service

# 使用通用模板为每个服务创建
bash generate-k8s-manifests.sh  # 生成 service-* 文件
kubectl apply -f k8s-manifests/services/

6. 验证部署

# 查看所有资源
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)

# 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)

# 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 详细配置策略分析 架构师、DevOps
K8S-DEPLOYMENT-GUIDE.md 完整部署指南和故障排查 DevOps、运维
secret-templates-common.yaml 公共 Secret 模板 DevOps、系统管理员
service-configmap-deployment-template.yaml 通用模板库 开发、DevOps
generate-k8s-manifests.sh 自动生成脚本 DevOps

⚡ 快速命令参考

# 查看所有 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 大小优化

# ConfigMap 单个键值对大小限制:1MB
# 总大小限制:1MB(etcd)

# 检查 ConfigMap 大小
kubectl get configmap shop-recycle-payment-config -o yaml | wc -c

# 优化:
# 1. 使用环境变量注入大配置文件
# 2. 使用 InitContainer 从远程拉取配置
# 3. 使用 ConfigMapGenerator(Kustomize)压缩配置

Secret 查询优化

# Secret 缓存:
# 每个 Secret 的读取都会触发 API 调用
# 使用 Projected Volumes 或 Secret 联邦机制减少查询

# 推荐配置:
# - 使用共享 Secret 减少重复
# - 定期清理过期 Secret

🎓 相关学习资源


✅ 实施清单

初期(第 1 周)

  • 阅读所有文档
  • 理解服务分类和敏感信息类型
  • 编制实际 Secret 文件
  • 部署共享 Secret
  • 部署 Gateway 服务作为试点

中期(第 2-3 周)

  • 为所有 34 个服务生成 ConfigMap
  • 为所有服务生成 Deployment
  • 配置 RBAC 权限
  • 建立监控告警

长期(第 4 周+)

  • 集成 External Secrets Operator
  • 建立配置变更流程(GitOps)
  • 定期安全审计
  • 优化性能和成本

最后更新: 2026-01-16
维护者: DevOps 团队
版本: 1.0.0