31.云原生Istio可观测性之官网Bookinfo应用实战演示

云原生专栏大纲

可观测性

Istio 集成了 Jaeger、Zipkin 和 Skywalking 等链路追踪应用,能够有效地捕获服务网格的结构,展示网络拓扑结构,并分析网格的健康状况。
这一切都得益于 Envoy 代理的实现。由于所有进出流量都需要经过 Envoy 代理,Envoy 可以捕获这些流量记录,并将其推送到相应的链路追踪系统中。这样一来,可以链路追踪系统轻松地监控和分析服务网格内的流量情况。
另外 Istio 还支持 Prometheus、 Grafana 收集指标数据。
下面我们将使用官方的模板部署 Kiali 、 还有 Jaeger,然后通过 Kiali 统一查看集群的指标信息。
Kiali是一个用于可视化和监控Istio服务网格的控制面板。它提供了一个直观的用户界面,帮助用户了解和管理服务网格中的微服务应用程序。
image.png
kiali 架构还是比较简单的,属于单体应用。kiali 后台既可以跟外部服务 prometheus、cluster API 进行通信获取 istio 服务网格信息,也可以集成可选服务 jaeger 和 grafana做全链路跟踪和可视化指标度量。
以下是Kiali控制面板的主要功能和特点:

  1. 服务拓扑图:Kiali通过绘制服务之间的关系和通信流量,展示了服务网格的拓扑结构。用户可以查看微服务应用程序的整体架构,了解服务之间的依赖关系和通信路径。
  2. 流量可视化:Kiali能够显示服务之间的实时流量,并以图形化方式展示流量的分布和流向。用户可以轻松地追踪和监控流量路由、负载均衡和流量控制策略的情况。
  3. 性能指标和健康状态:Kiali提供了服务的性能指标和健康状态的可视化展示。用户可以查看服务的请求量、延迟、错误率等指标,并快速识别出性能瓶颈和故障。
  4. 故障诊断和故障排查:Kiali允许用户跟踪请求的路径,并提供了故障诊断和故障排查的工具。用户可以追踪请求的流程,查找和定位故障点,并进行故障排查和修复。
  5. 安全策略可视化:Kiali能够展示服务网格中的安全策略和访问控制规则。用户可以查看和管理服务的身份认证、流量加密和访问控制策略,确保服务之间的通信是安全的。
  6. 智能建议和自动化分析:Kiali提供了智能建议和自动化分析的功能,帮助用户优化服务网格的配置和性能。它可以检测潜在的问题和优化机会,并提供建议和指导。

总而言之,Kiali控制面板为用户提供了一个直观和全面的视图,帮助他们监控、管理和故障排查Istio服务网格。它提供了丰富的可视化功能,使用户能够更好地理解和优化服务之间的通信和性能。

Kiali kiali官网

  1. kiali登录token获取
kubectl get secrets -n istio-system
kubectl describe secrets -n istio-system <kiali-token>

kiali介绍

Overview(概观)

该菜单全局性展示所有命名空间下服务的流量(traffic)、配置状态(config status)、健康状态(✔)、应用数量(Applications)等。
image.png

Application(应用维度)

applications 指运行中的应用,kiali 独有概念。
image.png

注意:kiali只能识别设置了app标签的应用。如果一个应用有多个版本,需要将这几个版本的 app 标签设置为相同的值。

workloads(负载维度)

kiali 中的负载(workloads)跟 k8s 中的资源对应(比如 deployment、Job、Daemonset、Statefulset 等)。k8s 中的这些资源都可以在 kiali 中检测到,不管这些资源有没有加入到 istio 服务网格中。
image.png

Services(服务维度)

对应 k8s 的 service 资源类型
image.png

Istio Config(配置维度)

istio 相关配置类信息。比如这里选择 istio type 类型,将显示有关 istio 服务网格下面的各个类型对应的配置信息状态(✔ 表示配置有效;!表示告警)
image.png

Kiali部署

拉取 Istio 官方的仓库:

git clone https://github.com/istio/istio.git

在 samples/addons/ 目录中有以下目录或文件:

samples/addons/
├── extras
│   ├── prometheus-operator.yaml
│   ├── prometheus_vm_tls.yaml
│   ├── prometheus_vm.yaml
│   ├── skywalking.yaml
│   └── zipkin.yaml
├── grafana.yaml
├── jaeger.yaml
├── kiali.yaml
├── prometheus.yaml
└── README.md

