核心内容摘要
“男女有别”的千年情结:那些关于吸引与连接的秘密
下面给你一套可直接落地的方案用Docker Compose启动Consul 单节点并开启span stylecolor:#e53935ACL 权限控制/span默认拒绝按需放行。
目标是最小暴露面、可审计、可回滚。
️原理解释表先把权限模型吃透组件作用你需要关心的点span stylecolor:#e53935ACL/span权限体系开关开启后建议span stylecolor:#e53935default_policydeny/spanspan stylecolor:#e53935Management Token/span超级管理员令牌只能少数人保管禁止硬编码进镜像/仓库span stylecolor:#e53935Policy/span权限规则集合用最小权限只读、只写、限定前缀span stylecolor:#e53935Token/span给应用/人用的凭证Token 绑定 Policy应用只拿自己那份
准备目录与配置建议按这个结构mkdir -p consul/{data,config,policies}解释data/存 Consul 数据KV、状态、Raft 等容器重启不丢。
config/放consul.hcl配置文件便于版本化管理。
policies/放权限规则文件做到“规则即代码”。
✅
写 Consul 配置开启 ACL、默认拒绝关键把下面内容保存为consul/config/consul.hcldatacenter dc1 data_dir /consul/data server true bootstrap_expect 1 client_addr
0.
0.
0 ui_config { enabled true } acl { enabled true default_policy deny enable_token_persistence true } log_level INFO解释servertrue bootstrap_expect1单节点自举适合测试/小型场景。
client_addr
0.
0.
0容器内对外监听是否映射到公网由 Compose 决定。
ui_config.enabledtrue开启 UIUI 也会受 ACL 控制。
acl.enabledtrue打开权限系统。
span stylecolor:#e53935default_policydeny/span没有授权就拒绝这是安全基线。
enable_token_persistencetrueToken 持久化重启后策略不“失忆”。
Docker Compose 启动 Consul保存为docker-compose.ymlservices: consul: image: hashicorp/consul:latest container_name: consul command: [agent,-config-file/consul/config/consul.hcl] volumes: - ./consul/data:/consul/data - ./consul/config:/consul/config:ro - ./consul/policies:/consul/policies:ro ports: - 8500:8500 - 8600:8600/udp restart: unless-stopped解释command agent -config-file...明确从配置文件启动避免参数散落。
:ro配置与策略只读挂载减少被容器内误改的风险。
8500HTTP API UI8600/udpDNS 接口如需服务发现。
span stylecolor:#e53935安全建议/span生产环境尽量不要把 8500 映射到公网优先内网/堡垒机访问。
⚠️启动docker compose up -d docker logs -f consul解释up -d后台启动。
logs -f盯启动日志确保无配置错误这是最快验收点。
✅
初始化 ACL生成管理员 Tokendocker exec -it consul consul acl bootstrap解释这是一次性初始化命令会输出span stylecolor:#e53935SecretID/span管理员 Token。
这个 Token 是“钥匙串总钥匙”务必离线保存别写进 compose、别发群里。
创建最小权限 Policy 发放应用 Token先写规则文件consul/policies/app-read-kv.hclkey_prefix app/ { policy read } service_prefix { policy read }解释key_prefix app/只允许读取app/这个前缀下的 KV避免全库可见。
service_prefix read允许读取服务信息服务发现常用。
这就是典型的span stylecolor:#e53935最小权限/span。
✅创建 Policy把MGMT_TOKEN换成你刚拿到的管理员 Tokendocker exec -it consul consul acl policy create \ -name app-read-kv \ -rules /consul/policies/app-read-kv.hcl \ -token MGMT_TOKEN解释policy create把规则注册进 Consul。
-rules 文件从文件导入便于审计与回滚。
-token用管理员 Token 执行管理操作。
签发应用 Tokendocker exec -it consul consul acl token create \ -description token for app \ -policy-name app-read-kv \ -token MGMT_TOKEN解释输出里会有应用侧要用的span stylecolor:#e53935SecretID/span。
应用访问时设置环境变量CONSUL_HTTP_TOKENSecretID即可建议用 Docker secret / 环境注入避免明文落盘。
交付级“流程脑图”vditor/Markdown 可直接贴Consul(容器) ├─ 启动 agent(读取 consul.hcl) ├─ 开启 ACL(default deny) ├─ bootstrap 生成 管理员Token ├─ 创建 Policy(最小权限) └─ 创建 应用Token(绑定Policy) → 应用带 Token 访问如果你要做多节点集群 Gossip 加密 UI 不暴露公网 Token 自动注入到你的微服务我也能按你现网拓扑给一份“生产级 Compose/配置模板”含隔离网络与回滚点。
你只需要告诉我单机还是 3 节点、是否需要跨宿主机通信、以及要控制的资源KV/Service/Session 哪些要读写。