feat(config): Consul ACL token 支持 + 8520 端口

- Program.cs 加 Consul:Token 配置(ACL 开启后 api 必须带 token)
- 默认端口改 8520(非标准,配合安全组+ACL 三重防护)
- token 通过环境变量注入(compose Consul__Token),不进代码
This commit is contained in:
xiangning 2026-07-17 17:34:13 +08:00
parent f43e35a4b1
commit 2f32b74687

View File

@ -13,12 +13,20 @@ builder.Configuration.AddJsonFile("appsettings.Secrets.json", optional: true, re
// 加载顺序决定优先级:后注册的覆盖先注册的,故 Consul 在 Secrets 之后。
// 鸡生蛋问题:Consul 地址本身用环境变量 Consul__Host 注入(compose 配置),
// 默认回退到 middleware 公网地址。Consul 不可用时 Optional=true 回退本地 json,不阻断启动。
var consulHost = builder.Configuration["Consul:Host"] ?? "http://43.134.235.58:8500";
var consulHost = builder.Configuration["Consul:Host"] ?? "http://43.134.235.58:8520";
var consulToken = builder.Configuration["Consul:Token"] ?? "";
builder.Configuration.AddConsul(
"buildflow/",
options =>
{
options.ConsulConfigurationOptions = co => co.Address = new Uri(consulHost);
options.ConsulConfigurationOptions = co =>
{
co.Address = new Uri(consulHost);
// ACL token:Consul 开启了 ACL(default deny),api 必须带专用 token 才能读写 KV
// token 通过环境变量 Consul:Token 注入(compose),不进代码/镜像
if (!string.IsNullOrEmpty(consulToken))
co.Token = consulToken;
};
options.Optional = true; // Consul 不可用不阻断启动,回退本地 appsettings
options.ReloadOnChange = true; // KV 变更自动刷新 IConfiguration(热重载基础)
options.OnLoadException = ex => ex.Ignore = true; // 容错:Consul 抖动不影响应用