我们启用 grafana.yaml、jaeger.yaml、kiali.yaml、prometheus.yaml 四个文件。

kubectl apply -f samples/addons

Istio 默认使用 Jaeger 做链路追踪,我们也可以使用 Skywalking 来做追踪。extras 目录中的配置我们可以自行部署。
执行命令查看其 Service 对应的 IP 和端口:

kubectl get svc  -n istio-system

image.png
现在,我们有两种方式让 kiali 在外部访问,一种是修改 Service 配置,将其访问类型修改为 NodePort,另一种是使用 istio-ingressgateway 配置流量入口。

通过 Gateway 访问 Kiali

kiali_gateway.yaml

apiVersion: networking.istio.io/v1alpha3  
kind: Gateway  
metadata:  
  name: kiali-gateway  
spec:  
  selector:  
    istio: ingressgateway  
  servers:  
  - port:  
      number: 15029  
      name: http-kiali  
      protocol: HTTP  
    hosts:  
    - "*"
kubectl -n istio-system apply -f kiali_gateway.yaml

接下来,创建一个 VirtualService 资源,将 Gateway 路由到 Kiali 服务.
kiali_vs.yaml

apiVersion: networking.istio.io/v1alpha3  
kind: VirtualService  
metadata:  
  name: kiali  
spec:  
  hosts:  
  - "*"  
  gateways:  
  - kiali-gateway  
  http:  
  - match:  
    - uri:  
        prefix: /kiali  
    route:  
    - destination:  
        host: kiali.istio-system.svc.cluster.local  
        port:  
          number: 20001
kubectl -n istio-system apply -f kiali_vs.yaml

然后修改 istio-ingressgateway,新增加一个配置为 kiali 暴露服务。

kubectl edit svc istio-ingressgateway -n istio-system
- name: kiali
    nodePort: 32667
    port: 15029
    protocol: TCP
    targetPort: 15029

然后访问

查看链路追踪数据

  1. kiali登录token获取
kubectl get secrets -n istio-system
kubectl describe secrets -n istio-system <kiali-token>
  1. 制作请求

因为默认链路追踪采样率是 1%,所以可以将请求次数设置大一些。

for i in `seq 1 1000`; do curl -s -o /dev/null http://192.168.31.21:32666/productpage; done
  1. 查看链路图

image.png
image.png
Kiali 的 Graph 数据主要来自两个来源:Prometheus 和 Istio 本身的遥测数据。

  1. Prometheus:Prometheus 是一个开源监控和警报工具,它用于收集和存储 Istio 服务网格中的指标数据。Istio 使用 Envoy 代理收集遥测数据,这些数据随后被 Prometheus 抓取和存储。Kiali 使用这些 Prometheus 数据来生成服务之间的流量、错误率、延迟等指标。
  2. Istio 遥测数据:Istio 服务网格生成的遥测数据包括请求、响应、延迟以及 Envoy 代理的其他性能指标。这些数据由 Istio 组件(例如 Mixer 和 Pilot)以及 Envoy 代理本身生成。Kiali 从这些遥测数据中获取服务拓扑信息,以创建服务之间的依赖关系图。

Kiali 将这两个数据源的信息整合在一起,生成 Graph,它展示了服务网格的拓扑结构、服务之间的流量以及其他性能指标。这有助于用户更好地理解服务之间的依赖关系,发现潜在的性能问题,并优化服务网格配置。

查看Jaeger中链路追踪详情

  1. 暴露jaeger-query

image.png

  1. 登录查看

image.png

  1. 查看详情

image.png

Kiali可能出现的问题

Kiali 一直显示 Empty Graph

可能失败的原因

如果你的 Kiali 一直显示 Empty Graph。请关注以下几种可能的情况:

  • 集群版本低于 1.23 ,需要升级 Kubernetes 集群。
  • 访问的地址不正确,没有配置对 /productpage 的访问地址,请求流量没有打入集群。
  • Pod 没有被注入 istio-proxy。

你可以在 Kiali 的 Workloads 查看每个负载的 Pod 信息,正常情况应当如下所示:

分布式链路追踪按钮跳转问题

点击下图分布式链路追踪按钮会出现问题
image.pngimage.png
查看jaeger-query组件svc,服务并没暴露,自行配置nodeport暴露方式
image.png

修改kiali的jaeger-query配置,使用暴露ip+port
image.png
http://jaeger-query.istio-system.svc:16686修改为http://192.168.31.21:31051
image.png
重启kiali
image.png
访问测试:
image.png

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值