TrumanWong

Consul简介和使用

TrumanWong
6/28/2022

简介

Consul是由HashCorp基于Go语言开发的一个分布式高可用的系统,提供了服务发现、健康检查、配置(KV存储)和分段功能可以被独立使用,每个提供给Consul的节点都运行了一个Consul代理,服务注册和发现时这些代理都不是必须的,它们主要的作用是对服务节点进行健康检查(也可以代理对Consul Server的访问,如果部署的是Consul Server集群的话)。

服务节点注册信息保存在Consul Server中,每个代理可以和一个或多个Consul Server进行交互,在整个微服务架构中,Consul Server作为注册中心承担着服务注册与发现任务,作用异常重要,如果出现问题,则服务注册和发现将不能完成,服务调用失败,因此,在生产环境中,我们会部署一个Consul Server集群(3到5台Consul服务器),集群会通过分布式一致性协议(基于PaxosRaft算法)选举一个领袖并进行数据的同步,当一台机器挂掉,会选举新的领袖,从而提供了系统的可用性。

安装

推荐按官方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>

ACL配置

Consul使用Access Control ListACL访问控制列表)来保护对UIAPICLI、服务通信和代理通信的访问;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"
    }
  }

参数说明:

  1. enabled:默认为falsetrue代表启用ACL
  2. default_policy:默认为allow,如果需要自定义权限,需要将其设置为deny
  3. enable_token_persistence:表示启用token持久化,将token持久化存储到磁盘上;

更多的参数说明请参考官方文档

注意:Token持久化是在Consul 1.4.3以后的版本才有的,在此前的版本中使用HTTP API时不能持久化token

文中代码已上传github