consul 使用指南

关于 consul

consul 的下载地址: https://developer.hashicorp.com/consul/install

本人下载了最新版(consul_1.21.4_windows_amd64),貌似有问题,不能新建 Key/Value 。

经本人测试后,consul_1.20.6_windows_amd64 可正常使用。

本示例用 1.20.6 版本。

启动

启动 consul:

1# 启动开发模式(数据不会持久化,服务关闭后配置数据都会被清除)
2D:\dev\bin>D:\dev\consul_1.20.6_windows_amd64\consul.exe agent -dev
3
4# 启动生产模式(数据持久化;无需任何权限认证)
5D:\dev\bin>D:\dev\consul_1.20.6_windows_amd64\consul.exe agent -server -ui -bind=127.0.0.1 -client=0.0.0.0 -bootstrap-expect 1 -data-dir D:\dev\consul_1.20.6_windows_amd64\data

然后可在浏览器中访问 consul 控制台: http://localhost:8500/


由于使用上面的生产模式的启动参数过多,并且没有开启权限认证,我们可以可把这些配置写到配置文件中。

配置文件(bootstrap.hcl)示例:

 1# 基础配置
 2datacenter = "data-center"
 3data_dir = "D:/dev/consul_1.20.6_windows_amd64/data"
 4server = true
 5bootstrap_expect = 1
 6
 7# ACL 配置
 8acl = {
 9  enabled = true
10  default_policy = "deny"
11  down_policy = "extend-cache"
12  enable_token_persistence = true
13  #"tokens" {
14  #  "master" = "b8cbbabb-02ec-6894-2f88-59f904374afb"
15  #}
16}
17
18# 启用 UI
19ui_config {
20  enabled = true
21}
22
23# 网络配置
24bind_addr = "127.0.0.1"
25client_addr = "0.0.0.0"

然后在终端启动服务:

1D:\dev\bin>D:\dev\consul_1.20.6_windows_amd64\consul.exe agent -config-file=D:\dev\consul_1.20.6_windows_amd64\bootstrap.hcl

启动后,在次访问控制台,发现提示没有权限。因此先要生成可访问的 token。

1D:\dev\bin>D:\dev\consul_1.20.6_windows_amd64\consul.exe acl bootstrap
2AccessorID:       7d7b75fb-c37b-ea71-7d80-fc00d5cc23c7
3SecretID:         b8cbbabb-02ec-6894-2f88-59f904374afb
4Description:      Bootstrap Token (Global Management)
5Local:            false
6Create Time:      2025-09-03 15:50:44.7158336 +0800 CST
7Policies:
8   00000000-0000-0000-0000-000000000001 - global-management

SecretID 就是生成的 token 。

在次访问控制台,查看node、service等菜单时,提示需要通过 token 才能访问了。

注意:

bootstrap token 只能创建一个,在创建 master token 之后该 token 就会被禁用,并且不能在次创建

此 token 具有全局管理的权限,也就是最大的权限。它允许操作员使用令牌密钥ID来引导ACL系统

因此,千万要保存好

最后

本人在使用 springcloud(2021.0.3) + springboot(2.7.18) 和集成 consul 时,如果 consul 启用了权限(ACL)认证,死活无法正常运行;

反而关闭了可以正常运行。

尝试了好久,实在找不到错误原因。(spring cloud 和 consul 的版本原因?配置错误?哎,谁知道呢。)

如果找到原因,以后再补充。