《云计算与虚拟化技术丛书 Service Mesh实战》—3.4.3 namer

举报
华章计算机 发表于 2019/06/06 12:41:59 2019/06/06
【摘要】 本书摘自《云计算与虚拟化技术丛书 Service Mesh实战:基于Linkerd和Kubernetes的微服务实践》一文中的第3章,第3.4.3节,作者是杨彰显。

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。  


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。