网格可视化

本任务中展示了如何对 Istio 服务网格进行多角度的可视化。

这个任务中,首先要安装 Kiali 插件,然后使用 Web 界面来查看网格内的服务图以及 Istio 配置对象;最后还要通过 Kiali API 用 JSON 格式生成服务图数据。

任务中用到了 Bookinfo 示例应用作为测试案例。

开始之前

下面的介绍假设已经安装了 Helm,并使用 Helm 来安装 Kiali。

Kiali 安装指南中还介绍了不借助 Helm 安装 Kiali 的方法。

在 Istio 命名空间中创建一个 Secret,作为 Kiali 的认证凭据。Helm README 中介绍了更多细节。修改并运行下列命令:

  1. $ KIALI_USERNAME=$(echo -n 'admin' | base64)
  2. $ KIALI_PASSPHRASE=$(echo -n 'mysecret' | base64)
  3. $ NAMESPACE=istio-system
  4. $ kubectl create namespace $NAMESPACE
  5. $ cat <<EOF | kubectl apply -f -
  6. apiVersion: v1
  7. kind: Secret
  8. metadata:
  9. name: kiali
  10. namespace: $NAMESPACE
  11. labels:
  12. app: kiali
  13. type: Opaque
  14. data:
  15. username: $KIALI_USERNAME
  16. passphrase: $KIALI_PASSPHRASE
  17. EOF

创建了 Kiali Secret 之后,根据 Helm 安装简介 使用 Helm 来安装 Kiali。在运行 helm 命令的时候必须使用 —set kiali.enabled=true 选项,例如:

  1. $ helm template --set kiali.enabled=true install/kubernetes/helm/istio --name istio --namespace istio-system > $HOME/istio.yaml
  2. $ kubectl apply -f $HOME/istio.yaml

本文并未涉及 Jaeger 和 Grafana。如果已经在集群中部署了这两个组件,并且希望能够集成到 Kiali 之中,就必须在 helm 命令中增加参数:

  1. $ helm template \
  2. --set kiali.enabled=true \
  3. --set "kiali.dashboard.jaegerURL=http://$(kubectl get svc tracing --namespace istio-system -o jsonpath='{.spec.clusterIP}'):80" \
  4. --set "kiali.dashboard.grafanaURL=http://$(kubectl get svc grafana --namespace istio-system -o jsonpath='{.spec.clusterIP}'):3000" \
  5. install/kubernetes/helm/istio \
  6. --name istio --namespace istio-system > $HOME/istio.yaml
  7. $ kubectl apply -f $HOME/istio.yaml

完成 Istio 和 Kiali 之后,就可以部署 Bookinfo 应用了。

生成服务图

  • 要验证服务是否在集群中正确运行,需要执行如下命令:
  1. $ kubectl -n istio-system get svc kiali
  1. $ curl http://$GATEWAY_URL/productpage
  • 如果系统中安装了 watch 命令,就可以用它来持续发送请求:
  1. $ watch -n 1 curl -o /dev/null -s -w %{http_code} $GATEWAY_URL/productpage
  • 要获得 Kiali 的 URL,可使用和 Bookinfo 相同的 GATEWAY_URL,但是使用不同的端口。

    • 如果当前环境具备外部负载均衡器支持,可以运行如下命令:
  1. $ KIALI_URL="http://$(echo $GATEWAY_URL | sed -e s/:.*//):$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http-kiali")].port}')"
  2. $ echo $KIALI_URL
  3. http://172.30.141.9:15029
  • 如果所在环境中没有负载均衡支持(例如 Minikube),则运行下列命令:
  1. $ KIALI_URL="http://$(echo $GATEWAY_URL | sed -e s/:.*//):$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http-kiali")].nodePort}')"
  2. $ echo $KIALI_URL
  3. http://192.168.99.100:31758
  • 要浏览 Kiali 界面,用浏览器打开 $KIALI_URL 即可。

  • 可以使用前面建立 Secret 时使用的用户名和密码在 Kiali 登录页上进行登录。如果使用的是上面的示例 Secret,那么用户名就是 admin,密码就是 mysecret

  • 登录后会显示 Overview 页面,这里可以浏览服务网格的概况。

Overview 页面中会显示网格里所有命名空间中的服务。例如下面的截图:

概览示例概览示例

  • 要查看指定命名空间的服务图,可以点击 Bookinfo 命名空间卡片,会显示类似的页面:

服务图样例服务图样例

  • 要查看指标的合计,可以在服务图上选择任何节点或者边缘,就会在右边的 Panel 上显示所选指标的详情。

  • 如果希望用不同的图形方式来查看服务网格,可以从 Graph Type 下拉菜单进行选择。有多种不同的图形类别可供挑选:AppVersioned AppWorkload 以及 Service

    • App 类型会将同一应用的所有版本的数据聚合为单一的图形节点,下面的例子展示了一个 reviews 节点,其中包含三个版本的 Reviews 应用:

应用图样例应用图样例

  • Versioned App 类型会把一个 App 的每个版本都用一个节点来展示,但是一个应用的所有版本会被汇总在一起,下面的示例中显示了一个在分组框中的 reviews 服务,其中包含了三个节点,每个节点都代表 reviews 应用的一个版本:

分版本应用图样例分版本应用图样例

  • Workload 类型的图会将网格中的每个工作负载都呈现为一个节点。

这种类型的图不需要读取工作负载的 appversion 标签。所以如果你的工作负载中没有这些标签,这种类型就是个合理选择了。

工作负载图样例工作负载图样例

  • Service 图类型为网格中的每个服务生成一个节点,但是会排除所有的应用和工作负载。

服务图样例服务图样例

  • 要验证 Istio 配置的详情,可以点击左边菜单栏上的 ApplicationsWorkloads 或者 Services。下面的截图展示了 Bookinfo 应用的信息:

详情样例详情样例

关于 Kiali 的 API

Kiali API 提供了为服务图以及其它指标、健康状况以及配置信息生成 JSON 文件的能力。例如可以用浏览器打开 $KIALI_URL/api/namespaces/bookinfo/graph?graphType=app,会看到使用 JSON 格式表达的 app 类型的服务图

Kiali API

Kiali API 来自于 Prometheus 查询,并依赖于标准的 Istio 指标配置。它还需要调用 Kubernetes API 来获取关于服务方面的附加信息。为了获得 Kiali 的最佳体验,工作负载应该像 Bookinfo 一样使用 appversion 标签。

清理

如果不想继续任何后续任务,可以从集群中移除 Bookinfo 应用以及 Kiali:

  • 参考清理 Bookinfo 的指导,可以移除 Bookinfo 应用。

  • 要从 Kubernetes 环境中卸载 Kiali,可以删除所有 app=kiali 的对象:

  1. $ kubectl delete all,secrets,sa,configmaps,deployments,ingresses,clusterroles,clusterrolebindings,virtualservices,destinationrules --selector=app=kiali -n istio-system

相关内容

使用 Grafana 可视化指标度量

这个任务向您展示了如何设置和使用 Istio 仪表盘来监视网格流量。

Mixer 适配器模型

概要说明 Mixer 的插件架构。

Egress TLS 流量中的 SNI 监控及策略

如何为 Egress TLS 流量配置 SNI 监控并应用策略。

Jaeger

了解如何配置代理以向 Jaeger 发送追踪请求。

Zipkin

了解如何配置代理以向 Zipkin 发送追踪请求。

使用 Fluentd 记录日志

此任务说明如何配置 Istio 以将日志输出到 Fluentd 守护程序。