阿里云Kubernetes容器服务Istio实践之集成日志服务Log Service

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 阿里云Kubernetes容器服务已经提供了Istio与日志服务Log Service的集成能力,本文通过一个官方示例来重点介绍了Istio与基于阿里云日志服务的分布式追踪系统的整合能力。

概述

在前面系列文章中已经介绍了Istio及其各个核心组件,详述了如何利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及保护微服务的开放平台Istio,为应用引入和配置多个相关服务;并且通过一个官方示例演示了如何部署应用到上述Istio环境中,演示了如何设置智能路由、分布式追踪以及Istio 的遥测数据收集、查询及可视化等功能。

回顾这个系列文章请参考:
阿里云Kubernetes Service Mesh实践进行时(1): Istio初体验
阿里云Kubernetes Service Mesh实践进行时(2): 通过示例深入Istio
阿里云Kubernetes Service Mesh实践进行时(3): 智能路由
阿里云Kubernetes Service Mesh实践进行时(4): 分布式追踪
阿里云Kubernetes Service Mesh实践进行时(5): 遥测数据收集、查询及可视化
阿里云Kubernetes Service Mesh实践进行时(6): 故障诊断与检测工具Weave Scope
阿里云Kubernetes Service Mesh实践进行时(7): 可观测性分析服务Kiali

阿里云Kubernetes容器服务已经提供了Istio与日志服务Log Service的集成能力,本文通过一个官方示例来重点介绍Istio与基于阿里云日志服务的分布式追踪系统的整合能力。

注意:在使用阿里云Kubernetes容器服务Istio 1.0的过程中,如果遇到类似CRD版本问题,请参考我们提供的问题分析。 我们会持续更新遇到的问题及其解决方法。

回顾 OpenTracing

为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。OpenTracing 已进入 CNCF,正在为全球的分布式追踪,提供统一的概念和数据标准。它通过提供平台无关、厂商无关的 API,使得开发人员能够方便的添加(或更换)追踪系统的实现。

Jaeger 是 CNCF下的一款开源分布式追踪系统,兼容 OpenTracing API。

阿里云日志服务Log Service与分布式追踪系统Jaeger

日志服务(Log Service,简称LOG/原SLS)是针对实时数据一站式服务,在阿里集团经历大量大数据场景锤炼而成。提供日志类数据采集、消费、投递及查询分析功能,全面提升海量日志处理/分析能力。具体可参见 日志服务

Jaeger 是 Uber 推出的一款开源分布式追踪系统,为微服务场景而生。它主要用于分析多个服务的调用过程,图形化服务调用轨迹,是诊断性能问题、分析系统故障的利器。

Jaeger on Aliyun Log Service 是基于 Jeager 开发的分布式追踪系统,支持将采集到的追踪数据持久化到阿里云日志服务中,并通过 Jaeger 的原生接口进行查询和展示。

图片.png

Jaeger-client

Jaeger-client 为不同语言实现了符合 OpenTracing 标准的 SDK。应用程序通过 API 写入数据,客户端库library 把 trace 信息按照应用程序指定的采样策略传递给 jaeger-agent。数据使用 Thrift 序列化,通过 UDP 进行通信。

Jaeger-agent

Jaeger-agent 是一个监听在 UDP 端口上接收 span 数据的网络守护进程,它会将数据批量发送给Jaeger-collector。它被设计成一个基础组件,部署到所有的宿主机上。Jaeger-agent代理将 Jaeger-client 和 Jaeger-collector 解耦,为 Jaeger-client library 屏蔽了路由和发现 collector 的细节。

Jaeger-collector

接收 jaeger-agent 发送来的数据,然后将数据写入后端存储。后端存储是一个可插拔的组件,Jaeger on Aliyun Log Service 增加了对阿里云日志服务的支持。

阿里云日志服务Log Service

Jaeger-collector 会将接收到的 span 数据持久化到日志服务Log Service中。Query 会从日志服务中检索数据。

Query&UI

接收查询请求,从后端存储系统中检索 trace 并通过 UI 进行展示。

准备Kubernetes环境

阿里云容器服务Kubernetes 1.10.4目前已经上线,可以通过容器服务管理控制台非常方便地快速创建 Kubernetes 集群。具体过程可以参考[创建Kubernetes集群]

通过应用目录简便部署Istio

点击左侧的应用目录,在右侧选中ack-istio,在打开的页面中点击参数, 可以通过修改参数配置进行定制化,如下所示:
图片.png

