服务网格下的东西向与南北向流量管理实践|学习笔记

简介: 快速学习服务网格下的东西向与南北向流量管理实践

开发者学堂课程【云原生实践公开课:服务网格下的东西向与南北向流量管理实践】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/698/detail/12278


服务网格下的东西向与南北向流量管理实践


内容介绍:

一、为什么使用服务网格技术

二、什么是阿里云服务网格ASM

三、托管的服务网格ASM产品架构

四、托管模式下的优势

五、东西向与南北向流量管理

六、lstio入口网关的工作原理

七、Demo:定义东西向与南北向流量管理

八、用户在使用ASM时常见的问题


一、为什么使用服务网格技术

1."Dev/Ops/SRE团队将以统一的、声明的方式解决应用服务管理问题”

(1)控制平面层:托管控制面组件

(2)数据平面层:网格代理

(3)业务应用层:应用服务实例

随着功能增强,版本也会发生变化

随着版本变化,应用也要随之更新

由此可见,随着应用规模的增长,服务数量的不断增加,针对服务实现服务治理能力,依靠代码库这种方式会非常复杂。通过对服务治理能力的统一化、抽象化,变成一个独立的组件,就可以更好地支持更好地编程语言以及框架。帮助开发人员更

加关注到业务本身,不需要过多的关注服务治理组件上。

通过数据平面,可以更加详细的去观测网格数据化平面,通过控制平面去更好地管理操纵网格的行为。

image.png


二、什么是阿里云服务网格ASM

阿里云服务网格(Alibaba Cloud Service Mesh,简称ASM)提供了

  • 一个全托管式的服务网格平台
  • 兼容于社区lstio开源服务网格
  • 用于简化服务的治理,包括:
  • 服务调用之间的流量路由与拆分管理
  • 服务间通信的认证安全
  • 网格可观测性能力

目标:

尽可能地减轻开发与运维的工作负担,提升应用服务管理的能力


三、托管的服务网格ASM产品架构

保持兼容性,运行在阿里云上

1.控制平台:

声明式API/kubectl(兼容lstio):核心组件托管、精细化流量管理、零信任安

全、生命周期管理、网格诊断、混合部署

扩展与集成:链路追踪、云企业网、OPA、WASM扩展、Prometheus监控、SPIFFE/SPIRE、日志服务、GitOps

2.数据平台:

阿里云VPC、其他公有云或IDC

image.png

ASM作为业内首个一个全托管式的服务网格平台,这个控制平面的组件时运行在阿里云的资源上。

通过托管的模式,可以很好的去兼容控制面的组件,架构非常灵活,也提升了结构的可观测性。很好的支持了数据面不同版本的 K8s的集群。

在扩展与集成方面,ASM也整合了阿里云服务的很多能力,包括可观测性服务能力,这里涉及到了链路追踪、日志服务、云企业网等等,能支持跨地域等问题。

在数据平面,在ASM也支持多种不同的集群设施,包括托管的和无服务器的k8s


四、托管模式下的优势

1、托管的服务网格控制平面实例

高可用、免运维、内建安全最佳实践;开发人员可以更专注于业务应用而非基础设施运维。

2、增强的数据平面能力

优化整合阿里云中间件云产品,提供托管的链路追踪、监控、告警、日志等可观测能力。基于WebAssembly实现统一的代理可扩展能力。

3、跨集群跨区域的统一流量管理

一个网格实例可管理不同环境下的多个集群,结合阿里云云企业网等,轻松实现跨地域混合云应用流量统一管理。

4、支持多种基础设施的应用

支持容器应用和虚拟机应用间的流量管理,适合容器化上云的平滑迁移场景。

服务网格控制面组件与数据面K8s集群的生命周期管理解耦,以支持各自的升级维

护、更多版本的兼容


五、东西向与南北向流量管理

在老的单体应用架构中,我们几乎只处理南北流量,但是对于微服务,我们必须越来越多地处理数据中心内部的流量。对于单体应用来说,不同的组件之间通过调用应用内部的方法来通信。

边缘网关(Edge gateways)抽象了常见的流量协调功能,例如身份验证,日志记录和限流,但是在单体应用范围内进行的通信不需要这些活动。

在服务网格中,所谓的东西向流量管理就是指在数据面,集群内服务与服务之间流量的管理。与之相对应,南北向流量就是指集群外部的客户端连接到集群内的服

务,或者通过集群内的服务去访问集群外的服务。

1.公共网络:

公共IngressGateway、Proxy(sidcar)、Proxy(sidecar)

直接通过sidecar访问外部服务

2.私有网络:

私有IngressGateway、Service A、Service B

通过Egress Gateway将lstio 功能(例如监控和路由规则)应用于Egress流量。 

