consul入门教程

consul概念

Consul简单的服务网络方案,用于连接和保护任何运行时平台以及共有或私有云服务。

consul 是一个分布式、高可用和易伸缩的配置和服务发现的工具

功能

  1. 服务发现
  2. 健康检查
  3. 键值存储
  4. 多数据中心
  5. 服务分割

注册服务

定义服务

  1. 创建配置目录
1
mkdir consul.d
  1. 定义一个web配置
1
echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' > ./consul.d/web.json
  1. 启动agent
1
2
3
consul agent -dev -config-dir=./consul.d
# 或者
consul agent -dev -enable-script-checks -config-dir=./consul.d

查询服务

使用DNS或者HTTP API 查询服务

我们注册的Web服务,这些约定和设置产生一个完全限定的域名web.service.consul

  1. DNS API
1
dig @127.0.0.1 -p 8600 web.service.consul

使用DNS API将整个地址/端口对检索为 SRV记录:

1
2
3
4
dig @127.0.0.1 -p 8600 web.service.consul SRV

web.service.consul.     0       IN      SRV     1 1 80 MAX.node.dc1.consul.
SRV记录表明Web服务正在端口80上运行并存在于节点上MAX.node.dc1.consul.

DNS API按标签过滤服务 基于标记的服务查询的格式是TAG.NAME.service.consul

1
dig @127.0.0.1 -p 8600 rails.web.service.consul
  1. HTTP API
1
curl http://localhost:8500/v1/catalog/service/web
1
curl http://localhost:8500/v1/health/service/web?passing

更新服务

可以通过更改配置文件并将SIGHUP代理文件发送到代理来更新服务定义。 这使您可以在不停机或不可用于服务查询的情况下更新服务。

consul UI

Consul UI允许运营商监控和管理Consul集群,开发人员可以使用consul进行服务发现和配置。

设置UI的访问权限

1
consul agent -dev -ui -config-dir=./consul.d

打开UIhttp://localhost:8500/ui

功能:

  1. 监控agent服务
  2. 管理键值存储
  3. 安全服务
  4. UI任务表

连接服务网

使用Sidecar代理可用于为入站和出站连接自动建立TLS连接,而根本不知道Connect。这种类型的部署是控制服务实例之间的网络流量的代理,是服务网格。

启动Connect-unaware服务

如果是window环境没有socat和nc工具,自己编写的windows版本实验工具 下载windows版本 socat地址 下载windows版本 nc地址

  1. 启动一个socat服务
1
2
curl -O http://dev.matosiki.site/win/socat.exe
socat localhost:9191
  1. 启动一个nc服务
1
2
3
curl -O http://dev.matosiki.site/win/nc.exe

nc localhost:9191

使用consul注册服务并连接

1
2
3
4
5
6
7
8
9
cat <<EOF | tee ./consul.d/socat.json
{
  "service": {
    "name": "socat",
    "port": 8181,
    "connect": { "sidecar_service": {} }
  }
}
EOF
1
2
3
4
#执行
consul reload

#或者 发送SIGHUP

这里的sidecar服务注册只是告诉Consul应该运行代理,Consul实际上不会为您运行代理进程

1
consul connect proxy -sidecar-for socat

连接服务

新的命令行启动

1
consul connect proxy -service web -upstream socat:9191

代理之间的连接现在已加密并获得授权

1
nc localhost:9191

注册从属服务

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
cat <<EOF |  tee ./consul.d/web.json
{
  "service": {
    "name": "web",
    "port": 8080,
    "connect": {
      "sidecar_service": {
        "proxy": {
          "upstreams": [{
             "destination_name": "socat",
             "local_bind_port": 9191
          }]
        }
      }
    }
  }
}
EOF

这将为服务“web”注册一个sidecar代理,该服务应该在端口9191上监听以建立与“socat”的连接作为“web”。

1
consul reload
1
consul connect proxy -sidecar-for web
1
nc localhost:9191

用intentions控制访问

intention用于定义可以通信的服务,在开发模式代理中,ACL系统默认为"全部允许"

添加一条拒绝web到socat访问

1
consul intention create -deny web socat
1
2
nc localhost:9191
# 执行失败
1
2
3
4
# 删除intentioni并尝试重新连接
consul intention delete web socat

nc localhost:9191

consul 集群

启动代理商

加入集群

启动时自动加入集群

查询节点

离开节点

注册健康检查

定义检查

检查健康状况

kv数据

获取redis/config/minconns路径值

1
consul kv get redis/config/minconns
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 存储数据
consul kv put redis/config/minconns 1

# 更新数据
consul kv put redis/config/maxconns 25

# 存储数据
consul kv put -flags=42 redis/config/users/admin abcd1234

# 检索元数据
consul kv get -detailed redis/config/minconns

# 列出所有键
consul kv get -recurse

# 删除数据
consul kv delete redis/config/minconns

# 删除redi前缀的数据
consul kv delete -recurse redis
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 普通更新
consul kv put foo bar
consul kv get foo
consul kv put foo good
consul kv get foo



# 使用check-And-Set操作提供原子密钥更新

consul kv put -cas -modify-index=123 foo bar

consul kv put -cas -modify-index=123 foo bar