云原生专栏大纲
文章目录
- 可观测性
- kiali介绍
- Overview(概观)
- Application(应用维度)
- workloads(负载维度)
- Services(服务维度)
- Istio Config(配置维度)
- Kiali部署
- 通过 Gateway 访问 Kiali
- 查看链路追踪数据
- 查看Jaeger中链路追踪详情
- Kiali可能出现的问题
- Kiali 一直显示 Empty Graph
- 可能失败的原因
- 分布式链路追踪按钮跳转问题
可观测性
Istio 集成了 Jaeger、Zipkin 和 Skywalking 等链路追踪应用,能够有效地捕获服务网格的结构,展示网络拓扑结构,并分析网格的健康状况。
这一切都得益于 Envoy 代理的实现。由于所有进出流量都需要经过 Envoy 代理,Envoy 可以捕获这些流量记录,并将其推送到相应的链路追踪系统中。这样一来,可以链路追踪系统轻松地监控和分析服务网格内的流量情况。
另外 Istio 还支持 Prometheus、 Grafana 收集指标数据。
下面我们将使用官方的模板部署 Kiali 、 还有 Jaeger,然后通过 Kiali 统一查看集群的指标信息。
Kiali是一个用于可视化和监控Istio服务网格的控制面板。它提供了一个直观的用户界面,帮助用户了解和管理服务网格中的微服务应用程序。
kiali 架构还是比较简单的,属于单体应用。kiali 后台既可以跟外部服务 prometheus、cluster API 进行通信获取 istio 服务网格信息,也可以集成可选服务 jaeger 和 grafana做全链路跟踪和可视化指标度量。
以下是Kiali控制面板的主要功能和特点:
- 服务拓扑图:Kiali通过绘制服务之间的关系和通信流量,展示了服务网格的拓扑结构。用户可以查看微服务应用程序的整体架构,了解服务之间的依赖关系和通信路径。
- 流量可视化:Kiali能够显示服务之间的实时流量,并以图形化方式展示流量的分布和流向。用户可以轻松地追踪和监控流量路由、负载均衡和流量控制策略的情况。
- 性能指标和健康状态:Kiali提供了服务的性能指标和健康状态的可视化展示。用户可以查看服务的请求量、延迟、错误率等指标,并快速识别出性能瓶颈和故障。
- 故障诊断和故障排查:Kiali允许用户跟踪请求的路径,并提供了故障诊断和故障排查的工具。用户可以追踪请求的流程,查找和定位故障点,并进行故障排查和修复。
- 安全策略可视化:Kiali能够展示服务网格中的安全策略和访问控制规则。用户可以查看和管理服务的身份认证、流量加密和访问控制策略,确保服务之间的通信是安全的。
- 智能建议和自动化分析:Kiali提供了智能建议和自动化分析的功能,帮助用户优化服务网格的配置和性能。它可以检测潜在的问题和优化机会,并提供建议和指导。
总而言之,Kiali控制面板为用户提供了一个直观和全面的视图,帮助他们监控、管理和故障排查Istio服务网格。它提供了丰富的可视化功能,使用户能够更好地理解和优化服务之间的通信和性能。
Kiali kiali官网
- kiali登录token获取
kubectl get secrets -n istio-system
kubectl describe secrets -n istio-system <kiali-token>
kiali介绍
Overview(概观)
该菜单全局性展示所有命名空间下服务的流量(traffic)、配置状态(config status)、健康状态(✔)、应用数量(Applications)等。
Application(应用维度)
applications 指运行中的应用,kiali 独有概念。
注意:kiali只能识别设置了app标签的应用。如果一个应用有多个版本,需要将这几个版本的 app 标签设置为相同的值。
workloads(负载维度)
kiali 中的负载(workloads)跟 k8s 中的资源对应(比如 deployment、Job、Daemonset、Statefulset 等)。k8s 中的这些资源都可以在 kiali 中检测到,不管这些资源有没有加入到 istio 服务网格中。
Services(服务维度)
对应 k8s 的 service 资源类型
Istio Config(配置维度)
istio 相关配置类信息。比如这里选择 istio type 类型,将显示有关 istio 服务网格下面的各个类型对应的配置信息状态(✔ 表示配置有效;!表示告警)
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
现在,我们有两种方式让 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: kialinodePort: 32667port: 15029protocol: TCPtargetPort: 15029
然后访问
查看链路追踪数据
- kiali登录token获取
kubectl get secrets -n istio-system
kubectl describe secrets -n istio-system <kiali-token>
- 制作请求
因为默认链路追踪采样率是 1%,所以可以将请求次数设置大一些。
for i in `seq 1 1000`; do curl -s -o /dev/null http://192.168.31.21:32666/productpage; done
- 查看链路图
Kiali 的 Graph 数据主要来自两个来源:Prometheus 和 Istio 本身的遥测数据。
- Prometheus:Prometheus 是一个开源监控和警报工具,它用于收集和存储 Istio 服务网格中的指标数据。Istio 使用 Envoy 代理收集遥测数据,这些数据随后被 Prometheus 抓取和存储。Kiali 使用这些 Prometheus 数据来生成服务之间的流量、错误率、延迟等指标。
- Istio 遥测数据:Istio 服务网格生成的遥测数据包括请求、响应、延迟以及 Envoy 代理的其他性能指标。这些数据由 Istio 组件(例如 Mixer 和 Pilot)以及 Envoy 代理本身生成。Kiali 从这些遥测数据中获取服务拓扑信息,以创建服务之间的依赖关系图。
Kiali 将这两个数据源的信息整合在一起,生成 Graph,它展示了服务网格的拓扑结构、服务之间的流量以及其他性能指标。这有助于用户更好地理解服务之间的依赖关系,发现潜在的性能问题,并优化服务网格配置。
查看Jaeger中链路追踪详情
- 暴露jaeger-query
- 登录查看
- 查看详情
Kiali可能出现的问题
Kiali 一直显示 Empty Graph
可能失败的原因
如果你的 Kiali 一直显示 Empty Graph。请关注以下几种可能的情况:
- 集群版本低于 1.23 ,需要升级 Kubernetes 集群。
- 访问的地址不正确,没有配置对 /productpage 的访问地址,请求流量没有打入集群。
- Pod 没有被注入 istio-proxy。
你可以在 Kiali 的 Workloads 查看每个负载的 Pod 信息,正常情况应当如下所示:
分布式链路追踪按钮跳转问题
点击下图分布式链路追踪按钮会出现问题
查看jaeger-query组件svc,服务并没暴露,自行配置nodeport暴露方式
修改kiali的jaeger-query配置,使用暴露ip+port
将http://jaeger-query.istio-system.svc:16686修改为http://192.168.31.21:31051
重启kiali
访问测试: