From 2f32b746875c93a19cb0e641f49619a08d3423d3 Mon Sep 17 00:00:00 2001 From: xiangning Date: Fri, 17 Jul 2026 17:34:13 +0800 Subject: [PATCH] =?UTF-8?q?feat(config):=20Consul=20ACL=20token=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20+=208520=20=E7=AB=AF=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Program.cs 加 Consul:Token 配置(ACL 开启后 api 必须带 token) - 默认端口改 8520(非标准,配合安全组+ACL 三重防护) - token 通过环境变量注入(compose Consul__Token),不进代码 --- src/BuildFlow.Host/Program.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/BuildFlow.Host/Program.cs b/src/BuildFlow.Host/Program.cs index 0834533..6e7f7b9 100644 --- a/src/BuildFlow.Host/Program.cs +++ b/src/BuildFlow.Host/Program.cs @@ -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 抖动不影响应用