原创文章,仅供学习参考。
文章主题:记录Spring cloud consul
的acl-token
在Java
项目的配置方式。
至于Acl是什么,通俗的理解就是管理Consul的认证用户、访问权限。
如果之前没有了解过Consul acl的同学,需要先了解清楚,acl是什么,该如何激活及配置。
附上Consul官方文档地址:https://www.consul.io/api-docs
Acl配置文件最简单的Demo
{
"acl" : {
"enabled" : true,
"default_policy" : "deny",
"tokens" :{
"master": "xxxxxxxxx-xxxxxxxxx-xaaaaaa"
}
}
}
配置说明:
-
acl.enabled:boolean类型,是否开启Acl功能
-
acl.default_policy:
allow
或deny
,默认为allow
allow:ACL是黑名单,允许任何未明确禁止的操作。
deny:ACL是白名单,阻止任何未明确允许的操作。我这里设置了deny,表示需要通过认证才可以正常使用Consul。
-
acl.tokens.master:最高权限的令牌密钥,字符串内容;
与其他系统的Acl不同,一般都是通过设置账号、密码来认证用户。consul的就只是一个Token令牌,相当于密码,可以设置为一个随机的UUID。
master只是其中一个类似管理员角色的策略节点,如果想设置其他节点token,可以通过设置policy后生成token。
当你重启Consul后,发现需要登录,如下图:

用配置文件设置好的master的token登录就行。
这时候,Spring Cloud服务如果不配置AclToken会无法注册到注册中心,启动过程中会报错。
Exception:
OperationException(statusCode=403, statusMessage='Forbidden', statusContent='Permission denied')
com.ecwid.consul.v1.OperationException: OperationException(statusCode=403, statusMessage='Forbidden', statusContent='Permission denied')
at com.ecwid.consul.v1.agent.AgentConsulClient.agentServiceRegister(AgentConsulClient.java:278) ~[consul-api-1.4.1.jar:na]
at com.ecwid.consul.v1.ConsulClient.agentServiceRegister(ConsulClient.java:309) ~[consul-api-1.4.1.jar:na]
at org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry.register(ConsulServiceRegistry.java:67) [spring-cloud-consul-discovery-2.2.2.RELEASE.jar:2.2.2.RELEASE]
at org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry.register(ConsulServiceRegistry.java:42) [spring-cloud-consul-discovery-2.2.2.RELEASE.jar:2.2.2.RELEASE]
at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:239) [spring-cloud-commons-2.2.2.RELEASE.jar:2.2.2.RELEASE]
很明显,提示没有权限,无法注册服务,操作异常。
SpringBoot项目配置文件添加Acl配置
yml文件配置方式
spring:
cloud:
# 注册中心Spring Cloud Consul
consul:
discovery:
# 设置acl token值
acl-token: xxxxxxxxx-xxxxxxxxx-xaaaaaa
properties文件配置方式
spring.cloud.consul.discovery.acl-token=xxxxxxxxx-xxxxxxxxx-xaaaaaa
设置好对应的Token后,项目可以顺利启动,并注册到Consul。
网友评论