Linkerd 使用指南
本文是 Linkerd 使用指南,我们着重讲解在 kubernetes 中如何使用 linkerd 作为 kubernetes 的 Ingress controller。
前言
Linkerd 作为一款 service mesh 与kubernetes 结合后主要有以下几种用法:
作为服务网关,可以监控 kubernetes 中的服务和实例
使用 TLS 加密服务
通过流量转移到持续交付
开发测试环境(Eat your own dog food)、Ingress 和边缘路由
给微服务做 staging
分布式 tracing
作为 Ingress controller
使用 gRPC 更方便
以下我们着重讲解在 kubernetes 中如何使用 linkerd 作为 kubernetes 的 Ingress controller,并作为边缘节点代替 Traefik 的功能,详见 边缘节点的配置。
准备
安装测试时需要用到的镜像有:
buoyantio/helloworld:0.1.4
buoyantio/jenkins-plus:2.60.1
buoyantio/kubectl:v1.4.0
buoyantio/linkerd:1.1.2
buoyantio/namerd:1.1.2
buoyantio/nginx:1.10.2
linkerd/namerctl:0.8.6
openzipkin/zipkin:1.20
tutum/dnsutils:latest这些镜像可以直接通过 Docker Hub 获取,我将它们下载下来并上传到了自己的私有镜像仓库 harbor-001.jimmysong.io 中,下文中用到的镜像皆来自我的私有镜像仓库,yaml 配置见 linkerd目录,并在使用时将配置中的镜像地址修改为你自己的。
部署
首先需要先创建 RBAC,因为使用 namerd 和 ingress 时需要用到。
Linkerd 提供了 Jenkins 示例,在部署的时候使用以下命令:
访问 http://jenkins.jimmysong.io


注意:要访问 Jenkins 需要在 Ingress 中增加配置,下文会提到。
在 kubernetes 中使用 Jenkins 的时候需要注意 Pipeline 中的配置:
frontendIP 的地址要配置成 service 的 Cluster IP ,因为我们没有用到LoadBalancer。
需要安装 namerd,namerd 负责 dtab 信息的存储,当然也可以存储在 etcd、consul中。dtab 保存的是路由规则信息,支持递归解析,详见 dtab。
流量切换主要是通过 dtab 来实现的,通过在 HTTP 请求的 header 中增加 l5d-dtab 和 Host 信息可以对流量分离到 kubernetes 中的不同 service 上。
遇到的问题
Failed with the following error(s) Error signal dtab is already marked as being deployed!
因为该 dtab entry 已经存在,需要删除后再运行。
访问 http://namerd.jimmysong.io

dtab 保存在 namerd 中,该页面中的更改不会生效,需要使用命令行来操作。
使用 namerctl 来操作。
注意:update 时需要将更新文本先写入文件中。
部署 Linkerd
直接使用 yaml 文件部署,注意修改镜像仓库地址。
为了在本地调试 linkerd,我们将 linkerd 的 service 加入到 ingress 中,详见 边缘节点配置。
在 Ingress 中增加如下内容:
在本地/etc/hosts中添加如下内容:
测试路由功能
使用 curl 简单测试。
单条测试
请注意请求返回的结果,表示访问的是 world-v1 service。
使用 ab test。
监控 kubernets 中的服务与实例
访问 http://linkerd.jimmysong.io 查看流量情况
Outcoming

Incoming

访问 http://linkerd-viz.jimmysong.io 查看应用 metric 监控

测试路由
测试在 http header 中增加 dtab 规则。
请注意调用返回的结果,表示调用的是 world-v2 的 service。
另外再对比 ab test 的结果与 linkerd-viz 页面上的结果,可以看到结果一致。
但是我们可能不想把该功能暴露给所有人,所以可以在前端部署一个 nginx 来过滤 header 中的 l5d-dtab 打头的字段,并通过设置 cookie 的方式来替代 header 里的 l5d-dtab 字段。
将 Linkerd 作为 Ingress controller
将 Linkerd 作为 kubernetes ingress controller 的方式跟将 Treafik 作为 ingress controller 的过程过程完全一样,可以直接参考 边缘节点配置。
架构如下图所示。

(图片来自 A Service Mesh for Kubernetes - Buoyant.io)
当然可以绕过 kubernetes ingress controller 直接使用 linkerd 作为边界路由,通过 dtab 和 linkerd 前面的 nginx 来路由流量。
参考
Last updated
Was this helpful?