简介Istio的服务模型是怎样的?如何实现流量治理1.Istio服务模型服务(Service)和版本(Version):Istio中的服务以kubernetes中服务的形式存在,定义不同的服务版本。通过Deployment创建工作负载,通过Service关联这些负载,通过域名或虚拟IP访问后端Pod。服务实例(ServiceInstance):一个服务可以包含一组实例,在Kubernetes中用Endpoints实现,一组域名或IP地址。服务(Service)示例:apiVersion:v1kind:Servicemetadata:name:helloworldlabels:app:helloworldservice:helloworldspec:ports:-port:5000name:httpselector:app:helloworld注:创建名为helloworld的Service,指向“app:helloworld”Kubernetes会自动创建一个与Service同名的Endpoints对象,Selector会继续跟踪映射属于helloworld的Pod。示例工作负载:apiVersion:apps/v1kind:Deploymentmetadata:name:helloworld-v1labels:app:helloworldversion:v1spec:replicas:1selector:matchLabels:app:helloworldversion:v1template:metadata:labels:app:helloworldversion:v1spec:containers:-name:helloworldimage:docker.io/istio/examples-helloworld-v1resources:requests:cpu:"100m"imagePullPolicy:IfNotPresent#Alwaysports:-containerPort:5000备注:在Deployment模式下创建工作负载,关联版本和镜像。2.Istio流量治理治理原理流量治理是通过Isito中的VirtualService、DestinationRule、ServiceEntry等配置实现的,即Istio通过xDS向Enovy发送流量配置,拦截入站和出站流量,并在流量通过时执行规则,以实现交通治理。通常,流量治理包括:负载均衡策略的动态变化、不同版本的灰度发布、服务治理限流熔断、故障注入演练等。概念说明1.VirtualService含义:形式上是一个虚拟服务,转发流量到相应的后端服务。1.1重要参数说明hosts为必填字段,用于匹配访问地址,建议使用域名的字母而不是IP地址。Gateway与网格外的流量配置关联,表示规则被执行;网格内外都需要访问:Gateway和mesh两个字段需要配置http处理HTTP流量tls处理不终止的TLS和HTTPS流量tcp处理TCP流量,如果没有定义http和tls,全部流量将通过tcp路由。exportTo用于控制命名空间的可见性。它可以控制某个命名空间下的VirtualService是否被其他命名的SideCars和Gateways使用。如果没有赋值,则表示它是全局可见的。备注:VirtualService规则是一个数组,当第一个规则生效时,会跳出,不再检查其他规则。1.2VirtualService典型应用不同服务组合通过不同路径映射到不同版本通过不同URI映射到不同服务版本1.3示例apiVersion:networking.istio.io/v1alpha3kind:VirtualServicemetadata:name:helloworldspec:hosts:-"*"gateways:-helloworld-gatewayhttp:-match:-uri:exact:/helloroute:-destination:host:helloworldport:number:50002.DestinationRule含义:通常与VirtualService结合使用,VirtualService描述满足什么条件将流量转发到后端服务,而DestinationRule描述了到达后端时如何处理,类似于方法内部逻辑。2.1重要参数描述hosts为必填项,表示规则使用的对象trafficPolicy规则的具体内容可以包括负载均衡策略、异常点检查、连接池策略等subsets服务子集,常用于定义版本serviceexportTo用于控制命名空间的可见性,未分配全局可见2.2DestinationRule典型应用负载均衡策略规则不同版本的灰度流量,例如:通过子集服务进行流量节流,例如:请求量和请求超时等2.3示例apiVersion:networking.istio.io/v1alpha3kind:DestinationRulemetadata:name:bookinfo-ratingsspec:host:ratings.prod.svc.cluster.localtrafficPolicy:loadBalancer:simple:LEAST_CONNsubsets:-name:testversionlabels:version:v3trafficPolicy:loadBalancer:simple:ROUND_ROBIN3.ServiceEntry含义:包括离网服务istio-grid。3.1重要参数说明hosts为必填项,与ServiceEntry关联的主机名主要用于http协议,其他协议无效address表示与服务关联的地址port表示与服务关联的端口Location用于设置是否serviceisinthegridorMESH_EXTERNALoutsidegrid:表示在网格外,通过API访问外部服务MESH_INTERNAL:表示在网格内,不能直接注册到网格注册中心的服务解析服务发现方式,SubjectAltNames如NONE,STATIC,DNS等表示服务负载SAN列表endpoints表示与网格服务关联的网络地址,可以是IP或域名3.2ServiceEntry访问外部服务的典型应用配置3.3例子apiVersion:networking.istio.io/v1alpha3kind:ServiceEntrymetadata:name:baidu-externalspec:hosts:-www.baidu.comports:-number:80name:HTTP协议:HTTP解析:DNS位置:MESH_EXTERNAL
