|
|
好的,这是一份专为初学者设计的 **Kiali 入门详细教程**。Kiali 是 Istio 服务网格的可视化和管理控制台,它能帮助你直观地观察服务拓扑、监控流量、诊断问题和管理配置。
### **第一部分:核心概念与准备工作**
在开始之前,你需要理解几个关键点:
1. **Kiali 是什么?** 它是一个用于 **Istio 服务网格** 的 Web 控制台。它本身不提供网格功能,而是管理和可视化 Istio 的“仪表盘”。
2. **前提条件**:你必须已经有一个正在运行的 **Kubernetes** 集群,并且已经部署了 **Istio** 服务网格,同时有至少一个微服务应用(例如 Bookinfo 示例应用)运行在该网格中。
3. **Kiali 的功能**:
* **服务拓扑图**:可视化服务间的依赖关系和实时流量。
* **指标监控**:查看请求量、成功率、延迟等关键指标。
* **链路追踪集成**:与 Jaeger 集成,查看请求的完整调用链。
* **配置验证**:检查 Istio 配置(如 VirtualService、DestinationRule)的正确性。
* **健康检查**:快速识别服务或工作负载的健康状况。
---
### **第二部分:详细安装与部署方法**
假设你已经安装了 Istio。以下是安装 Kiali 的两种常用方法:
#### **方法一:通过 Istio 内置组件安装(推荐给初学者)**
这是最简单的方式,Istio 的安装包中已经包含了 Kiali。
1. **启用 Kiali 组件**:
如果你使用 `istioctl` 安装,可以在安装时通过配置文件启用。
* 创建一个 `istio-operator.yaml` 文件:
- apiVersion: install.istio.io/v1alpha1
- kind: IstioOperator
- spec:
- addonComponents:
- kiali:
- enabled: true
- values:
- kiali:
- enabled: true
复制代码
* 使用此配置安装或更新 Istio:
- istioctl install -f istio-operator.yaml
复制代码
2. **部署示例应用(可选但强烈推荐)**:
为了看到效果,部署 Istio 的经典示例应用 Bookinfo。
- kubectl label namespace default istio-injection=enabled
- kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/platform/kube/bookinfo.yaml
复制代码
生成一些流量:
- kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
- # 或者使用循环持续访问
- for i in $(seq 1 100); do
- kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage > /dev/null
- done
复制代码
#### **方法二:使用 Kiali Helm Chart 安装**
适合更自定义的部署。
- helm repo add kiali https://kiali.org/helm-charts
- helm repo update
- helm install kiali-server kiali/kiali-server -n istio-system --set auth.strategy="anonymous" # 仅为演示,生产环境请使用安全策略
复制代码
---
### **第三部分:访问 Kiali 控制台**
#### **步骤1:端口转发(最快捷的本地访问方式)**
- kubectl port-forward svc/kiali 20001:20001 -n istio-system
复制代码
现在,在浏览器中打开 **`http://localhost:20001`**。
#### **步骤2:登录**
* 如果安装时使用了 `anonymous` 策略(仅用于测试),可以直接进入。
* 默认的 Istio 配置通常使用 **`token`** 策略。你需要使用 Istio 的 Secret 来登录:
1. 获取令牌:
- kubectl get secret -n istio-system $(kubectl get sa kiali-service-account -n istio-system -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 -d
复制代码
2. 将输出的长字符串(JWT Token)复制到 Kiali 登录页面的 “Token” 字段中登录。
---
### **第四部分:初学者核心操作指南**
登录后,按照以下步骤探索:
#### **1. 总览页面**
* **位置**:左侧菜单 -> `Overview`。
* **功能**:查看网格中所有命名空间的全局状态。你可以快速看到哪些命名空间注入了 Istio,以及内部应用的健康状态。
#### **2. 查看服务拓扑图(最重要、最直观的功能)**
* **位置**:左侧菜单 -> `Graph`。
* **操作**:
1. 在 `Namespace` 下拉菜单中,选择 `default`(如果你部署了 Bookinfo 应用)。
2. 在 `Display` 下拉菜单中,勾选 `Traffic Animation` 可以显示实时流量动画,勾选 `Security` 可以显示 mTLS 加密状态。
* **你能看到什么**:一个动态的、可视化的服务依赖图。节点代表服务/工作负载,连线代表流量。绿色代表健康,红色代表错误。这是理解应用架构的绝佳工具。
#### **3. 查看服务列表与详情**
* **位置**:左侧菜单 -> `Services` 或 `Workloads`。
* **操作**:点击 `default` 命名空间,然后点击一个服务(如 `productpage`)。
* **你能看到什么**:
* **指标**:请求量、错误率、延迟(P50, P90, P99)。
* **入站/出站流量**。
* **追踪**:如果集成了 Jaeger,可以直接跳转到该服务的链路追踪详情。
* **配置**:查看和应用到此服务的 Istio 配置对象(VirtualService, DestinationRule)。
#### **4. 使用链路追踪**
* **前提**:确保已部署 Jaeger。
* **操作**:在 `Services` 或 `Workloads` 详情页,点击 `Traces` 标签页。
* **功能**:选择一个具体的追踪记录,查看一个用户请求经过的所有服务、在每个服务中的耗时,是诊断延迟问题的利器。
#### **5. 验证与操作 Istio 配置**
* **位置**:左侧菜单 -> `Istio Config`。
* **功能**:列出网格内所有的 Istio 自定义资源(CRD)。`✔` 表示配置有效,`✘` 表示配置有错误,并会提示错误原因。这是验证你编写的 YAML 是否正确的好地方。
---
### **第五部分:学习路径与下一步**
1. **第一天**:完成安装,访问控制台,在 `Graph` 页面玩转拓扑图,观察流量动画。
2. **第二天**:深入查看 `Services` 和 `Workloads` 的指标标签页,理解请求率、错误码和延迟分布。
3. **第三天**:尝试创建一个简单的 Istio 配置(例如,一个将 50% 流量分到 v1,50% 分到 v2 的 `VirtualService`),然后在 Kiali 中观察流量分割的效果,并在 `Istio Config` 页面验证你的配置。
4. **第四天**:集成并探索 Jaeger 的分布式追踪,尝试分析一个完整请求链路。
5. **进阶**:
* 研究 Kiali 的 **健康配置**,设置自定义阈值。
* 配置 **外部链路**(如访问数据库)的显示。
* 在生产环境中配置安全的身份验证策略(如 OpenID Connect)。
### **常见问题排查**
* **无法访问 Kiali**:检查 `kiali` Pod 在 `istio-system` 命名空间中是否处于 `Running` 状态 (`kubectl get pods -n istio-system`)。
* **拓扑图中没有流量/服务**:
* 确认你的应用 Pod 中注入了 Istio Sidecar(Pod 内应有两个容器)。
* 确认已经生成了流量(通过端口转发访问应用或使用上面的 curl 命令)。
* 在 `Graph` 页面检查时间范围是否设置为最近(如 `Last 5m`)。
* **指标数据缺失**:确保 Prometheus 已正确集成到 Istio 中,并且能够采集指标。
通过这个教程,你应该能够顺利上手 Kiali,并利用它强大的可视化能力来驾驭你的服务网格。实践是最好的老师,多部署、多观察、多配置是快速掌握的关键。 |
|