Skip to content

Commit e3f17e2

Browse files
authored
Merge pull request #272 from deepflowio/Istio_Bookinfo_Demo
Add distributed Tracing demo (Istio Bookinfo Demo)
2 parents 5bf6f2c + 0c726e8 commit e3f17e2

1 file changed

Lines changed: 220 additions & 0 deletions

File tree

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
---
2+
title: Istio Bookinfo Demo
3+
permalink: /auto-tracing/istio-bookinfo-demo
4+
---
5+
6+
# Introduction
7+
8+
This chapter uses a microservices application implemented in four languages: Java, Python, Ruby, and Node.js, to demonstrate DeepFlow's AutoTracing capabilities within a multi-language Istio service mesh environment.
9+
10+
# Deploy Istio Bookinfo Demo
11+
12+
## Deploy Istio
13+
14+
You can refer to the [official Istio documentation](https://istio.io/latest/zh/docs/setup/getting-started/) for deploying Istio. Alternatively, you can use the following command for a quick deployment:
15+
```bash
16+
curl -L https://istio.io/downloadIstio | sh -
17+
cd istio-*
18+
export PATH=$PWD/bin:$PATH
19+
istioctl install --set profile=demo -y
20+
```
21+
22+
Currently, DeepFlow has already supported HTTPS data collection for Golang applications, and support for other languages is still in progress. For this demo, we will temporarily disable Istio mTLS:
23+
```bash
24+
kubectl apply -f - <<EOF
25+
apiVersion: security.istio.io/v1beta1
26+
kind: PeerAuthentication
27+
metadata:
28+
name: "default"
29+
namespace: "istio-system"
30+
spec:
31+
mtls:
32+
mode: DISABLE
33+
EOF
34+
```
35+
36+
## Deploy Bookinfo Demo
37+
38+
The demo we are using is sourced from [this GitHub repository](https://github.com/istio/istio/tree/master/samples/bookinfo), and its application architecture is as follows:
39+
40+
![Bookinfo Application with Istio](https://istio.io/latest/docs/examples/bookinfo/withistio.svg)
41+
42+
You can quickly deploy the demo in Kubernetes using the following command:
43+
```bash
44+
kubectl apply -f https://raw.githubusercontent.com/deepflowio/deepflow-demo/main/Istio-Bookinfo/bookinfo.yaml
45+
```
46+
47+
The original GitHub code repository for this demo utilizes Jaeger for active tracing. However, to showcase the AutoTracing capability, we intentionally removed Jaeger from the deployment script mentioned above.
48+
49+
# View Distributed Tracing
50+
51+
Go to Grafana, open the `Distributed Tracing` Dashboard, and select `namespace = deepflow-ebpf-istio-demo`. You can then choose a call for tracing, and the result will be as shown in the following image:
52+
53+
![eBPF Istio Demo](https://yunshan-guangzhou.oss-cn-beijing.aliyuncs.com/pub/pic/2022082363044b235153a.png)
54+
55+
[Access the DeepFlow Online Demo](https://ce-demo.deepflow.yunshan.net/d/Distributed_Tracing/distributed-tracing?var-namespace=deepflow-ebpf-istio-demo&from=deepflow-doc) You can also observe the tracing effect. The topology diagram corresponding to the call chain flame graph in the above image is as follows:
56+
57+
```mermaid
58+
flowchart TD
59+
60+
loadgenerator_curl_send(1-eBPF: loadgenerator curl send):::loadgenerator
61+
loadgenerator_envoy_egress_recv(2-eBPF: loadgenerator envoy egress recv):::loadgenerator
62+
loadgenerator_envoy_egress_send(3-eBPF: loadgenerator envoy egress send):::loadgenerator
63+
loadgenerator_vnic_send(4-BPF: loadgenerator vnic send):::nic
64+
65+
productpage_vnic_recv(5-BPF: productpage vnic recv):::nic
66+
productpage_envoy_ingress_recv(6-eBPF: productpage envoy ingress recv):::productpage_1
67+
productpage_envoy_ingress_send(7-eBPF: productpage envoy ingress send):::productpage_1
68+
productpage_python_recv(8-eBPF: productpage python recv):::productpage_2
69+
productpage_python_send_d("9-eBPF: productpage python send ->details"):::productpage_2
70+
productpage_envoy_egress_recv_d("10-eBPF: productpage envoy egress recv ->details"):::productpage_2
71+
productpage_envoy_egress_send_d("11-eBPF: productpage envoy egress send ->details"):::productpage_2
72+
productpage_vnic_send_d("12-BPF: productpage vnic send ->details"):::nic
73+
node2_nic_send_pd("13-BPF: node2 nic send prod->details"):::nic
74+
node1_nic_recv_pd("14-BPF: node1 nic recv prod->details"):::nic
75+
76+
details_vnic_recv(15-BPF: details vnic recv):::nic
77+
details_envoy_ingress_recv(16-eBPF: details envoy ingress recv):::details_1
78+
details_envoy_ingress_send(17-eBPF: details envoy ingress send):::details_1
79+
details_ruby_recv(18-eBPF: details ruby recv):::details_2
80+
81+
productpage_python_send_r("19-eBPF: productpage python send prod->review"):::productpage_2
82+
productpage_envoy_egress_recv_r("20-eBPF: productpage envoy egress recv prod->review"):::productpage_2
83+
productpage_envoy_egress_send_r("21-eBPF: productpage envoy egress send prod->review"):::productpage_2
84+
productpage_vnic_send_r("22-BPF: productpage vnic send prod->review"):::nic
85+
node2_nic_send_pr("23-BPF: node2 nic send prod->review"):::nic
86+
node1_nic_recv_pr("24-BPF: node1 nic recv prod->review"):::nic
87+
88+
reviews_vnic_recv(25-BPF: reviews vnic recv):::nic
89+
reviews_envoy_ingress_recv(26-eBPF: reviews envoy ingress recv):::reviews_1
90+
reviews_envoy_ingress_send(27-eBPF: reviews envoy ingress send):::reviews_1
91+
reviews_java_recv(28-eBPF: reviews java recv):::reviews_2
92+
reviews_java_send(29-eBPF: reviews java send):::reviews_2
93+
reviews_envoy_egress_recv(30-eBPF: reviews envoy egress recv):::reviews_2
94+
reviews_envoy_egress_send(31-eBPF: reviews envoy egress send):::reviews_2
95+
reviews_vnic_send(32-BPF: reviews vnic send):::nic
96+
node1_nic_send_rr("33-BPF: node1 nic send reviews->ratings"):::nic
97+
node2_nic_recv_rr("34-BPF: node2 nic recv reviews->ratings"):::nic
98+
99+
ratings_vnic_recv(35-BPF: ratings vnic recv):::nic
100+
ratings_envoy_ingress_recv(36-eBPF: ratings envoy ingress recv):::ratings_1
101+
ratings_envoy_ingress_send(37-eBPF: ratings envoy ingress send):::ratings_1
102+
ratings_nodejs_recv(38-eBPF: ratings node.js recv):::ratings_2
103+
104+
subgraph node2-1 [k8s node2]
105+
subgraph loadgenerator pod
106+
subgraph loadgenerator curl container
107+
loadgenerator_curl_send
108+
end
109+
subgraph loadgenerator envoy container
110+
loadgenerator_envoy_egress_recv
111+
loadgenerator_envoy_egress_send
112+
end
113+
end
114+
115+
loadgenerator_vnic_send
116+
productpage_vnic_recv
117+
118+
subgraph productpage pod
119+
subgraph productpage envoy container
120+
productpage_envoy_ingress_recv
121+
productpage_envoy_ingress_send
122+
productpage_envoy_egress_recv_d
123+
productpage_envoy_egress_send_d
124+
productpage_envoy_egress_recv_r
125+
productpage_envoy_egress_send_r
126+
end
127+
subgraph productpage python container
128+
productpage_python_recv
129+
productpage_python_send_d
130+
productpage_python_send_r
131+
end
132+
end
133+
134+
productpage_vnic_send_d
135+
productpage_vnic_send_r
136+
node2_nic_send_pd
137+
node2_nic_send_pr
138+
end
139+
140+
subgraph node2-2 [k8s node2]
141+
node2_nic_recv_rr
142+
ratings_vnic_recv
143+
144+
subgraph ratings pod
145+
subgraph ratings envoy container
146+
ratings_envoy_ingress_recv
147+
ratings_envoy_ingress_send
148+
end
149+
subgraph ratings nodejs container
150+
ratings_nodejs_recv
151+
end
152+
end
153+
end
154+
155+
subgraph k8s node1
156+
node1_nic_recv_pd
157+
node1_nic_recv_pr
158+
details_vnic_recv
159+
reviews_vnic_recv
160+
161+
subgraph details pod
162+
subgraph details envoy container
163+
details_envoy_ingress_recv
164+
details_envoy_ingress_send
165+
end
166+
subgraph details ruby container
167+
details_ruby_recv
168+
end
169+
end
170+
subgraph reviews pod
171+
subgraph reviews envoy container
172+
reviews_envoy_ingress_recv
173+
reviews_envoy_ingress_send
174+
reviews_envoy_egress_recv
175+
reviews_envoy_egress_send
176+
end
177+
subgraph reviews java container
178+
reviews_java_recv
179+
reviews_java_send
180+
end
181+
end
182+
183+
reviews_vnic_send
184+
node1_nic_send_rr
185+
end
186+
187+
loadgenerator_curl_send --> loadgenerator_envoy_egress_recv --> loadgenerator_envoy_egress_send --> loadgenerator_vnic_send --> productpage_vnic_recv
188+
189+
productpage_vnic_recv --> productpage_envoy_ingress_recv --> productpage_envoy_ingress_send --> productpage_python_recv
190+
productpage_python_recv --> productpage_python_send_d --> productpage_envoy_egress_recv_d --> productpage_envoy_egress_send_d --> productpage_vnic_send_d --> node2_nic_send_pd -->|IPIP encap| node1_nic_recv_pd --> details_vnic_recv
191+
productpage_python_recv --> productpage_python_send_r --> productpage_envoy_egress_recv_r --> productpage_envoy_egress_send_r --> productpage_vnic_send_r --> node2_nic_send_pr -->|IPIP encap| node1_nic_recv_pr --> reviews_vnic_recv
192+
193+
details_vnic_recv --> details_envoy_ingress_recv --> details_envoy_ingress_send --> details_ruby_recv
194+
195+
reviews_vnic_recv --> reviews_envoy_ingress_recv --> reviews_envoy_ingress_send --> reviews_java_recv
196+
reviews_java_recv --> reviews_java_send --> reviews_envoy_egress_recv --> reviews_envoy_egress_send --> reviews_vnic_send --> node1_nic_send_rr -->|IPIP encap| node2_nic_recv_rr --> ratings_vnic_recv
197+
198+
ratings_vnic_recv --> ratings_envoy_ingress_recv --> ratings_envoy_ingress_send --> ratings_nodejs_recv
199+
200+
classDef loadgenerator fill:#8498d1,color:white;
201+
classDef nic fill:#a1a1a1,color:white;
202+
classDef productpage_1 fill:#9cdbc3,color:black;
203+
classDef productpage_2 fill:#eadb92,color:black;
204+
classDef details_1 fill:#16a9e8,color:white;
205+
classDef details_2 fill:#b38ebc,color:white;
206+
classDef reviews_1 fill:#49b292,color:white;
207+
classDef reviews_2 fill:#ceb961,color:black;
208+
classDef ratings_1 fill:#6aaec6,color:black;
209+
classDef ratings_2 fill:#aa48bc,color:black;
210+
```
211+
212+
Let's summarize this tracing demo:
213+
214+
- Zero Intrusion: The entire tracing process requires no manual insertion of tracking code and no injection of TraceID/SpanID into HTTP Headers.
215+
- Multi-Language: Supports tracing of applications in Java, Python, Ruby, NodeJS, and basic services in C/C++ (curl/envoy) languages.
216+
- End-to-End: Utilizing eBPF and cBPF, automatic tracing encompasses 38 spans for this trace, including 24 eBPF spans and 14 BPF spans.
217+
- Full-Stack: Supports tracing network paths between two pods on the same K8s node, e.g., Span 4-5.
218+
- Full-Stack: Supports tracing network paths between two pods across K8s nodes, even when traversing tunnel encapsulation, e.g., Span 12-15 (IPIP tunnel encapsulation).
219+
- Full-Stack: Supports tracing the complete journey within a single pod, including from Envoy Ingress, service process, to Envoy Egress, e.g., Span 6-11.
220+

0 commit comments

Comments
 (0)