Istio Bookinfo Demo
创建时间:2024-06-01 最近修改时间:2024-06-24
#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
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
3
4
5
6
7
8
9
10
#2.2 部署 Bookinfo Demo
我们使用的 Demo 源自这个 GitHub 仓库 (opens new window),它的应用架构如下:
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
访问 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 等