Istio 服务网格的可视化

Stella981
• 阅读 647

Istio通过使用Kiali组件实现服务路由的可视化,从而直观地观察服务的运行状态。

作为此任务的一部分,您将安装 Kiali 附加组件,并使用基于 Web 的图形用户界面来查看网格和 Istio 配置对象的服务图。 最后,您使用 Kiali Public API 返回的 JSON 数据生成图形数据。这个任务并不包括 Kiali 提供的所有特性。要了解它所支持的全部功能,请查看 Kiali 官网

此任务始终将 Bookinfo 示例应用程序作为示例。

更多参考:

开始之前

以下说明假设您已安装过 istioctl 并使用它来安装 Kiali。 不使用 istioctl 来安装 Kiali, 请参考 Kiali 安装说明

创建 secret

如果您打算按照 Istio 快速入门说明使用 Istio 演示配置文件安装 Kiali,则会为您创建一个默认 secret,用户名为 admin ,密码为 admin。因此,您可以跳过此部分。

在 Istio 命名空间中创建一个 Secret,作为 Kiali 的身份验证凭据。

首先,定义要用作 Kiali 用户名和密码的凭据。

当提示出现时输入 Kiali 用户名:

$ KIALI_USERNAME=$(read -p 'Kiali Username: ' uval && echo -n $uval | base64)

当提示出现时输入 Kiali 密码:

$ KIALI_PASSPHRASE=$(read -sp 'Kiali Passphrase: ' pval && echo -n $pval | base64) 

如果使用的是 Z Shell zsh,请使用以下内容定义凭据:

$ KIALI_USERNAME=$(read '?Kiali Username: ' uval && echo -n $uval | base64) $ KIALI_PASSPHRASE=$(read -s "?Kiali Passphrase: " pval && echo -n $pval | base64)

运行以下命令创建 secret:

$ NAMESPACE=istio-system $ kubectl create namespace $NAMESPACE

$ cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: kiali namespace: $NAMESPACE labels: app: kiali type: Opaque data: username: $KIALI_USERNAME passphrase: $KIALI_PASSPHRASE EOF

通过 istioctl 安装

创建 Kiali secret 后,请参照 istioctl 安装说明来安装 Kiali。 例如:

$ istioctl manifest apply --set values.kiali.enabled=true

该任务不讨论 Jaeger 和 Grafana。如果已经在集群中安装了它们,并且想了解 Kiali 如何与它们集成,则必须将其他参数传递给 helm 命令,例如:

$ istioctl manifest apply \ --set values.kiali.enabled=true \ --set "values.kiali.dashboard.jaegerURL=http://jaeger-query:16686" \ --set "values.kiali.dashboard.grafanaURL=http://grafana:3000"

安装 Istio 和 Kiali 后,部署 Bookinfo 示例应用程序。

运行在 OpenShift

当 Kiali 在 OpenShift 上运行时,它需要访问一些 OpenShift 特定的资源才能正常运行, 在安装 Kiali 之后,可以使用以下命令完成此操作:

$ oc patch clusterrole kiali -p '[{"op":"add", "path":"/rules/-", "value":{"apiGroups":["apps.openshift.io"], "resources":["deploymentconfigs"],"verbs": ["get", "list", "watch"]}}]' --type json $ oc patch clusterrole kiali -p '[{"op":"add", "path":"/rules/-", "value":{"apiGroups":["project.openshift.io"], "resources":["projects"],"verbs": ["get"]}}]' --type json $ oc patch clusterrole kiali -p '[{"op":"add", "path":"/rules/-", "value":{"apiGroups":["route.openshift.io"], "resources":["routes"],"verbs": ["get"]}}]' --type json

生成服务图

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

    $ kubectl -n istio-system get svc kiali

  • 要确定 Bookinfo URL,请按照说明确定 Bookinfo ingress GATEWAY_URL.

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

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

    • 多次使用以下命令:

      $ curl http://$GATEWAY_URL/productpage

如果您在系统中安装了 watch 命令,请通过以下方式连续发送请求:

$ watch -n 1 curl -o /dev/null -s -w %{http_code} $GATEWAY_URL/productpage

要打开 Kiali UI,请在您的 Kubernetes 环境中执行以下命令:

$ istioctl dashboard kiali

  1. 要登录 Kiali UI,请到 Kiali 登录界面,然后输入存储在 Kiali secret 中的用户名和密码。

  2. 登录后立即显示的 Overview 页面中查看网格的概述。Overview 页面显示了网格中具有服务的所有名称空间。以下屏幕截图显示了类似的页面:

    Istio 服务网格的可视化

    Example Overview

  3. 要查看名称空间图,请单击 Bookinfo 名称空间卡中的 bookinfo 图标。图形图标位于名称空间卡的左下角,看起来像是一组相连的圈子,页面类似于:

    Istio 服务网格的可视化

    Example Graph

  4. 要查看度量标准摘要,请选择图中的任何节点或边,以便在右侧的 summary details 面板中显示其度量的详细信息。

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

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

      Istio 服务网格的可视化

      Example App Graph

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

      Istio 服务网格的可视化

      Example Versioned App Graph

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

      Istio 服务网格的可视化

      Example Workload Graph

    • Service 图类型显示网格中每个服务的节点,但从图中排除所有应用程序和工作负载。

      Istio 服务网格的可视化

      Example Service Graph