原生 Jaeger 仅支持将数据持久化到 cassandra 和 elasticsearch 中,用户需要自行维护后端存储系统的稳定性,调节存储容量。Jaeger on Alibaba Cloud Log Service 借助阿里云日志服务的海量数据处理能力,让您享受 Jaeger 在分布式追踪领域带来便捷的同时无需过多关注后端存储系统的问题。

阿里云Kubernetes容器服务中整合了日志服务Log Service, 其分布式追踪数据会保存到阿里云日志服务Log Store中,所以在参数配置中,我们将原有的tracing设置为false,即不启用,同时设置tracing-on-sls配置如下所示:

# tracing(jaeger on AliCloud Log Service)
tracing-on-sls:
  enabled: true
  storage:
    type: aliyun-log
    aliyun_sls:
      project: newlogsample
      logstore: mylogstore1
      endpoint: cn-hangzhou.log.aliyuncs.com
      accesskey:
        id: 
        secret:       
.......
tracing:
  enabled: false

tracing-on-sls参数说明如下:

参数名 参数类型 描述
enabled 布尔型 true表示启用,false表示禁用
storage.type 字符串 指定用于存储 Span 的 类型,当前值必须为aliyun-log
storage.aliyun_sls.project 字符串 指定用于存储 Span 的 Project;项目名称只能包含小写字母、数字和连字符(-),且必须以小写字母和数字开头和结尾,长度为 3~63 个字节。
storage.aliyun_sls.endpoint 字符串 指定用于存储 Span 的 Project 所在的 Endpoint
storage.aliyun_sls.accesskey.id 字符串 指定用户标识 Access Key ID
storage.aliyun_sls.accesskey.secret 字符串 指定用户标识 Access Key Secret
storage.aliyun_sls.logstore 字符串 指定用于存储 Span 的 Logstore;须由小写字母、数字、连字符(-)和下划线(_)组成,且以小写字母或者数字开头和结尾,长度为3-63字节。Logstore 名称在其所属项目内必须唯一。

注意的是,如果指定的Project不存在,系统会自动创建一个新project,并且完成相应的初始化工作。

修改之后,在右侧选择对应的集群、命名空间istio-system,指定发布名称,然后点击部署。

几分钟之后,一套用于连接、管理以及安全化微服务的开放平台Istio实例就可以创建出来。

体验Istio

点击左侧的容器组,在右侧可以查看到刚创建的Istio相关容器组信息,如下所示:

图片.png

点击左侧的服务,在右侧可以查看到刚创建的Istio相关服务提供的访问地址,如下所示:

图片.png

部署应用示例

使用 Istio 运行应用程序示例不需要修改应用程序本身,而只需要在支持 Istio 的环境中配置和运行服务, Envoy sidecar 将会注入到每个服务中。

所有的微服务都将与一个 Envoy sidecar 一起打包,拦截这些服务的入站和出站的调用请求,并且提供了一个所需的 hook来完成控制功能,即利用 Istio 控制平面从外部控制整个应用的路由、遥测收集和策略执行。

下载安装istioctl

可以通过以下地址下载,安装之后可以找到示例代码的目录:
https://github.com/istio/istio/releases/

安装示例bookinfo

默认情况下需要手动注入 sidecar,运行下面的命令:

kubectl apply -f <(istioctl kube-inject --debug -f samples/bookinfo/platform/kube/bookinfo.yaml)

其中,istioctl kube-inject 命令用于在创建部署之前修改 bookinfo.yaml 文件,这样 Envoy会作为sidecar被注入到 Kubernetes 资源中。

自动注入Sidecar的功能在最新的阿里云Kubernetes容器服务中已经得到支持,请关注后续文章了解如何启用自动注入Sidecar功能。

上述命令启动四个微服务,如下图所示。3 个版本的reviews的服务 v1、v2、v3 都已启动。
图片.png

运行下面的命令定义Ingress网关:

istioctl create -f samples/bookinfo/networking/bookinfo-gateway.yaml

至此,示例中的微服务及其sidecar、Ingress都会建立,如下:
图片.png

确保所有服务已经正常启动:

kubectl get svc
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   172.19.2.177    <none>        9080/TCP   15m
productpage   ClusterIP   172.19.15.184   <none>        9080/TCP   15m
ratings       ClusterIP   172.19.9.228    <none>        9080/TCP   15m
reviews       ClusterIP   172.19.11.177   <none>        9080/TCP   15m

