
Consul是由HashCorp基于Go语言开发的一个分布式高可用的系统,提供了服务发现、健康检查、配置(KV存储)和分段功能可以被独立使用,每个提供给Consul的节点都运行了一个Consul代理,服务注册和发现时这些代理都不是必须的,它们主要的作用是对服务节点进行健康检查(也可以代理对Consul Server的访问,如果部署的是Consul Server集群的话)。
服务节点注册信息保存在Consul Server中,每个代理可以和一个或多个Consul Server进行交互,在整个微服务架构中,Consul Server作为注册中心承担着服务注册与发现任务,作用异常重要,如果出现问题,则服务注册和发现将不能完成,服务调用失败,因此,在生产环境中,我们会部署一个Consul Server集群(3到5台Consul服务器),集群会通过分布式一致性协议(基于Paxos的Raft算法)选举一个领袖并进行数据的同步,当一台机器挂掉,会选举新的领袖,从而提供了系统的可用性。
推荐按官方docker-compose-datacenter教程使用docker-compose命令搭建consul环境:
执行如下命令,克隆官方github仓库获取配置文件和资源
$ git clone https://github.com/hashicorp/learn-consul-docker.git然后进入datacenter-deploy-service-discovery目录,使用服务发现的环境:
$ cd datacenter-deploy-service-discovery启动容器:
$ docker-compose up -d这样一个用于服务发现的Consul环境就搭建完成了。
进入容器,运行consul members即可查看集群中所有成员,目前有两个:
$ sudo docker exec -it consul-server /bin/sh
/ # consul members
Node Address Status Type Build Protocol DC Partition Segment
consul-server 192.168.0.3:8301 alive server 1.12.0 2 dc1 default <all>
consul-client 192.168.0.2:8301 alive client 1.12.0 2 dc1 default <default>Consul使用Access Control List(ACL访问控制列表)来保护对UI、API、CLI、服务通信和代理通信的访问;ACL的核心是将规则分组为策略,然后将一个或多个策略与令牌相关联。
Consul使用token的形式进行安全控制访问,配置ACL的前提是所有节点都需要将ACL启用,然后还要一个boostrap token,因为针对子权限(策略)生成token的时候需要用到。
要启用ACL,需要将以下ACL参数添加到配置文件中,然后重新启动Consul服务:
"acl": {
"enabled": true,
"default_policy": "deny",
"enable_token_persistence": true,
"tokens": {
"initial_management": "xxxxxx"
}
}参数说明:
更多的参数说明请参考官方文档。
注意:Token持久化是在Consul 1.4.3以后的版本才有的,在此前的版本中使用HTTP API时不能持久化token。
文中代码已上传github。