概述
上一篇我们一步一步搭建了linkerd示例,用到了默认的Identifier将服务调用方的请求转换成service name。现在我们来具体了解一下linkerd中Identifier的使用。
在linkerd中所有的基于http/1.1协议的Identifier都有一个kind属性配置,不同的kind配置使用不同转换策略对请求进行转换生成service name。如果不配置默认为kind:io.l5d.header.token
Header Token Identifier
将使用http header的项作为servive name的标识。如果不设置header名称,默认会使用Host。
kind:io.l5d.header.token
额外属性配置:
配置名
|
默认值
|
描述
|
header
|
Host
|
选用哪个Http Header作为service name标识
|
转换目标service name模板:
/ dstPrefix / [headerValue]
模板占位符
|
默认值
|
描述
|
dstPrefix
|
/svc
|
在routers中配置的dstPrefix前缀值
|
headerValue
|
N/A
|
配置的header值
|
示例:
修改示例,我们采用test-header作为自定义的header,配置调整如下:
routers:
- protocol: http
identifier:
kind: io.l5d.header.token
header: test-header
dtab: |
/svc => /#/io.l5d.fs;
servers:
- port: 4140
ip: 0.0.0.0
运行:
$ curl -H "test-header:test"
http://127.0.0.1:4140
Method and Host Identifier
将组合使用http header的项Host,method和URL(可选)作为servive name的标识。
kind: io.l5d.methodAndHost
额外属性配置:
配置名
|
默认值
|
描述
|
httpUriInDst
|
false
|
是否把请求uri作为service name标识的一部分,
建议使用path identifier来更精确控制uri
|
Http1.1中转换目标service name模板:
/ dstPrefix / 1.1 / method / host [/ uri* ]
Http1.0中转换目标service name模板(没有host信息):
/ dstPrefix / 1.1 / method [/ uri* ]
模板占位符
|
默认值
|
描述
|
dstPrefix
|
/svc
|
|