Istio 网关的负载均衡作用:

典型的服务网格具有一个或多个负载均衡器,也称为网关(Gateway),它们从外

部网络终止 TLS 并允许流量进入网格。

然后,流量通过边车网关(Sidecar gateway)流经内部服务。应用程序使用外部服务的场景也很常见,可以直接调用外部服务,或者在某些部署中强制通过专用出口

网关(Egress Gateway)离开网格的所有流量。

Istio 具有入口网关的概念,它扮演网络入口点的角色,负责保护和控制来自集群外部的流量对集群的访问。

image.png


六、lstio入口网关的工作原理

传统上,Kubernetes 使用 Ingress 控制器来处理从外部进入集群的流量。

使用 Istio 时,情况不再如此。Istio 网关用新的 Gateway 资源和 VirtualServices 资源来控制入口流量,它们协同工作以将流量路由到网格中。在网格内部不需要 Gateways,因为服务可以通过集群本地服务名称相互访问。

那么 Istio 网关是怎样工作的?请求如何到达它想要的应用程序?基本步骤如下:

1.客户端在特定端口上发出请求;

2.负载均衡器在这个端口上进行侦听,并将请求转发到集群中(在相同或新的端口);

3.在集群内部,请求被路由到 Istio IngressGateway 服务所侦听的负载均衡器转发过来的端口上;

4.Istio IngressGateway 服务将请求(在相同或新的端口)转发到对应的 pod 上;

5.在 IngressGateway pod 上会配置 Gateway 资源和 VirtualService 资源定义。Gateway 会配置端口、协议以及相关安全证书。VirtualService 的路由配置信息用于找到正确的服务;

6.Istio IngressGateway pod 会根据路由配置信息将请求路由到对应的应用服务上;

7.应用服务将请求路由到对应的应用 pod 上。

image.png

此外,Istio 的网关还扮演负载均衡和虚拟主机路由的角色。如图所示,可以看到默

认情况下 Istio 使用 Envoy 代理作为入口代理。 

Envoy 是一个功能强大的服务到服务代理,但它也有负载均衡和路由的功能,可代理的流量包括从服务网格外部到其内部运行的服务,或者从集群内部服务到外部服务。

在前面章节中介绍的 Envoy 的所有功能也可以在入口网关中使用。 

 

七、Demo:定义东西向与南北向流量管理

1、创建ASM实例

打开阿里云官网首页,在云计算产品,云计算基础里点击服务网格ASM进入官方首页

2、添加集群到ASM实例

image.png

3. 点击管理控制台,点击创建新网格,输入实例信息

image.png

点击添加按钮,可以将集群添加到实例中去,出现所管理的集群,选

image.png

择与网络处于同一VPC的集群。

选中集群后,点确定

image.png

重要提示:

将选定集群加入服务网格后,不允许再使用类似于istlioctl等命令在该集群上安装、

lstio组件﹔否则将可能会导致该集群的网格能力不可用。一旦误操作之后。

请先从网格中移除该集群,然后再重新添加。

4.添加入口网关

image.png

根据自身需要选择相应的端口

5.部署应用到ASM实

image.png

操作步骤:

(1) 登录容器服务控制台,在左侧导航栏中选择集群>命名空间。

(2) 在命名空间页面,从集群下拉列表中选择对应的集群。

(3) 在default命名空间的操作列,单击编辑。

(4) 在编辑命名空间对话框中,为该命名空间添加标签,单击添加。

(5) 从Github的Istio项目库中下载Bookinfo的YAML文件。

(6) 通过kubectl执行以下命令,将Bookinfo应用部署到ASM实例的集群中。

kubectl apply -f bookinfo.yaml

image.png

6.定义lstio资源

通过定义Istio资源,可以实现服务网格ASM的流量治理、鉴权以及安全保护等功能。

本文介绍如何定义虚拟服务、服务网关、目标规则这三种Istio资源,以实现相应的流量路由策略。

前提条件

  • 创建至少一个ASM实例,并添加至少一个ACK集群到该实例中。详情请参见

建ASM实例添加集群到ASM实例

  • 部署应用到ASM实例的集群中,详情请参见部署应用到ASM实例
  • 在加入到ASM实例的ACK集群中部署入口网关,详情请参见添加入口网关服

步骤一:定义Gateway资源

1. 登录ASM控制台

2. 在左侧导航栏,选择服务网格 > 网格管理。

3. 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。

4. 在网格详情页面左侧导航栏选择流量管理 > 网关规则,然后在右侧页面单击新建。

5. 在新建页面中,按以下步骤定义服务网关,然后单击确定。

1选择相应的命名空间。

本文以选择default命名空间为例。

(2)在文本框中,定义服务网关。可参考以下YAML定义,详情请参见Istio官方示例

