Istio 服务及其使用

Istio services and their usage

我已经使用具有以下设置的 helm chart 安装了 Istio:

helm template --set kiali.enabled=true --set tracing.enabled=true --set pilot.traceSampling=100 --set grafana.enabled=true --set sidecarInjectorWebhook.enabled=true install/kubernetes/helm/istio --name istio --namespace istio-system > istio.yaml

当我检查集群中 istio-system 命名空间下的服务 运行 时,我看到了多个围绕跟踪的服务。

jaeger-agent             ClusterIP      None      <none>     5775/UDP,6831/UDP,6832/UDP                                                                                                                   
jaeger-collector         ClusterIP      10.100.66.107    <none>  14267/TCP,14268/TCP
tracing                  ClusterIP      10.100.81.123    <none>   80/TCP                                                                                                                                       
zipkin                   ClusterIP      10.100.64.9      <none>   9411/TCP 

由于 Jaeger 是默认设置,我原以为只会看到 jaeger-collector。目前尚不清楚 jaeger-agenttracingzipkin 的作用是什么,有什么想法吗? ,

只是事先提到(您可能已经知道)Kubernetes 服务不是一段代码中的 "service"。这是 Kubernetes 组件和部署通过始终保持不变的界面相互通信的一种方式,无论有多少 pods 或服务器。

当 Istio 部署它的跟踪机制时,它会部署模块化部分,因此它可以独立部署它们,也可以独立扩展它们,非常像微服务。

通常,Kubernetes 部署的实用程序将部署为组成大局的几个部分。例如你的情况:

jaeger-agent - 这是将从您的节点收集所有流量和跟踪的组件。

jaeger-collector - 这是所有 jaeger-agents 将推送它们在节点上找到的日志和跟踪的地方,收集器将聚合这些日志和跟踪,因为跟踪可能跨越多个节点。

跟踪 - 可能是将跟踪 ID 注入网络流量以供代理监视的组件。

zipkin - 可能是 UI,它允许使用跟踪进行调试,或重放请求等。

以上内容可能并不完全正确,但希望您了解为什么要部署多个部分。

与我们部署 mysql 和我们的容器分开部署的方式相同,Kubernetes 项目通常部署为一组部署或 pods。

补充@christiaan-vermeulen 的回答:tracing 服务是 Jaeger 的 UI(jaeger-query),因此相同的 URL 可用于替代后端,而Zipkin 服务是一种便利服务,允许使用 Zipkin 跟踪器(如 Brave)的应用程序将数据发送到 Jaeger,而无需进行复杂的更改。如果仔细观察,Zipkin 服务也由 jaeger-collector 支持。