热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

K8s与ServiceMesh(服务与流量治理)

 K8s相关资料可参考链接: Kubernetes简介1  什么是ServiceMesh ServiceMesh 是一个专门处理服务通讯的基础设施层。它的职责是在由云原生应用组成服

 K8s相关资料可参考链接: Kubernetes简介


1  什么是Service Mesh 

Service Mesh 是一个专门处理服务通讯的基础设施层。它的职责是在由云原生应用组成服务的复杂拓扑结构下进行可靠的请求传送。在实践中,它是一组和应用服务部署在一起的轻量级的网络代理,并且对应用服务透明。

以上这段话有四个关键点:



  •   本质:基础设施层。

  •   功能:请求分发。

  •   部署形式:网络代理。

  •   特点:透明。

下图是Service Mesh整体架构图。整个系统分为控制平面(上面深蓝色框)和数据平面(下面所有的虚线框)。

图中每个虚线框代表一个节点(相当于kubernetes中的worker node),绿色的APP是在节点中运行的各类应用程序,浅蓝色的Sidecar相当于是一个网络通信的代理,每个节点需要与外界通信,都是通过这个代理完成的。控制平面通过xDS协议把配置信息下发给Sidecar,这些配置信息包括节点的路由信息,需要监听的端口等

 

 


2    Istio

Service Mesh是一种理念,而Istio则是这种理念的一个具体实现方案。

Istio 提供了一个完整的解决方案,可以以统一的方式去管理和监测你的微服务应用。同时,它还具有管理流量、实施访问策略、收集数据等方面的能力,而所有的这些都对应用透明,几乎不需要修改业务代码就能实现。

下图是Istio的架构图,也分为控制平面和数据平面,控制平面实现配置的下发,安全认证,流量监控等功能。数据平面是承载服务的主题,即Kubernetes中的worker node。图中的Proxy即是Service Mesh中的Sidecar,负责节点流量的转发。在Istio官方使用的Proxy是Envoy。而MOSN是阿里开发的一个开源的Proxy。(MOSN的相关知识可参考官网文档https://mosn.io/docs/)

 

 

 

 Istio 流量管理的核心组件就是 PilotPilot 主要功能就是管理和配置部署在特定 Istio 服务网格中的所有 sidecar 代理实例。它管理 sidecar 代理之间的路由流量规则,并配置故障恢复功能,如超时、重试和熔断。

当在Kubernetes中使用Istio的时候,其作用主要有如下几点:



  • 监控服务注册中心(如 Kubernetes)的服务注册情况。在 Kubernetes 环境下,会监控 service、endpoint、pod、node 等资源信息。

  • 监控 Istio 控制面信息变化,在 Kubernetes 环境下,会监控包括 RouteRule、 VirtualService、Gateway、EgressRule、ServiceEntry 等以 Kubernetes CRD(K8s自定义资源) 形式存在的 Istio 控制面配置信息。



  • 将上述两类信息合并组合为 sidecar 可以理解的(遵循 Envoy data plane api 的)配置信息,并将这些信息以 gRPC 协议提供给 sidecar。

由以上几点看出,pilot起到了连接Kubernetes和数据平面的作用,它将由kubernetes产生的配置信息转化成数据平面可以识别的格式然后下发给数据平面。

 


3 资源   

Service、Gateway、Virtualservice、destinationrule 资源之间的关系 如下图

 

 


3.1    Service

Service相关字段说明:

metadata.name:给服务命名,该名称在命名空间内唯一,用于标识该服务。

spec.ports.name:给服务使用的端口命名。

spec.ports.port:外部访问该服务时使用的端口。

spec.ports.protocol:该服务的协议。

spec.ports.targetPort:提供服务的pod实际使用的端口。

spec.selector:选择具有指定标签的pod作为提供服务的实体。

spec.type:类型被指定为ClusterIP后,系统会自动为该服务分配一个IP地址,该IP地址可用于对该服务进行访问,该IP地址是一个虚拟的IP,没有承载实体,也就是说该IP不能ping通,只有结合该服务的端口使用

apiVersion: v1
kind: Service
metadata:
labels:
XXXX:XXX
name: test-cdn-svc-cm-agent-1
namespace: test
spec:
ports:
- name: test-agent
port: 3400
protocol: TCP
targetPort: 3400
selector:
XXXX:XXX
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}

3.2    Gateway

Gateway相关字段说明:

spec.selector:指定执行该gateway定义的路由规则的pod。即该gateway定义的规则会下发到具有这些标签的pod上去。

spec.servers.hosts:gateway指向的服务的域名,*号表示任意域名都满足要求。

spec.servers.port:指定gateway需要监听的端口名称,端口号,协议。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
labels:
XXX: XXX
name: test-http-gateway-1
namespace: test-node
spec:
selector:
XXXX:XXX
servers:
- hosts:
- '*'
port:
name: test1httpListener
number: 13401
protocol: HTTP

3.3    Virtualservice

Virtualservice相关字段说明:

