《云计算与虚拟化技术丛书 Service Mesh实战》—3.4.3 namer
3.4.3 namer
namer用于配置Linkerd的服务发现工具,Linkerd支持配置多个namer以满足不同需求,每个namer可对应一种服务发现机制,它负责把服务名字经过dtab转换得到的客户端名字解析为IP地址和端口集合。当前版本Linkerd支持多种服务发现工具,如基于文件的服务发现机制、Zookeeper、Consul等,甚至支持发现运行在k8s和marathon编排工具中的服务,使得Linkerd直接从k8s和marathon读取服务相关信息。namer配置包括下列内容。
kind:指定选择哪种类型的服务发现工具,比如上一章中使用的基于文件的服务发现,其类型为io.l5d.fs,还有本章将使用的Consul,其类型为io.l5d.consul。对namer配置,kind是强制要求配置的,否则出错。当前,Linkerd支持的namer类型有:
io.l5d.fs
io.l5d.serversets
io.l5d.consul
io.l5d.k8s
io.l5d.marathon
io.l5d.zkLeader
io.l5d.curator
io.l5d.rancher
io.l5d.rewrite
每种类型namer具体配置可参考官方文档namers(https://linkerd.io/config/1.3.6/linkerd/index.html#namers),在此不作一一介绍,本章着重介绍类型为io.l5d.consul的namer,当然后续章节也会对类型为io.l5d.k8s的namer进行详细介绍。
prefix:prefix依赖于namer,默认为/+kind对应的值,如/io.l5d.consul,也可将其自定义为任意其他以/打头的值。namer在解析名字时以/#+prefix作为前缀,如/#/io.l5d.consul/dc1/booking。
transformers:用于转换已解析得到的地址,后续会详细介绍。
experimental:标识namer是否处于试验状态,默认为false。
另外,基于所选择的namer类型,除配置上述通用配置外,可能还需配置特定额外配置,如示例中使用io.l5d.consul类型的namer除通用配置外,还需配置Consul地址和端口、是否包括服务标签、是否使用Consul的健康监测数据判断服务健康与否等,其配置如下。
namers:
- kind: io.l5d.consul
prefix: /io.l5d.consul
host: 127.0.0.1
port: 8500
includeTag: false
setHost: false
useHealthCheck: true
还有,Linkerd提供两种特殊的内置namer:inet和io.buoyant.rinet,其中inet对形如/$/inet/DNSOrIPAddress/Port的客户端名字进行解析,若DNSOrIPAddress为DNS记录,则查询DNS记录对应的IP地址,解析为IPAddress:Port集合,若为IPAddress,则直接解析为IPAddress:Port,比如/$/inet/127.0.0.1/4140会被解析为127.0.0.1:4140。而io.buoyant.rinet则对形如/$/io.buoyant.rinet/Port/DNSOrIPAddress的客户端名字进行解析。需要特别注意的是inet和io.buoyant.rinet都以/$打头,以此区分上述namer。
除上述所列出的namer,Linkerd还提供一些工具namer,用于辅助实现dtab的复杂变换,但不用作服务发现,我们称这些namer为rewriting namer,这包括以下工具。
io.buoyant.http.domainToPathPfx:重写形如/$/io.buoyant.http.domainToPathPfx/ <prefix>/ <host>的dtab路径为以<prefix>打头的前缀,然后以/替换<host>的.并反转,如/$/io.buoyant.http.domainToPathPfx/pfx/foo.buoyant.io/resource/name被重写为/pfx/io/buoyant/foo/resource/name。
io.buoyant.http.subdomainOfPfx:重写形如/$/io.buoyant.http.subdomainOfPfx/<domain>/<prefix>/<host>的dtab路径为以<prefix>打头的前缀,然后丢弃<host>的<domain>部分,如/$/io.buoyant.http.subdomainOfPfx/buoyant.io/pfx/foo.buoyant.io/resource/name被重写为/pfx/foo/resource/name。
io.buoyant.hostportPfx:重写形如/$/io.buoyant.hostportPfx/<prefix>/<host>:<port>/etc的dtab路径为以<prefix>打头的前缀,转换<host>:<port>为/host/port,然后连接/etc,如/$/io.buoyant.hostportPfx/pfx/host:port/etc被重写为/pfx/host/port/etc。需注意的是该namer不支持IPv6。
io.buoyant.porthostPfx:重写形如/$/io.buoyant.porthostPfx/<prefix>/<host>:<port>/etc的dtab路径为以<prefix>打头的前缀,转换<host>:<port>为/port/host,然后连接/etc,如/$/io.buoyant.porthostPfx/pfx/host:port/etc被重写为/pfx/port/host/etc。
与用于服务发现的namer不同的是rewriting namer以/$打头,而且无需在namer配置中显示配置即可使用。
现假如已获得客户端名字/#/io.l5d.consul/dc1/booking,其告之prefix为/io.l5d.consul的namer将解析该客户端名字成Consul数据中心为dc1,服务名字为booking对应的IP地址和端口集合,如192.168.1.12:39462 192.168.1.13:42251。
- 点赞
- 收藏
- 关注作者
评论(0)