7

我想在 K8S 中将 istio 与现有的 jaeger 跟踪系统一起使用,我开始按照官方链接安装 jaeger 系统,并使用 cassandra 作为后端存储。然后通过helm 方式安装 istio ,但只启用了一些选定的组件:

helm upgrade istio -i install/kubernetes/helm/istio --namespace istio-system \   
--set security.enabled=true \   
--set ingress.enabled=false \   
--set gateways.istio-ingressgateway.enabled=true \   
--set gateways.istio-egressgateway.enabled=false \   
--set galley.enabled=false \   
--set sidecarInjectorWebhook.enabled=true \  
--set mixer.enabled=false \   
--set prometheus.enabled=false \
--set global.proxy.envoyStatsd.enabled=false \
--set pilot.sidecar=true \ 
--set tracing.enabled=false

Jaeger 和 istio 安装在同一个命名空间内istio-sytem,完成后,它里面的所有 pod 都是这样的:

kubectl -n istio-system get pods                           
NAME            READY     STATUS    RESTARTS   AGE 
istio-citadel-5c9544c886-gr4db      1/1       Running   0          46m 
istio-ingressgateway-8488676c6b-zq2dz     1/1       Running   0        51m 
istio-pilot-987746df9-gwzxw               2/2       Running   1    51m 
istio-sidecar-injector-6bd4d9487c-q9zvk   1/1       Running   0    45m 
jaeger-collector-5cb88d449f-rrd7b         1/1       Running   0    59m 
jaeger-query-5b5948f586-gxtk7             1/1       Running   0    59m

然后我按照链接将 bookinfo 示例部署到另一个istio-play具有 label的名称空间中istio-injection=enabled,但是无论我如何刷新productpage页面,都没有将跟踪数据填充到 jaeger 中。

我想也许跟踪跨度是由混合器发送到 jaeger 的,就像 istio 做所有其他遥测东西的方式一样,所以我-set mixer.enabled=true,但不幸的是,只有一些服务像istio-mixeroristio-telementry被显示。最后我清理了上面所有的安装并一步一步地完成了这个任务,但是 bookinfo 应用程序的跟踪数据仍然没有。

我的问题是:istio 究竟是如何向 jaeger 发送跟踪数据的?Sidecar 代理是否像envoy 那样直接将其发送到 jaeger-collector( zipkin.istio-system:9411) ,或者数据流如下:?我如何调试 istio 网格内各种组件之间的数据流?sidecar-proxy -> mixer -> jaeger-collector

感谢您的帮助和信息:-)


更新:我再次尝试安装不带 helm 的 istio:,这次一切正常,和kubectl -n istio-system apply -f install/kubernetes/istio-demo.yaml之间一定有不同。kubectl wayhelm way

4

1 回答 1

4

根据我的经验和在线阅读,我在 Istio混合器常见问题解答中发现了这条有趣的线路

Mixer 跟踪生成由命令行标志控制:trace_zipkin_url、trace_jaeger_url 和 trace_log_spans。如果设置了这些标志值中的任何一个,则跟踪数据将直接写入这些位置。如果没有提供跟踪选项,Mixer 将不会生成任何应用程序级别的跟踪信息。

此外,如果您深入了解 Mixer helm chart,您会发现 Zipkin 和 Jaeger 的痕迹,这表明将跟踪信息传递给 Jaeger 的是混音器。

我也很困惑在其中一篇文章中读到这一行

Istio 在运行应用程序容器的 pod 中注入一个 sidecar 代理(Envoy)。这个 sidecar 代理透明地拦截(iptables 魔术)进出应用程序的所有网络流量。由于这种拦截,sidecar 代理处于一个独特的位置,可以自动跟踪所有网络请求(HTTP/1.1、HTTP/2.0 和 gRPC)。

在 Istio 混合器文档中,Envoy sidecar 在每个请求之前逻辑调用 Mixer 以执行前置条件检查,并在每个请求之后报告遥测。Sidecar 具有本地缓存​​,因此可以从缓存中执行大部分前提条件检查。此外,sidecar 缓冲传出的遥测数据,因此它只不经常调用 Mixer。

更新:您可以启用跟踪以了解 Istio 中的请求发生了什么以及混合器和特使的角色。在此处阅读更多信息

于 2018-11-25T03:17:34.610 回答