linkerd实战(5)consul服务发现

概述
前面我们把服务发现和dtab规则从linkerd放到了namerd中。然而在namerd中我们所用的服务发现都是基于文件系统的io.l5d.fs。接下来我们把服务注册和发现放到consul中,实现动态服务注册和发现机制。

安装consul
1、下载对应操作系统的consul版本
$ wget https://releases.hashicorp.com/consul/1.0.7/consul_1.0.7_linux_amd64.zip

2、解压
$ unzip consul_1.0.7_linux_amd64.zip

3、添加可执行权限
$ chomod u+x consul

4、启动consul,作为示例,我们以agent方式启动
$ ./consul agent -dev -ui -node=consul-dev -client=127.0.0.1

5、访问consul admin控制台
打开浏览器,访问:http://127.0.0.1:8500
linkerd实战(5)consul服务发现_第1张图片

在consul中注册服务
还记得我们之前用ngnix搭建了一个基本的服务提供者,接下来我们要把这个服务注册到consul中。在consul中注册服务有多种方式,可以使用配置文件,也可以使用http api。注册的内容格式如下:
{"service":{"id": "test","name": "test","address": "127.0.0.1","port": 80,"tags": ["dev"]}}

上述json描述了我们要注册一个id为test,名字为test的服务,提供了它的ip地址和端口。并且为这个服务打了tag “dev”。

在consul里面我们可以注册多个同名的服务,但是id要确保是唯一的,否则配置将会被覆盖。

1、配置文件方式注册服务,先关闭之前启动的consul
$ ./consul leave
2、创建配置文件目录
$ mkdir consul.d
3、创建服务注册配置
$ vi test.json
        {"service":{"id": "test","name": "test","address": "127.0.0.1","port": 80,"tags": ["dev"]}}
4、指定参数:-config-dir 方式启动consul
$ ./consul agent -dev -ui -node=consul-dev -client=127.0.0.1 -config-dir consul.d

5、查看consul admin
我们看到test服务成功注册到了consul。
linkerd实战(5)consul服务发现_第2张图片
我们还可以直接使用consul 提供的http api,通过curl快捷的注册服务。
$ curl -X PUT -d '{"id": "test2","name": "test","address": "127.0.0.1","port": 80,
"tags": ["dev"]}' http://127.0.0.1:8500/v1/agent/service/register

同样可以把服务注册到consul。

Namerd配置consul服务发现
修改namerd.yaml配置文件,将之前的namers配置io.l5d.fs改为io.l5d.consul
$ vi config\namerd.yaml
namers:
- kind: io.l5d.consul
host: 127.0.0.1
port: 8500

然后重启namerd服务,并使用namerctl添加dtab规则:
/svc => /#/io.l5d.consul/dc1;
其中dc1为consul默认的数据中心名称,只要跟consul保持一致即可。具体操作如下:
1、创建配置文件
$ vi config/dtab-consul-config
/svc => /#/io.l5d.consul/dc1;

2、将规则配置到namerd
$./namerctl dtab create web config/dtab-consul-config --base-url http://127.0.0.1:4180
Created web

3、通过namerd 控制台看到,规则被添加了。
linkerd实战(5)consul服务发现_第3张图片

执行
最后我们访问服务:
$ curl -H "Host:test" http://127.0.0.1:4140
It works!

consul服务发现配置详解
基本配置
namers:- kind: io.l5d.consul host: 127.0.0.1 port: 8500 includeTag: true useHealthCheck: false healthStatuses: - "passing" - "warning" setHost: true consistencyMode: stale
配置属性说明:
属性
默认值
说明
prefix
io.l5d.consul
解析前缀 /#/.
host
localhost
consul 主机名
port
8500
consul 端口
includeTag
false
如设置true,会从path中读取tag信息
useHealthCheck
false
如设置true,healthStatuses不满足的服务会过滤。
healthStatuses
passing
consul用来过滤服务的状态,可选 passing, warning, critical, maintenance.
如果配置多个,则按最优先级(maintenance > critical > warning > passing).
如 useHealthCheck 为 false 则不起效。
token
no authentication
请求consul api的token
setHost
false
如设置 true, 由Consul 解析的HTTP 请求头Host为${serviceName}.service.${datacenter}.${domain}。
 $domain 获取自 Consul.
consistencyMode
default
Consul API consistency modes  ,
可选 default, stale and consistent.
failFast
false
如设置 false,禁用failfast,增加Consul Client的错误。在agent模式下设置 false,直接访问高可用集群API设置 true 
preferServiceAddress
true
如设置 true 则优先使用service定义的地址,其次使用node地址。
如设置false默认使用node地址
weights
none
tag权重列表, 当一个node匹配了多个tag将取最大的权重。默认为1.0
tls
no tls
使用tls链接consul。 see  Consul Encryption  and  TLS .

Consul Path 参数
includeTag : false 时的Dtab Path模板
/#///
includeTag : true时的Dtab Path模板
/#////
占位符
是否必须
说明
prefix
yes
标识让linkerd使用consul解析的前缀,默认io.l5d.consul
datacenter
yes
consul dc的名称
tag
yes if includeTag is  true
请求中的consul tag信息
serviceName
yes
consul服务名

你可能感兴趣的:(linkerd)