网格可视化

此任务向您展示如何可视化 Istio 网格的不同方面。

作为此任务的一部分,您将安装 Kiali 插件, 并使用基于 Web 的图形用户界面来查看网格和 Istio 配置对象的服务图。

这个任务并不包括 Kiali 提供的所有特性。要了解它所支持的全部功能, 请查看 Kiali 官网

此任务始终将 Bookinfo 样例应用程序作为示例。 此任务假设 Bookinfo 应用程序安装在 bookinfo 命名空间中。

开始之前

跟随 Kiali 安装文档将 Kiali 部署到您的集群中。

生成服务图

  1. 要验证服务在您的集群中运行,请运行以下命令:

    1. $ kubectl -n istio-system get svc kiali
  2. 要确定 Bookinfo URL,请按照说明确定 Bookinfo ingress GATEWAY_URL

  3. 要将流量发送到网格,您有三种选择:

    • 在浏览器中访问 http://$GATEWAY_URL/productpage

    • 多次使用以下命令:

      1. $ curl http://$GATEWAY_URL/productpage
    • 如果您在系统中安装了 watch 命令,请通过以下方式连续发送请求:

      1. $ watch -n 1 curl -o /dev/null -s -w %{http_code} $GATEWAY_URL/productpage
  4. 要打开 Kiali UI,请在您的 Kubernetes 环境中执行以下命令:

    1. $ istioctl dashboard kiali
  5. 在登录后立即显示的 Overview 页面中,查看网格的概述。 Overview 页面显示了网格中具有服务的所有命名空间。以下屏幕截图显示了类似的页面:

    Overview 示例
    Overview 示例
  6. 要查看命名空间的图形,请选择 Bookinfo 命名空间卡片中的 Graph 菜单项。 kebab 菜单位于卡片右上方,看起来像 3 个竖点。 点击它可以看到所有可用的菜单项。看起来如下图所示:

    Graph 示例
    Graph 示例
  7. 这个图形表示一段时间内流过服务网格的流量。此图形使用 Istio 遥测生成。

  8. 要查看指标摘要,请选择图形中的任意节点或任意边,以便在右侧的 summary details 面板中显示其指标的详情。

  9. 要使用不同的图形类型查看服务网格,请从 Graph Type 下拉菜单中选择一种图形类型。 有几种图形类型可供选择:AppVersioned AppWorkloadService

    • App 图形类型将一个应用程序的所有版本聚合到一个图形节点中。 以下示例显示了一个单独的 reviews 节点,它代表了 reviews 应用程序的三个版本。

      应用程序图形示例
      应用程序图形示例
    • Versioned App 图形类型显示每个应用程序版本的节点,但是特定应用程序的所有版本都组合在一起。 下面的示例显示 reviews 组框,其中包含三个节点,这些节点代表了 reviews 应用程序的三个版本。

      带版本的应用程序图形示例
      带版本的应用程序图形示例
    • Workload 图形类型显示了服务网格中每个工作负载的节点。 这种图形类型不需要您使用 appversion 标签,因此, 如果您选择在组件上不使用这些标签,这是您将使用的图形类型。

      工作负载图形示例
      工作负载图形示例
    • Service 图形类型显示您网格中高级聚合的服务流量。

      服务图示例
      服务图示例

检查 Istio 配置

  1. 要检查有关 Istio 配置的详情,请点击左侧菜单栏上的 ApplicationsWorkloadsServices 菜单项。 以下屏幕截图显示了 Bookinfo 应用程序信息:

    详情示例
    详情示例

流量转移

您可以使用 Kiali 流量转移向导来定义特定百分比的请求流量以路由到两个或多个工作负载。

  1. 查看 bookinfo 图的 Versioned app graph

    • 确保已启用 Traffic Distribution Edge LabelDisplay 选项,以查看路由到每个工作负载的流量百分比。

    • 确保已经已启用 Show Service NodesDisplay 选项,以在图中查看服务节点。

    Bookinfo 图形选项
    Bookinfo 图形选项
  2. 通过点击 ratings 服务(三角形)节点,将关注点放在 bookinfo 图内的 ratings 服务上。 注意,ratings 服务流量平均分配给两个 ratings 服务 v1v2(每台服务被路由 50% 的请求)。

    显示流量百分比的图形
    显示流量百分比的图形
  3. 点击侧面板上的 ratings 链接进入 ratings 服务的详情视图。 这也可以通过右键点击 ratings 服务节点并从上下文菜单中选择 Details 来完成。

  4. Action 下拉菜单中,选择 Traffic Shifting 以流量转移向导。

    服务的操作菜单
    服务的操作菜单
  5. 拖动滑块以指定要路由到每个服务的流量百分比。 对于 ratings-v1,将其设置为 10%;对于 ratings-v2,请将其设置为 90%。

    带权重的路由向导
    带权重的路由向导
  6. 点击 Preview 按钮以查看将由向导生成的 YAML。

    路由向导预览
    路由向导预览
  7. 点击 Create 按钮以确认应用新的流量设置。

  8. 点击左侧导航栏中的 Graph 以返回到 bookinfo 图表。注意现在 ratings 服务节点带有 virtual service 图标。

  9. 发送请求到 bookinfo 应用程序。例如,要每秒发送一个请求,如果您的系统上装有 watch,则可以执行以下命令:

    1. $ watch -n 1 curl -o /dev/null -s -w %{http_code} $GATEWAY_URL/productpage
  10. 几分钟后,您会注意到流量百分比将反映新的流量路由, 从而确认您的新流量路由已成功将所有流量请求的 90% 路由到 ratings-v2

    90% Ratings 流量路由到 ratings-v2
    90% Ratings 流量路由到 ratings-v2