代码示例:

apiVersion: networking.istio.io/v1alpha3

kind: Gateway

metadata:

name: bookinfo-gateway

spec:

selector:

istio: ingressgateway # use istio default controller

servers:

- port:

number: 80

name: http

protocol: HTTP

hosts:

- "*"

6. 在网关规则页面可以看到新建的bookinfo-gateway网关。

image.png

步骤二:定义虚拟服务

1. 登录ASM控制台

2. 在左侧导航栏,选择服务网格 > 网格管理。

3. 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。

4. 在网格详情页面左侧导航栏选择流量管理 > 虚拟服务,然后在右侧页面单击新建。

5. 在新建页面,按以下步骤定义虚拟服务,然后单击确定。

(1)选择相应的命名空间。

本文以选择default命名空间为例。

(2)在文本框中,定义Istio虚拟服务。可参考以下YAML定义,详情请参见Istio官方示例

代码示例:

apiVersion: networking.istio.io/v1alpha3

kind: VirtualService

metadata:

name: bookinfo

spec:

hosts:

- "*"

gateways:

- bookinfo-gateway

http:

- match:

- uri:

exact: /productpage

- uri:

prefix: /static

- uri:

exact: /login

- uri:

exact: /logout

- uri:

prefix: /api/v1/products

route:

- destination:

host: productpage

port:

number: 9080

7、在虚拟服务页面可以看到新建的bookinfo服务。

image.png

步骤三:访问入口网关

1. 既可以从ASM控制台查看入口网关服务的IP地址,也可以按照如下步骤从容器服务控制台进行查看。

(1) 登录容器服务管理控制台

(2) 在控制台左侧导航栏中,单击集群。

(3) 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的应用管理。

(4) 在集群管理页左侧导航栏中,选择网络 > 服务。

(5) 在服务页面,在命名空间下拉列表中选择istio-system,查看名为istio-ingressgateway服务所对应的外部端点信息,即是入口网关服务的IP地址。

2.在浏览器地址栏输入http://{入口网关服务的IP地址}/productpage,验证路由策略。

在虚拟服务中未定义Reviews微服务路由策略的情况下,3个版本之间默认的流量路由策略是轮询。因此持续刷新页面可以依次看到以下3个版本:

(1) v1版本不会调用Ratings服务。

(2) v2版本会调用Ratings服务,并使用1到5个黑色星形图标来显示评分信息。

(3) v3版本会调用Ratings服务,并使用1到5个红色星形图标来显示评分信息。

image.png


步骤四:定义目标规则

通过定义目标规则,可以指定微服务在多个节点间的负载均衡策略。

1. 在网格详情页面左侧导航栏选择流量管理 > 目标规则,然后在右侧页面单击新建。

2. 在新建页面中,按以下步骤定义目标规则,然后单击确定。

(1) 选择相应的命名空间,本文以选择default命名空间为例。

(2) 在文本框中,定义目标规则。可参考以下YAML定义,详情请参见Istio官方示例

示例说明:定义Reviews的三个版本微服务的负载均衡策略分别为,轮询(ROUND ROBIN,未定义时的默认策略)、最少连接数(LEAST_CONN)和随机(RANDOM)。

代码示例:

apiVersion:networking.istio.io/v1alpha3

kind:DestinationRule

metadata:

name:reviews

spec:

host:reviews

subsets:

-name:v1

labels:

-name:v2

labels:

version:v2

trafficPolicy:

loadBalancer:

simple:LEAST_CONN

-name:v3

labels:

version:v3

trafficPolicy:

loadBalancer:

simple:RANDOM

3. 目标规则页面可以看到新建的reviews目标规则。 

步骤五:增加新的虚拟服务

增加虚拟服务,定义新的流量路由策略,从而实现在微服务的指定版本之间按照不同的权重分发流量。

1. 在网格详情页面左侧导航栏选择流量管理 > 虚拟服务,然后在右侧页面单击新建。

2. 在新建页面中,按以下步骤定义虚拟服务,然后单击确定。

(1) 选择相应的命名空间本文以选择default命名空间为例。

(2) 在文本框中,定义虚拟服务。可参考以下YAML定义,详情请参见Istio官方示例

示例说明:

将Reviews微服务的流量按照50%的权重分别指向v2和v3版本。

apiVersion: networking.istio.io/v1alpha3

kind: VirtualService

metadata:

name: reviews

spec:

hosts:

- reviews

http:

- route:

- destination:

host: reviews

subset: v2

weight: 50

- destination:

host: reviews

subset: v3

weight: 50

4、虚拟服务页签可以看到新建的reviews虚拟服务。

执行结果

在浏览器地址栏输入

