consul入门教程
consul概念
Consul简单的服务网络方案,用于连接和保护任何运行时平台以及共有或私有云服务。
consul 是一个分布式、高可用和易伸缩的配置和服务发现的工具
功能
- 服务发现
- 健康检查
- 键值存储
- 多数据中心
- 服务分割
注册服务
定义服务
- 创建配置目录
- 定义一个web配置
1
|
echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' > ./consul.d/web.json
|
- 启动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
- 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
|
- 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
功能:
- 监控agent服务
- 管理键值存储
- 安全服务
- UI任务表
连接服务网
使用Sidecar代理可用于为入站和出站连接自动建立TLS连接,而根本不知道Connect。这种类型的部署是控制服务实例之间的网络流量的代理,是服务网格。
启动Connect-unaware服务
如果是window环境没有socat和nc工具,自己编写的windows版本实验工具
下载windows版本 socat地址
下载windows版本 nc地址
- 启动一个socat服务
1
2
|
curl -O http://dev.matosiki.site/win/socat.exe
socat localhost:9191
|
- 启动一个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
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 connect proxy -sidecar-for web
|
用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
|