config/README.md
xiaolipro a67ef63eeb
All checks were successful
Sync Consul Config / sync (push) Successful in 9m3s
1
2026-09-21 17:17:56 +08:00

102 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`。
手动(在 runner 机上;跨集群会自动 port-forward):
```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。