spec.gateways:virtualservice必须关联gateway来使用,此处指定关联的gateway。(Istio官方规定virtualservice可关联gateway使用,也可以不关联gateway)

spec.http:是一个具体的路由项,这里的意识是当前缀匹配到“/”时(即任意前缀),指定路由目的地址为test-1-http.test-node.svc.cluster.local,端口为3401。timeout表示连接超时时间。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
labels:
XXX:XXX
name: test-cdn-http-vs-1
namespace: test-node
spec:
gateways:
- test-http-gateway-1
hosts:
- '*'
http:
- match:
- uri:
prefix: /
route:
- destination:
host: test-1-http.test-node.svc.cluster.local
port:
number: 3401
timeout: 4s

关于gateway和virtualservice的说明:

gateway和virtualservice都是在Istio中定义的资源,Kubernetes中没有这个资源。

从它们的关系图中可知,gateway是把流量引进来,然后流量具体要交个哪个服务处理是由virtualservice决定的


3.4   DestinationRule

 destinationrule可以将流量进行更加细化的区分,比如可以根据同一个服务的不同版本来决定流量的转发。destinationrule可以用于实现金丝雀发布,灰度发布等功能,具体字段如下:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: bookinfo
-ratings
spec:
# 含义同VirtualService中destination的host字段一致。
host: ratings.prod.svc.cluster.local
# 流量策略,包括负载均衡、连接池策略、异常点检查等
trafficPolicy:
# 负载均衡策略,支持随机负载均衡
/按权重负载均衡 /最少请求负载均衡 / hash轮训等
loadBalancer:
simple: CONSISTENT_DST
#simple: ROUND_ROBIN
#simple: LEAST_CONN
#simple: RANDOM
#simple: PASSTHROUGH
# 连接池策略
connectionPool:
# tcp连接池设置
tcp:
maxConnections:
100
connectTimeout: 30ms
tcpKeepalive:
time: 7200s
interval: 75s
http:
http2MaxRequests:
1000
maxRequestsPerConnection:
10
# 异常点检查
outlierDetection:
consecutiveErrors:
7
interval: 5m
baseEjectionTime: 15m
# tls设置
tls:
mode: MUTUAL
clientCertificate:
/etc/certs/myclientcert.pem
privateKey:
/etc/certs/client_private_key.pem
caCertificates:
/etc/certs/rootcacerts.pem
# 服务端点集合
subsets:
# subset名称可以用于路由规则中的流量拆分,与virtualService的subset的引用
- name: testversion
# 使用标签对服务注册表中的服务端点进行筛选
labels:
version: v3
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN

  

参考资料:

MARKO LUKŠA. Kubernetes in Action. Manning Publications Co. 2018
https://martinfowler.com/articles/microservices.html

https://www.redhat.com/zh/topics/microservices/what-is-istio

https://jimmysong.io/kubernetes-handbook/cloud-native/cloud-native-definition.html
https://www.servicemesher.com/istio-handbook/
https://kubernetes.io/docs/home/
https://istio.io/latest/docs/


 



推荐阅读
  • Kubernetes(k8s)基础简介
    Kubernetes(k8s)基础简介目录一、Kubernetes概述(一)、Kubernetes是什么(二& ... [详细]
  • 2019我的金三银四
    先讲一下自己的情况吧,二本学生,17年毕业,目前在一家跨境电商从事Java技术开发工作(不是阿里,没那么厉害),技术栈目前偏向于容器云、持续集成持续交付这一块,也就是SpringBoot、Kuber ... [详细]
  • docker+k8s+git+jenkins
    docker+k8s+git+jenkins,Go语言社区,Golang程序员人脉社 ... [详细]
  • k8shelm官网:https:helm.sh点击charts:https:artifacthub.iopackagessearch?sortrelevance&page11.1h ... [详细]
  • 黄东旭: 关于基础软件产品价值的思考
    黄东旭:关于基础软件产品价值的思考-好久没写东西了,正好趁着春节的节后综合症发作写写文章热身一下,记得前几年偶尔会写一些关于TiDB产品功能解读的文章,TiDB5.0发了那么长时间 ... [详细]
  • kubelet配置cni插件_Kubernetes新近kubectl及CNI漏洞修复,Rancher 2.2.1发布
    今天,Kubernetes发布了一系列补丁版本,修复新近发现的两个安全漏洞CVE-2019-1002101(kubectlcp命令安全漏洞)和CVE-2 ... [详细]
  • “自主设计与实施的故障注入微服务Sidecar,欢迎大佬批评指正!”
    “故障注入Sidecar“——为您的微服务注入故障以验证集群性能!由于导师和实验室师兄们的科研需要,本人专门以Sidecar的模式设计了一个用于错误注入的微服务模块。该模块可以与任 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 数字账号安全与数据资产问题的研究及解决方案
    本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 在Java中,我会做这样的事情:classPerson{privateRecordrecord;publicStringname(){record().get(name);}p ... [详细]
author-avatar
坑爹的马_782
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有