Istio Bookinfo Demo

# 1. 简介

本章以一个由 Java、Python、Ruby、Node.js 四种语言实现的微服务应用为例,展示 DeepFlow 在多语言、Istio 服务网格下的 AutoTracing 能力。

# 2. 部署 Istio Bookinfo Demo

# 2.1 部署 Istio

你可参考 Istio 官方文档 (opens new window)部署 Istio。也可以使用如下命令快速部署:

curl -L https://istio.io/downloadIstio | sh -
cd istio-*
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y
1
2
3
4

DeepFlow 目前已经支持了 Golang 应用的 HTTPS 采集能力,其他语言的支持还在迭代中。我们在此 Demo 中先关闭 Istio mTLS:

kubectl apply -f - <<EOF
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: "default"
  namespace: "istio-system"
spec:
  mtls:
    mode: DISABLE
EOF
1
2
3
4
5
6
7
8
9
10

# 2.2 部署 Bookinfo Demo

我们使用的 Demo 源自这个 GitHub 仓库 (opens new window),它的应用架构如下:

Bookinfo Application with Istio

Bookinfo Application with Istio

使用如下命令可在 K8s 中快速部署 Demo:

kubectl apply -f https://raw.githubusercontent.com/deepflowio/deepflow-demo/main/Istio-Bookinfo/bookinfo.yaml
1

这个 Demo 原始的 GitHub 代码仓库中使用 Jaeger 进行了主动追踪,为了演示 AutoTracing 能力我们特意在上述部署脚本中去掉了 Jaeger。

# 3. 查看分布式追踪

前往 Grafana,打开 Distributed Tracing Dashboard,选择 namespace = deepflow-ebpf-istio-demo 后,可选择一个调用进行追踪,效果如下图:

eBPF Istio Demo

eBPF Istio Demo

访问 DeepFlow Online Demo (opens new window) 也可查看追踪效果。 上图中的调用链火焰图对应的拓扑图如下。

对这个追踪 Demo 我们总结一下:

  • 零插码:整个追踪过程不需要手动插入任何追踪代码,不需要向 HTTP Header 中注入任何 TraceID/SpanID
  • 多语言:支持对 Java、Python、Ruby、NodeJS 语言应用及 C/C++(curl/envoy)语言基础服务的追踪
  • 全链路:利用 eBPF 和 BPF,自动追踪到了这个 Trace 的 38 个 Span,含 24 个 eBPF Span、14 个 BPF Span
  • 全栈:支持追踪同 K8s Node 上两个 Pod 之间的网络路径,例如 Span 4-5 等
  • 全栈:支持追踪跨 K8s Node 上两个 Pod 之间的网络路径,即使中间经过了隧道封装,例如 Span 12-15 等(IPIP 隧道封装)
  • 全栈:支持追踪一个 Pod 内部从 Envoy Ingress、服务进程、Envoy Egress 的全过程,例如 Span 6-11 等