访问应用程序

运行下面的命令获取Ingress地址信息:

kubectl get svc  istio-ingressgateway -n istio-system

当然,也可以通过阿里云容器服务的界面查看Ingress地址信息,如下所示,点击左侧的服务,在右侧选择命名空间istio-system,就可以找到istio-ingressgateway的信息。

访问示例页面: http://{EXTERNAL-IP}/productpage

图片.png

多次刷新浏览器将在 productpage 中看到评论的不同的版本,它们会按照 round robin(红星、黑星、没有星星)的方式展现。

查看分布式调用链跟踪Jaeger on Aliyun Log Service

Jaeger收集启用了Istio的应用程序的调用链信息,点击阿里云容器服务页面中左侧服务栏,找到 tracing-on-sls-query 服务,如下:

图片.png

点击 tracing-on-sls-query 服务的外部端点地址,会看到如下一个Jaeger UI页面:

图片.png

Jaeger UI显示了分布式服务追踪信息的结果,右上角显示的时刻和持续时间散点图用可视化方式呈现了结果,并提供了向下挖掘能力。

用户可以选择用多种不同视图对追踪结果进行可视化,例如追踪时段内的直方图,或服务在追踪过程中的累积时间:

图片.png

查看阿里云日志服务Log Service

登录日志服务控制台,选择目标项目,单击项目名称。点击日志消费模式->查询分析->查询,如下所示:

图片.png

日志服务查询分析功能除了提供日志内容的各种语句查询能力以外,还提供以下多种扩展功能优化您的查询。

原始日志:
图片.png

统计图表:
图片.png

总结

阿里云Kubernetes容器服务已经提供了Istio与日志服务Log Service的集成能力,本文通过一个官方示例来重点介绍了Istio与基于阿里云日志服务的分布式追踪系统的整合能力。

欢迎大家使用阿里云上的容器服务,快速搭建微服务的开放治理平台Istio,比较简单地集成到自己项目的微服务开发中。

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
23小时前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
15天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
15天前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。
|
15天前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
本文源自张凯在2024云栖大会的演讲,介绍了阿里云容器服务在AI智算领域的创新与实践。从2018年推出首个开源GPU容器共享调度方案至今,阿里云容器服务不断推进云原生AI的发展,包括增强GPU可观测性、实现多集群跨地域统一调度、优化大模型推理引擎部署、提供灵活的弹性伸缩策略等,旨在为客户提供高效、低成本的云原生AI解决方案。
|
15天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
15天前
|
人工智能 运维 Kubernetes
拥抱智算时代:阿里云容器服务智能、托管、弹性新体验
本文总结了2024云栖大会容器计算专场的演讲内容,重点介绍了阿里云容器服务的新产品体验,包括智能、托管、弹性的特点,以及如何助力客户拥抱智算时代。文中还分享了多项实际案例和技术细节,展示了阿里云容器服务在提升用户体验和解决实际问题方面的努力。
|
1月前
|
监控 安全 Cloud Native
云原生安全:Istio在微服务架构中的安全策略与实践
【10月更文挑战第26天】随着云计算的发展,云原生架构成为企业数字化转型的关键。微服务作为其核心组件,虽具备灵活性和可扩展性,但也带来安全挑战。Istio作为开源服务网格,通过双向TLS加密、细粒度访问控制和强大的审计监控功能,有效保障微服务间的通信安全,成为云原生安全的重要工具。
51 2
|
2月前
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
67 8
|
2月前
|
Kubernetes 负载均衡 安全
Istio在微服务中释放服务网格的力量
Istio在微服务中释放服务网格的力量
69 4
|
4月前
|
负载均衡 监控 安全
Istio:微服务治理的超级英雄,一键解锁你的服务网格超能力,让管理复杂变简单!
【8月更文挑战第31天】随着云原生技术的发展,微服务架构成为主流,但其复杂性与管理难题也随之增加。Istio作为开源服务网格平台,通过独特的数据平面和控制平面设计,实现了微服务通信的透明管理,简化了治理复杂度。本文将对比Istio与传统微服务管理方法,详细介绍Istio的架构及其工作原理,包括Envoy代理、服务发现、负载均衡、流量管理、安全认证以及监控等功能。Istio不仅简化了微服务治理,还提供了强大的流量控制和安全机制,使开发者能更高效地管理应用。
110 2

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版