Service Mesh 的中文译为“服务网格”,是一个用于处理服务和服务之间通信的基础设施层,它负责为构建复杂的云原生应用传递可靠的网络请求,并为服务通信实现了微服务所需的基本组件功能,例如服务发现、负载均衡、监控、流量管理、访问控制等。在实践中,服务网格通常实现为一组和应用程序部署在一起的轻量级的网络代理,但对应用程序来说是透明的。Service Mesh 部署网络结构图 Service Mesh有四大特点:
如此一来,Service Mesh将业务模块和服务治理分开。从上图中我们看到,控制面和数据面分离,应用在部署的时候,每个应用附带一个Side Car,这个Side Car是拦截每一个应用对外请求的。同时控制面的服务治理策略下到Side Car中具体的执行,这样的话,即使业务模块升级和服务治理的升级也能互不影响的,还能动态调整服务治理的规则和策略 从Service Mesh的结构和特点,我们可以总结出其对于服务治理的理念:
1、微服务治理与业务逻辑解耦:把大部分SDK能力从应用中剥离出来,并拆解为独立进程,以 sidecar 的模式进行部署。
2、异构系统的统一治理:方便多语言的实施,解锁升级带来的困难。
3、价值:(1)可观察性:服务网格捕获诸如来源、目的地、协议、URL、状态码、延迟、持续时间等线路数据;(2)流量控制:为服务提供智能路由、超时重试、熔断、故障注入、流量镜像等各种控制能力。(3)安全性高:服务的认证、服务间通讯的加密、安全相关策略的强制执行;(4)健壮性:支持故障注入,对于容灾和故障演练等健壮性检验帮助巨大。我们以Service Mesh的杰出代表Istio为例来聊聊最新的服务治理的架构,它对Service Mesh完全支持,架构清晰,拆分数据面、控制面;拥有通信、安全、控制、观察等功能,实现开放,且插件化,多种可选实现。Istio可结合K8S使用,K8S提供服务生命周期的管理,Istio在K8S之上通过服务治理的整体的功能的实现。
Isito是Service Mesh的产品化落地,是目前最受欢迎的服务网格,功能丰富、成熟度高。Linkerd是世界上第一个服务网格类的产品 官方地址:https://istio.io主要有以下特点
- 流量管理
- 负载均衡
- 灰度发布
- 认证
- 鉴权
- 限流
- ACL
- 监控
- 调用链
注:此页中图片引用自Istio官网
◆ 性能总结 Istio 负载测试网格包含了 1000 个服务和 2000 个 sidecar,全网 格范围内,QPS 为 70,000。在使用 Istio 1.6.2 运行测试后,我们 得到了如下结果:
• 通过代理的 QPS 有 1000 时,Envoy 使用了 0.5 vCPU 和 50 MB 内存。
• 网格总的 QPS 为 1000 时,istio-telemetry 服务使用了 0.6 vCPU。
• Pilot 使用了 1 vCPU 和 1.5 GB 内存。
• 90% 的情况 Envoy 代理只增加了 6.3 ms 的延迟
注:此页中图片和数据引用自Istio官网
可参考官方文档,以部署1.6版本作为演示,部署的demo模式,所有组件都安装
# wget https://github.com/istio/istio/releases/download/1.6.2/istio-1.6.2-linux-amd64.tar.gz
卸载:
set profile=demo | kubectl delete -f -
# 手动注入
这里需要使用istio自带的ingressgateway来进行流量管理,因此需要把对应业务的流量从这里面写入,没有使用k8s自带的ingress,使用istio自带的ingress当作服务的边界,便于流量管理Gateway为网格内服务提供负载均衡器,提供以下功能:
•L4-L6的负载均衡
•对外的mTLS
Gateway根据流入流出方向分为:
•IngressGateway:接收外部访问,并将流量转发到网格内的服务。
•EgressGateway:网格内服务访问外部应用。示例:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: httpbin-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: httpbin
spec:
hosts:
- "*"
gateways:
- httpbin-gateway
http:
- route:
- destination:
host: httpbin
port:
number: 8000
本节将部署一个多语言异构化的微服务示例(Bookinfo),让大家对服务网格有一个清晰的认识。
Bookinfo 应用分为四个单独的微服务:
• productpage :productpage 微服务会调用 details 和reviews两个微服务,用来生成页面。
• details :这个微服务包含了书籍的信息。
• reviews :这个微服务包含了书籍相关的评论。它还会调用ratings微服务。
• ratings :ratings微服务中包含了由书籍评价组成的评级信息。
reviews 微服务有 3 个版本:
• v1 版本不会调用 ratings 服务。
• v2 版本会调用ratings服务,并使用 5个黑色五角星来显示评分信息。
• v3 版本会调用ratings服务,并使用5个红色五角星 来显示评分信息。一图胜千言,整体架构如下:
将Bookinfo部署到k8s默认命名空间,即default。
kubectl label namespace default istio-injection=enabled
# 进入istio的工作目录
# 为Bookinfo部署入口网关
备注:生产环境一般使用
istio-ingressgateway
作为联网的唯一出入口。
istio自带了三个监控平台 •监控指标(Grafana) 1、请求错误率 2、请求延时(响应时间) •网格可视化(Kiali) 3、链路调用拓扑图 4、RPS(每秒请求),也有请求错误率 5、请求/响应数据包大小 6、查看pod日志 7、istio配置资源在线编辑 •调用链跟踪(Jaeger) 8、一个服务涉及的调用情况 9、分析数据包中具体请求/响应信息 10、响应时间
# istioctl dashboard -h
# kubectl get svc -n istio-system
# cat monitor-gateway.yaml
# kubectl apply -f monitor-gateway.yaml
# cat /data/nginx/vhosts/istio.holder.cn.conf
绑定域名到本地hosts,即可访问
# 为Bookinfo部署入口网关
绑定域名,然后访问bookinfo.istio.double.com既可访问,不停地刷新图书单品页,在kiali中会实时地绘制服务网格,如下:
请求响应如下:
监控指标如下:
对于服务的可观察性,kiali还提供了很多其他的功能,这也是Istio相较于其他服务网格框架的优势,这里就不展示了。
公众号:运维开发故事
github:https://github.com/orgs/sunsharing-note/dashboard
爱生活,爱运维
如果你觉得文章还不错,就请点击右上角选择发送给朋友或者转发到朋友圈。您的支持和鼓励是我最大的动力。喜欢就请关注我吧~
扫码二维码
关注我,不定期维护优质内容
温馨提示
如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。
........................