验证 Istio 配置

Kiali 可以验证您的 Istio 资源,以确保它们遵循正确的约定和语义。 根据错误配置的严重程度,在 Istio 资源的配置中检测到的任何问题都可以标记为错误或警告。 有关 Kiali 执行的所有验证检查的列表,请参考 Kiali Validation 页面

Istio 提供了 istioctl analyze,它使您能够以在 CI 管道中使用的方式执行类似的分析。这两种方法可以互为补充。

强制对服务端口名称进行无效配置,以查看 Kiali 如何报告验证错误。

  1. details 服务的端口名从 http 更改为 foo

    1. $ kubectl patch service details -n bookinfo --type json -p '[{"op":"replace","path":"/spec/ports/0/name", "value":"foo"}]'
  2. 通过点击左侧导航栏上的 Services,导航到 Services 列表。

  3. 如果尚未选择,请从 Namespace 下拉菜单中选择 bookinfo

  4. 注意在 details 行的 Configuration 列中显示的错误图标。

    显示无效配置的服务列表
    显示无效配置的服务列表
  5. 点击 Name 列中的 details 链接,以导航到服务详情视图。

  6. 将鼠标悬停在错误图标上可以显示描述错误的提示。

    描述无效配置的服务详情
    描述无效配置的服务详情
  7. 将端口名称改回 http 以更正配置,并将 bookinfo 返回其正常状态。

    1. $ kubectl patch service details -n bookinfo --type json -p '[{"op":"replace","path":"/spec/ports/0/name", "value":"http"}]'
    显示无效配置的服务详情
    显示无效配置的服务详情

查看并编辑 Istio YAML 文件配置

Kiali 提供了一个 YAML 编辑器,用于查看和编辑 Istio 配置资源。当检测到错误的配置时,YAML 编辑器还将提供验证消息。

  1. bookinfo VirtualService 中引入一个错误。

    1. $ kubectl patch vs bookinfo -n bookinfo --type json -p '[{"op":"replace","path":"/spec/gateways/0", "value":"bookinfo-gateway-invalid"}]'
  2. 点击左侧导航栏上的 Istio Config 以导航到 Istio 配置列表。

  3. 如果尚未选择,请从 Namespace 下拉菜单中选择 bookinfo

  4. 请注意错误消息以及错误警告图标,它们会警告您一些配置问题。

    Istio Config 列出不正确的配置
    Istio Config 列出不正确的配置
  5. bookinfo 行的 Configuration 列中点击错误图标,导航到 bookinfo 虚拟服务视图。

  6. 预先选中 YAML 页签。请注意验证检查通知已关联的行颜色会突出显示且具有特别的图标。

    YAML 编辑器显示校验通知
    YAML 编辑器显示校验通知
  7. 将鼠标悬停在红色图标上可以查看工具提示消息,该消息提示您验证检查触发了错误。 有关错误起因和解决方法的更多详细信息,请在 Kiali Validation 页面上查找验证错误消息。

    YAML 编辑器显示错误工具提示
    YAML 编辑器显示错误工具提示
  8. 将虚拟服务 bookinfo 重置为其原始状态。

    1. $ kubectl patch vs bookinfo -n bookinfo --type json -p '[{"op":"replace","path":"/spec/gateways/0", "value":"bookinfo-gateway"}]'

更多特性

除了本文所述的查看特性外,Kiali 还有许多特性,例如集成 Jaeger 跟踪

有关这些更多特性的详细信息,请参阅 Kiali 文档

若想深度探索 Kiali,建议演练一遍 Kiali 教程

清理

如果您不计划任何后续任务,请从集群中删除 Bookinfo 示例应用程序和 Kiali。

  1. 要删除 Bookinfo 应用程序,请参阅 Bookinfo 清理说明。

  2. 要从 Kubernetes 环境中删除 Kiali:

    1. $ kubectl delete -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/addons/kiali.yaml