检查 Istio 配置

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

    Istio 服务网格的可视化

    Example Details

创建加权路由

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

  1. 查看 bookinfo 图的 Versioned app graph

    • 确保已经在 Edge Labels 下拉菜单中选择了 Requests percentage ,以查看路由到每个工作负载的流量百分比。

    • 确保已经选中 Display 下拉菜单中的 Service Nodes 复选框,以便在图中查看服务节点。

    Istio 服务网格的可视化

    Bookinfo Graph Options

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

    Istio 服务网格的可视化

    Graph Showing Percentage of Traffic

  3. 点击侧面板上的 ratings 链接,进入 ratings 服务的服务视图。

  4. Action 下拉菜单中,选择 Create Weighted Routing 以访问加权路由向导。

    Istio 服务网格的可视化

    Service Action Menu

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

    Istio 服务网格的可视化

    Weighted Routing Wizard

  6. 单击 Create 按钮以创建新的路由。

  7. 点击左侧导航栏中的 Graph 以返回到 bookinfo 图表。

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

    $ watch -n 1 curl -o /dev/null -s -w %{http_code} $GATEWAY_URL/productpage

  9. 几分钟后,您会注意到流量百分比将反映新的流量路由,从而确认您的新流量路由已成功将所有流量请求的 90% 路由到 ratings-v2

    Istio 服务网格的可视化

    90% Ratings Traffic Routed to ratings-v2

验证 Istio 配置

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

Istio 1.4 引入了 istioctl analyze,它使您能够以在 CI 管道中使用的方式执行类似的分析。

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

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

    $ kubectl patch service details -n bookinfo --type json -p '[{"op":"replace","path":"/spec/ports/0/name", "value":"foo"}]'

  • 通过单击左侧导航栏上的 Services,导航到 Services 列表。

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

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

    Istio 服务网格的可视化

    Services List Showing Invalid Configuration

  • 单击 Name 列中的 details 链接,以导航到服务详细信息视图。

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

    Istio 服务网格的可视化

    Service Details Describing the Invalid Configuration

  • 将端口名称改回 http 以更正配置,并将 bookinfo 返回其正常状态。

    $ kubectl patch service details -n bookinfo --type json -p '[{"op":"replace","path":"/spec/ports/0/name", "value":"http"}]'

  1. Istio 服务网格的可视化

    Service Details Showing Valid Configuration

查看并编辑 Istio YAML 文件配置

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

  1. 创建 Bookinfo 目标规则:

    $ kubectl apply -f [samples/bookinfo/networking/destination-rule-all.yaml](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fraw.githubusercontent.com%2Fistio%2Fistio%2Frelease-1.8%2Fsamples%2Fbookinfo%2Fnetworking%2Fdestination-rule-all.yaml)

  • 单击左侧导航栏上的 Istio Config 以导航到 Istio 配置列表。

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

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

    Istio 服务网格的可视化

    Istio Config List Incorrect Configuration Messages

  • 将鼠标悬停在 details 行的 Configuration 列中的错误图标上,以查看其他消息。

    Istio 服务网格的可视化

    Istio Config List Incorrect Configuration Tool Tips

  • 单击 Name 列中的 details 链接,以导航到 details 目标规则视图。

  • 请注意消息和图标,它们提醒您一些失败的验证规则。

    Istio 服务网格的可视化

    Istio Configuration Details View Showing Errors

  • 单击 YAML 选项卡以查看此 Istio 目标规则资源的 YAML。

  • 请注意未通过验证检查的行颜色会突出显示和异常图标。

    Istio 服务网格的可视化

    YAML Editor Showing Validation Errors and Warnings

  • 将鼠标悬停在黄色图标上可以查看工具提示消息,该消息提示您触发了警告的验证检查。 有关警告起因和解决方法的更多详细信息,请在 Kiali Validations page 上查找验证警告消息。

    Istio 服务网格的可视化

    YAML Editor Showing Warning Tool Tip

  • 将鼠标悬停在红色图标上可以查看工具提示消息,该消息提示您触发错误的验证检查。有关错误原因和解决方法的更多详细信息,请在 Kiali Validations page 上查找验证错误消息。

    Istio 服务网格的可视化

    YAML Editor Showing Error Tool Tip

  • 删除目标规则,使 bookinfo 返回其原始状态。

    $ kubectl delete -f samples/bookinfo/networking/destination-rule-all.yaml

关于 Kiali Public API

要生成代表图表和其他指标,运行状况和配置信息的 JSON 文件,您可以访问 Kiali Public API。 例如,将浏览器指向 $KIALI_URL/api/namespaces/graph?namespaces=bookinfo&graphType=app 以使用 app 图形类型获取图形的 JSON 表示形式。

Kiali Public API 建立在 Prometheus 查询之上,并且取决于标准的 Istio 度量配置。 它还会调用 Kubernetes API 以获取有关您的服务的其他详细信息。 为了获得使用 Kiali 的最佳体验,请在应用程序组件上使用元数据标签 appversion。作为模板,Bookinfo 示例应用程序遵循此约定。

清理

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

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

  2. 要从 Kubernetes 环境中删除 Kiali,请删除所有带有 app=kiali 标签的组件:

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这