istio kiali jaeger 关联

发布时间:2021-01-26 13:19:09编辑:admin阅读(3598)

    一、jaeger 介绍

    jaeger 官网:https://www.jaegertracing.io/

     

    jaeger 是 Uber 开源的分布式跟踪系统,用于微服务的监控和全链路跟踪,其设计思想来自于 Dapper 和 zipkin。jaeger 特征包括:

     

    1. 分布式上下文传播

    2. 分布式事务监控

    3. Root 原因分析

    4. 服务依赖性分析

    5. 性能/延迟优化

     

    二、jaeger 安装

    如果你使用 istioctl profile demo 安装 istio 的话,jaeger 默认就是安装好的

    [root@k8s-master k8s]# kubectl get svc -n istio-system
    NAME                   TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                                                      AGE
    grafana                ClusterIP   10.1.5.34      <none>        3000/TCP                                                                     6h54m
    istio-egressgateway    ClusterIP   10.1.247.154   <none>        80/TCP,443/TCP,15443/TCP                                                     6h55m
    istio-ingressgateway   NodePort    10.1.117.117   <none>        15021:32064/TCP,80:32223/TCP,443:32254/TCP,31400:30364/TCP,15443:30581/TCP   6h55m
    istiod                 ClusterIP   10.1.76.150    <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP                                        6h56m
    jaeger-collector       ClusterIP   10.1.74.203    <none>        14268/TCP,14250/TCP                                                          23m
    kiali                  NodePort    10.1.4.30      <none>        20001:31461/TCP,9090:32540/TCP                                               6h54m
    prometheus             ClusterIP   10.1.198.172   <none>        9090/TCP                                                                     6h54m
    tracing                ClusterIP    10.1.122.6     <none>        80:/TCP                                                                 23m
    zipkin                 ClusterIP   10.1.171.167   <none>        9411/TCP                                                                     23m

    注意:在istio老版本叫jaeger-query,新版本叫tracing

     

    为了可以将 jaeger 暴露在 k8s 集群外访问,需要将 tracing的 ClusterIP 服务类型更改为 NodePort。执行语句如下

    kubectl patch svc -n istio-system tracing -p '{"spec":{"type": "NodePort"}}'

    查看svc端口

    [root@k8s-master k8s]# kubectl get svc -n istio-system|grep tracing
    tracing                NodePort    10.1.122.6     <none>        80:31137/TCP                                                                 26m
    可以看到暴露的端口为:31137

     

    使用浏览器访问:

    http://192.168.31.236:31137/jaeger/

    注意:192.168.31.236是k8s-master地址

    效果如下:

    1.png

     

    三、kiali 关联 jaeger

    kiali 是可视化服务网格组件,截图如下:

    1.png

     

    点击上面箭头 Distributed Tracing 链接可以打开 jaeger。如果访问不到,说明你本地的浏览器并不能直接访问到 kiali 设置的 jaeger 外部链接。

    注意:默认是没有的,我是关联之后才有的,莫慌。

     

    设置 kiali jaeger 外部链接地址

    编辑 kiali configmap:

    kubectl edit configmap -n istio-system kiali

    在 external_services.tracing.url 内容下添加 jaeger 外部链接,链接地址就是 istio-system 命名空间下 jaeger-query 服务的宿主机地址和 nodeport

    external_services:
          custom_dashboards:
            enabled: true
          tracing:
            url: http://192.168.31.236:31137/jaeger
            in_cluster_url: http://tracing/jaeger


    编辑 kiali configmap 后,需要删除并重新生成 kiali pod,好让配置挂载生效,执行语句如下

    kubectl delete pod -n istio-system $(kubectl get pod -n istio-system | grep -i kiali | awk '{print $1}')

     

    执行完后,再次查看 kiali pod

    [root@k8s-master k8s]# kubectl get pods -n istio-system|grep kiali
    kiali-667b888c56-nt27g                  1/1     Running   0          15m

     

    查看发现 url 值已经生效:

    [root@k8s-master k8s]# kubectl -n istio-system exec -it kiali-667b888c56-nt27g -- cat /kiali-configuration/config.yaml
    auth:
      openid: {}
      openshift:
        client_id_prefix: kiali
      strategy: anonymous
    ...
    external_services:
      custom_dashboards:
        enabled: true
      tracing:
        url: http://192.168.31.236:31137/jaeger
        in_cluster_url: http://tracing/jaeger

    再次刷新访问 kiali,就会在左侧栏出现Distributed Tracing,点击它,就会打开jaeger,效果同上!

     

    四、kiali jaeger 流量关联

    以上的操作中通过 kiali 可以打开 jaeger 了,还可以通过实际流量将 kiali 和 jaeger 关联起来,首先打入一些流量,这里采用的是 istio 的官方用例 bookinfo:

    while true; do sleep 1;curl http://192.168.31.16:32223/productpage; done

    访问 kiali 的 service 菜单标签:

    1.png

     

     双击 productpage 进入微服务,然后选择标签页 Traces,再点击蓝色圆圈(trace 点)后会显示该 tracing 的路径信息,然后再选择链接(View Trace in Tracing):

    1.png

     

     点击View in Tracing,效果如下:

    1.png

     

    点击下面的istio-ingressgateway: productpage.default.svc.cluster.local:9080/productpage

    1.png

     

    效果如下:

    1.png

     

     

    本文参考链接:

    https://blog.51cto.com/14268033/2488805


关键字