亚马逊AWS官方博客
使用 Kiali 观察您的服务窗格
服务网格的可观察性提供了关于基于微服务的应用程序拓扑结构的详细信息。我们可以据此了解哪些微服务是服务网格的组成部分、它们如何互相连接、有多少流量路由到这些微服务,以及其他详细信息。由 Heiko Rupp 撰写的这篇博文将介绍如何使用 Kiali 在 Amazon EKS 上直观显示使用 Istio 服务网格的应用程序。
– Arun
微服务架构将软件整体拆分为许多更小的部分,然后将它们重新组合在一起。然后,开发人员会添加库和代码来确保服务之间的通信安全、提供容错能力来应对网络故障,并提供在服务的不同版本之间分配流量的机制。
现在,像 Istio 这样的服务网格以及 Amazon Elastic Container Service for Kubernetes (EKS),可以在平台级别提供这些服务,从而使应用程序编写人员免于执行这些任务。路由决策在网格级别做出,并从底层的“物理”设置中提取出来。
但是,服务网格的这种强大功能也给设置增添了复杂性,包括简单地理解网格的工作原理。
Kiali 前来相助
Kiali 是基于 ASLv2 许可的一个开源 UI 项目,旨在通过可视化包含拓扑、吞吐量和运行状况等信息的有效路由,使网格变得易于理解。
首先,按照本博文中的步骤在 Amazon EKS 上安装 Istio(请注意下面提到的关于 Kiali 安装过程的两个小变化)。
以下是对基本步骤的简要概述(这些步骤在 Istio 1.1 相关博文的基础上略有更改):
- 通过
eksctl
安装 EKS。 - 创建服务账户并进行初始化
- 初始化 Istio 自定义资源定义(Istio 1.1 需要执行此操作):
- 使用包含 Kiali 的“演示”配置文件安装 Istio。(此安装方法将使用 Kiali 的默认凭证 (admin/admin) 创建密钥。)
- 通过 Kubernetes 端口转发或通过网关公开 Kiali。以下转发命令可以在本地主机端口 20001 上公开 Kiali:
- 按照上面链接的博文中的说明安装 bookinfo 演示应用程序并向其发送流量。
当转到 http://localhost:2001/kiali/,并且提供 admin/admin 凭证进入Kiali 后,您将看到所设置的项目的概览,以及相关运行状况:
单击左边列中的 Graph,将会得到如下所示的图表(您可能需要在“Namespace”下拉菜单中选择一个或多个命名空间)。或者,您也可以通过单击某个命名空间概览卡中的 图标访问该命名空间的图表:
该图表能够可视化构成应用程序的各个服务和工作负载的拓扑结构(以上显示的是“bookinfo”应用程序,即 Istio 的 Hello World)。
同样,可视化也包含运行状况信息,同时还包含有关各个服务接收的流量的信息。当您单击图表中的元素时,右侧边栏中将显示其详细信息。
也可以通过在“边缘标签”下拉菜单中选择相应条目来查看绝对流量速率或相对流量速率。下一张屏幕截图显示的是百分比形式的流量速率。因为我们没有植入任何路由规则,所以流量是平均分配的。
通过 kubectl 应用带有定义的 yaml 文件,可以在 Istio 中植入路由规则。Kiali 将获得有效的规则,并会显示该规则直接存在于图表中,而无需挖掘 Kubernetes 中的 yaml 文件。
现在,我们使用 Kiali 来植入一个规则,将流量以不同的方式分配到 reviews 工作负载。单击三角形图标,然后单击侧栏中的 Reviews 链接,这时将打开服务详细信息页面。您还可以转到左侧菜单中的 Services 选项卡,然后通过从列表中选择服务来访问该页面。
然后,在右上角,打开 Actions 菜单并选择 Create traffic routing。使用滑块或输入字段将 20% 的流量分配给 reviews v1、50% 分配给 v2,其余 30% 分配给 v3。
完成以上操作后,单击 Create。
退出向导后,您将看到规则已经成功创建。您可以单击子选项卡来查看规则:
单击 Reviews 以查看规则的图形化视图;单击 View YAML 以查看源。
现在,我们回到图表部分。带有“reviews”的紫色叉号图标表示图表中存在同样的规则,reviews 服务三角形与单个工作负载之间的边缘的百分比表示所选择的流量:
当您选择上面的 View YAML 时,还可以修改 Istio 规则。
如果您在此处出现错误(例如,上面的 reviews 部署版本的权重总和不等于 100%),系统将弹出一个警告,且 Kiali 将拒绝保存更改。
新版本的 Istio 应该已经在一个规则内避免了这种不一致;Kiali 在该方面的功能要强大的多,借助这些功能,您可以交叉检查 VirtualServices 中的设置及其各自的 DestinationRules。在以下示例中,编辑操作将子集更改成了目前 DestinationRules 中找不到的子集 – 这种情况下,Kiali 将发出警告:
获取和显示工作负载的遥测数据
Kiali 还可以使用 Istio 附带的 Prometheus 数据库显示工作负载的遥测数据。要启用此功能,您可以在工作负载中添加如下注释: