# config — Consul 配置 GitOps Gitea 仓保存 `idwms/*.json` → CI 用 K8s Secret 渲染密码 → `PUT` 到 Consul KV → 可选重启 API。 应用仍只读 Consul(`AddConsul("idwms/...")`),不读本仓库。 ## 分支 → 环境 | 分支 | 集群 | Namespace | 前端 CORS | |------|------|-----------|-----------| | `master` | prod(134) | `prod` | `https://ideship.com` | | `test` | test(13) | `test` | `https://app.test.ideship.com` | `test` 分支里中间件地址应为 `*.test.svc.cluster.local`;`master` 为 `*.prod.svc.cluster.local`。 ## 目录 | 文件 | Consul KV | |------|-----------| | `idwms/common.json` | `idwms/common` | | `idwms/admin.json` | `idwms/admin` | | `idwms/itfxapi.json` | `idwms/itfxapi` | | `idwms/trackapi.json` | `idwms/trackapi` | JSON 里敏感字段用占位符,例如 `${MYSQL_ROOT_PASSWORD}`。同步时从对应 namespace 的 `prod-credentials` / `jwt-secret` 注入,**明文密码不进 git**。 ## 一次性准备 ### 1. JWT(业务 API 用) ```bash # prod kubectl -n prod create secret generic jwt-secret \ --from-literal=JWT_SECRET_KEY='请换成足够长的随机串' \ --dry-run=client -o yaml | kubectl apply -f - # test(也可用 secrets.yaml 里 prod-credentials 的 JWT_SECRET_KEY) kubectl --kubeconfig=/etc/rancher/k3s/k3s-test.yaml -n test \ create secret generic jwt-secret \ --from-literal=JWT_SECRET_KEY='ideship-jwt-secret-test-change-me' \ --dry-run=client -o yaml | kubectl apply -f - ``` ### 2. (可选)Consul ACL Token ```bash kubectl -n prod create secret generic consul-acl \ --from-literal=CONSUL_HTTP_TOKEN='...' \ --dry-run=client -o yaml | kubectl apply -f - ``` ### 3. 推到 Gitea ```bash cd d:/my/itfx/config git push -u origin master # → prod Consul git push -u origin test # → test Consul ``` Runner 标签需含 `k3s-host`;134 上需有 `/etc/rancher/k3s/k3s-test.yaml`。 ### 4. 与线上对账(推荐先做) ```bash export KUBECONFIG=/etc/rancher/k3s/k3s.yaml export NAMESPACE=prod ./scripts/export-from-consul.sh # 把导出文件里的密码改回 ${MYSQL_ROOT_PASSWORD} 等占位符后再提交到 master ``` ## 日常 改 JSON → push `master` / `test` → workflow 按分支写入对应 Consul 并 `rollout restart`。 手动: ```bash # prod export KUBECONFIG=/etc/rancher/k3s/k3s.yaml NAMESPACE=prod ./scripts/sync-to-consul.sh # test export KUBECONFIG=/etc/rancher/k3s/k3s-test.yaml NAMESPACE=test ./scripts/sync-to-consul.sh ``` ## 密钥来源 | 占位符 | Secret(在目标 NAMESPACE 内) | |--------|------------------------------| | `${MYSQL_ROOT_PASSWORD}` | `prod-credentials` | | `${REDIS_PASSWORD}` | `prod-credentials` | | `${RABBITMQ_DEFAULT_PASS}` | `prod-credentials` | | `${ELASTIC_PASSWORD}` | `prod-credentials` | | `${JWT_SECRET_KEY}` | `jwt-secret` 或 `prod-credentials` | ## 注意 - `App:CorsOrigins` 改完必须重启 API(CI 默认会 restart)。 - COS 等共享公网地址可两端相同;库名/中间件 DNS 必须按环境分开。 - Consul 保持 ClusterIP,CI 经节点访问 Service ClusterIP。