http://{入口网关服务的IP地址}/productpage,持续刷新,可以看到Bookinfo应用页面在v2和v3之间等权重地轮流切换,显示为黑色星形图标或者红色星形图标。 

详情可参考链接如下:

https://help.aliyun.com/document detail/149552.html

 

八、用户在使用ASM时常见的问题

1.为何不能在ASM实例中部署应用?

ASM控制台提供的Kubeconfig配置是用于连接ASM实例,并通过kubectl进行操作lstio CRD(自定义资源),例如虚拟服务virtualservice等。添加的ACK的操作保持不变,仍然使用ACK控制台提供的配置。

2.为何不能在ASM管理的集群中部署lstio的虚拟服务等CRD资源?

操作lstio资源是属于控制面,所以连接的Kubeconfig也是控制面提供的配置,使用方式与普通的kubeconfig—样

3.网格有自己的连接配置,如果不用这个连接配置,直接使用集群的连接配置是否也可操作istio资源?

如果想部署istio这些虚拟服务这些资源,必须到ASM平面。lstio CRD对应的资源只需要在控制平面保存就可以了,控制平面会将对应的规则转换成sidecar里的规则应用起来。

相关文章
|
5月前
|
Kubernetes API 容器
基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道
基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道
10891 6
|
8月前
|
运维 Kubernetes Cloud Native
服务网格实施周期缩短 50%,丽迅物流基于阿里云 ACK 和 ASM 的云原生应用管理实践
通过本文介绍丽迅物流关于基于阿里云服务网格 ASM 如何加速企业业务云原生化进程的实践经验。
|
9月前
|
存储 Kubernetes 负载均衡
【服务网格】最佳实践在哪里-2:多集群流量管理
各位,多集群这个场景在服务网格这一块也算是越来越热了。早在1.4版本,istio社区就已经提出了多集群环境下istio的部署模型,提供统一的控制面管理多集群中服务的能力。而最近随着服务网格的配套可观测项目kiali推出v1.69版本,我们更是可以在一个kiali实例中就纵览多集群中的流量规则、流量拓扑与服务详情,多集群的使用体验逐渐完善,利用这个场景玩法的用户也是越来越多了。不过,任何新事物的引入
|
人工智能 自然语言处理 运维
站酷基于服务网格 ASM 的生产实践
随着站酷业务服务的持续改造,将持续基于阿里云服务网格 ASM 产品,获得更加丰富便捷的企业级特性,助力降本增效。
157 0
站酷基于服务网格 ASM 的生产实践
|
人工智能 自然语言处理 运维
站酷基于服务网格ASM的生产实践
随着站酷业务服务的持续改造,将持续基于阿里云服务网格 ASM 产品,获得更加丰富便捷的企业级特性,助力降本增效。
站酷基于服务网格ASM的生产实践
|
Kubernetes 安全 机器人
Lyft 微服务研发效能提升实践 | 3. 利用覆盖机制在预发环境中扩展服务网格
Lyft 微服务研发效能提升实践 | 3. 利用覆盖机制在预发环境中扩展服务网格
528 0
Lyft 微服务研发效能提升实践 | 3. 利用覆盖机制在预发环境中扩展服务网格
|
安全 测试技术 微服务
站酷基于服务网格 ASM 的生产实践
随着站酷业务服务的持续改造,将持续基于阿里云服务网格ASM产品,获得更加丰富便捷的企业级特性,助力降本增效,包括但不限于:1、提供便捷的网格内服务安全与鉴权方案:ASM现已提供ASM安全策略中心,可帮助快速配置网关与网格内服务安全鉴权方案。2、更加精细化的流量治理能力:随着站酷微服务化改造的不断加深,将会持续挖掘ASM提供的多项企业级流量治理特性,如全链路灰度发布、本地限流、接口级熔断。
155 0
站酷基于服务网格 ASM 的生产实践
|
运维 Kubernetes Dubbo
服务网格技术开源、自研、商业化三位一体战略解读 | 学习笔记
快速学习 服务网格技术开源、自研、商业化三位一体战略解读
244 0
服务网格技术开源、自研、商业化三位一体战略解读 | 学习笔记
|
运维 Kubernetes Cloud Native
【视频】服务网格赛题解析 | 学习笔记
快速学习【视频】服务网格赛题解析
124 0
【视频】服务网格赛题解析 | 学习笔记
|
安全 算法 Cloud Native
使用阿里云服务网格 ASM 和 Intel Multi-Buffer 技术实现更快的应用服务间加密通信|学习笔记
快速学习使用阿里云服务网格 ASM 和 Intel Multi-Buffer 技术实现更快的应用服务间加密通信
304 0
使用阿里云服务网格 ASM 和 Intel Multi-Buffer 技术实现更快的应用服务间加密通信|学习笔记