Istio通过使用Kiali组件实现服务路由的可视化,从而直观地观察服务的运行状态。
作为此任务的一部分,您将安装 Kiali 附加组件,并使用基于 Web 的图形用户界面来查看网格和 Istio 配置对象的服务图。 最后,您使用 Kiali Public API 返回的 JSON 数据生成图形数据。这个任务并不包括 Kiali 提供的所有特性。要了解它所支持的全部功能,请查看 Kiali 官网。
此任务始终将 Bookinfo 示例应用程序作为示例。
更多参考:
- Istio 1.7将成为生产可用的最稳定版本
- Istio 1.7——进击的追风少年
- GitOps——像代码一样管理Istio配置
- Istio 1.6.4 发布-新特性与快速安装
- Istio 1.6.3 发布-新特性与快速安装
- 服务网格Istio管理面板-Naftis
- 回归单体模式——Istio 1.5 新特性解读
开始之前
创建 secret
在 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
生成服务图
-
要验证服务是否在您的群集中运行,请运行以下命令:
$ 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
-
要登录 Kiali UI,请到 Kiali 登录界面,然后输入存储在 Kiali secret 中的用户名和密码。
-
登录后立即显示的 Overview 页面中查看网格的概述。Overview 页面显示了网格中具有服务的所有名称空间。以下屏幕截图显示了类似的页面:
Example Overview
-
要查看名称空间图,请单击 Bookinfo 名称空间卡中的
bookinfo
图标。图形图标位于名称空间卡的左下角,看起来像是一组相连的圈子,页面类似于:Example Graph
-
要查看度量标准摘要,请选择图中的任何节点或边,以便在右侧的 summary details 面板中显示其度量的详细信息。
-
要使用不同的图形类型查看服务网格,请从 Graph Type 下拉菜单中选择一种图形类型。有几种图形类型可供选择:App, Versioned App, Workload, Service。
-
App 图形类型将一个应用程序的所有版本聚合到一个图形节点中。以下示例显示了一个单独的 reviews 节点,它代表了评论应用程序的三个版本。
Example App Graph
-
Versioned App 图类型显示每个应用程序版本的节点,但是特定应用程序的所有版本都组合在一起。 下面的示例显示 reviews 组框,其中包含三个节点,这些节点代表了评论应用程序的三个版本。
Example Versioned App Graph
-
Workload 图类型显示了服务网格中每个工作负载的节点。 这种图类型不需要您使用
app
和version
标签,因此,如果您选择在组件上不使用这些标签,这是您将使用的图形类型。Example Workload Graph
-
Service 图类型显示网格中每个服务的节点,但从图中排除所有应用程序和工作负载。
Example Service Graph
-
检查 Istio 配置
-
要检查有关 Istio 配置的详细信息,请单击左侧菜单栏上的 Applications,Workloads 和 Services 菜单图标。 以下屏幕截图显示了 Bookinfo 应用程序信息:
Example Details
创建加权路由
您可以使用 Kiali 加权路由转发来定义特定百分比的请求流量以路由到两个或多个工作负载。
-
查看
bookinfo
图的 Versioned app graph。-
确保已经在 Edge Labels 下拉菜单中选择了 Requests percentage ,以查看路由到每个工作负载的流量百分比。
-
确保已经选中 Display 下拉菜单中的 Service Nodes 复选框,以便在图中查看服务节点。
Bookinfo Graph Options
-
-
通过单击
ratings
服务 (triangle) 节点,将关注点放在bookinfo
图内的ratings
服务上。 注意,ratings
服务流量平均分配给两个ratings
服务v1
和v2
(每台服务被路由 50% 的请求)。Graph Showing Percentage of Traffic
-
点击侧面板上的 ratings 链接,进入
ratings
服务的服务视图。 -
从 Action 下拉菜单中,选择 Create Weighted Routing 以访问加权路由向导。
Service Action Menu
-
拖动滑块以指定要路由到每个服务的流量百分比。 对于
ratings-v1
,将其设置为 10%;对于ratings-v2
,请将其设置为 90%。Weighted Routing Wizard
-
单击 Create 按钮以创建新的路由。
-
点击左侧导航栏中的 Graph 以返回到
bookinfo
图表。 -
发送请求到
bookinfo
应用程序。例如,要每秒发送一个请求,如果您的系统上装有watch
,则可以执行以下命令:$ watch -n 1 curl -o /dev/null -s -w %{http_code} $GATEWAY_URL/productpage
-
几分钟后,您会注意到流量百分比将反映新的流量路由,从而确认您的新流量路由已成功将所有流量请求的 90% 路由到
ratings-v2
。90% Ratings Traffic Routed to ratings-v2
验证 Istio 配置
Kiali 可以验证您的 Istio 资源,以确保它们遵循正确的约定和语义。根据错误配置的严重程度,在 Istio 资源的配置中检测到的任何问题都可以标记为错误或警告。有关 Kiali 执行的所有验证检查的列表,请参考 Kiali Validations page。
istioctl analyze
,它使您能够以在 CI 管道中使用的方式执行类似的分析。
强制对服务端口名称进行无效配置,以查看 Kiali 如何报告验证错误。
-
将
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 列中显示的错误图标。Services List Showing Invalid Configuration
-
单击 Name 列中的 details 链接,以导航到服务详细信息视图。
-
将鼠标悬停在错误图标上可以显示描述错误的提示。
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"}]'
-
Service Details Showing Valid Configuration
查看并编辑 Istio YAML 文件配置
Kiali 提供了一个 YAML 编辑器,用于查看和编辑 Istio 配置资源。当检测到错误的配置时,YAML 编辑器还将提供验证消息。
-
创建 Bookinfo 目标规则:
$ kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
-
单击左侧导航栏上的
Istio Config
以导航到 Istio 配置列表。 -
如果尚未选择,请从 Namespace 下拉菜单中选择
bookinfo
。 -
请注意错误消息以及错误警告图标,它们会警告您一些配置问题。
Istio Config List Incorrect Configuration Messages
-
将鼠标悬停在
details
行的 Configuration 列中的错误图标上,以查看其他消息。Istio Config List Incorrect Configuration Tool Tips
-
单击 Name 列中的 details 链接,以导航到
details
目标规则视图。 -
请注意消息和图标,它们提醒您一些失败的验证规则。
Istio Configuration Details View Showing Errors
-
单击 YAML 选项卡以查看此 Istio 目标规则资源的 YAML。
-
请注意未通过验证检查的行颜色会突出显示和异常图标。
YAML Editor Showing Validation Errors and Warnings
-
将鼠标悬停在黄色图标上可以查看工具提示消息,该消息提示您触发了警告的验证检查。 有关警告起因和解决方法的更多详细信息,请在 Kiali Validations page 上查找验证警告消息。
YAML Editor Showing Warning Tool Tip
-
将鼠标悬停在红色图标上可以查看工具提示消息,该消息提示您触发错误的验证检查。有关错误原因和解决方法的更多详细信息,请在 Kiali Validations page 上查找验证错误消息。
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 的最佳体验,请在应用程序组件上使用元数据标签 app
和 version
。作为模板,Bookinfo 示例应用程序遵循此约定。
清理
如果您不计划任何后续任务,请从群集中删除 Bookinfo 示例应用程序和 Kiali。
-
要删除 Bookinfo 应用程序,请参阅 Bookinfo cleanup 说明。
-
要从 Kubernetes 环境中删除 Kiali,请删除所有带有
app=kiali
标签的组件:
$ kubectl delete all,secrets,sa,configmaps,deployments,ingresses,clusterroles,clusterrolebindings,customresourcedefinitions --selector=app=kiali -n istio-system
- 本文主要内容来自于istio工作组,阅读原文:https://preliminary.istio.io/latest/zh/docs/tasks/observability/kiali/