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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习服务网格下的东西向与南北向流量管理实践

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

课程地址: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里的规则应用起来。

相关文章
|
8月前
|
运维 Kubernetes 网络协议
基于虚拟服务配置的渐进式迁移实践:Istio集群至ASM集群的平滑切换
本文介绍了从Istio+k8s环境迁移到阿里云ASM+ACK环境的渐进式方法,通过配置虚拟服务和入口服务实现新老集群间的服务调用与流量转发,确保业务连续性与平滑迁移
786 132
|
运维 负载均衡 监控
探索微服务架构下的服务网格(Service Mesh)实践之路
【8月更文挑战第30天】 在当今日益复杂的分布式系统中,微服务架构已成为众多企业解决系统扩展与维护难题的利器。然而,随着服务的不断增多和网络交互的复杂性提升,传统的微服务管理方式开始显得力不从心。服务网格(Service Mesh)作为一种新兴的解决方案,旨在通过提供应用层的网络基础设施来简化服务间通讯,并增强系统的可观察性和安全性。本文将分享我在采用服务网格技术过程中的经验与思考,探讨如何在现代云原生环境中有效地实施服务网格,以及它给开发和运维带来的变革。
|
Cloud Native 容器 Kubernetes
基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道
本文简要讨论了使用流量泳道来实现全链路流量灰度管理的场景与方案,并回顾了阿里云服务网格 ASM 提供的严格与宽松两种模式的流量泳道、以及这两种模式各自的优势与挑战。接下来介绍了一种基于 OpenTelemetry 社区提出的 baggage 透传能力实现的无侵入式的宽松模式泳道,这种类型的流量泳道同时具有对业务代码侵入性低、同时保持宽松模式的灵活特性的特点。同时,我们还介绍了新的基于权重的流量引流策略,这种策略可以基于统一的流量匹配规则,将匹配到的流量以设定好的比例分发到不同的流量泳道。
73708 16
基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道
|
负载均衡 测试技术 网络安全
阿里云服务网格ASM多集群实践(一)多集群管理概述
服务网格多集群管理网络打通和部署模式的多种最佳实践
|
Cloud Native 测试技术 开发者
阿里云服务网格ASM多集群实践(二):高效按需的应用多环境部署与全链路灰度发布
介绍服务网格ASM提出的一种多集群部署下的多环境部署与全链路灰度发布解决方案。
|
监控 负载均衡 数据安全/隐私保护
探索微服务架构下的服务网格(Service Mesh)实践
【5月更文挑战第6天】 在现代软件工程的复杂多变的开发环境中,微服务架构已成为构建、部署和扩展应用的一种流行方式。随着微服务架构的普及,服务网格(Service Mesh)作为一种新兴技术范式,旨在提供一种透明且高效的方式来管理微服务间的通讯。本文将深入探讨服务网格的核心概念、它在微服务架构中的作用以及如何在实际项目中落地实施服务网格。通过剖析服务网格的关键组件及其与现有系统的协同工作方式,我们揭示了服务网格提高系统可观察性、安全性和可操作性的内在机制。此外,文章还将分享一些实践中的挑战和应对策略,为开发者和企业决策者提供实用的参考。
|
运维 监控 负载均衡
探索微服务架构下的服务网格(Service Mesh)实践之路
【4月更文挑战第30天】 在现代云计算的大背景下,微服务架构以其灵活性和可扩展性成为众多企业转型的首选。然而,随着服务的激增和网络交互的复杂化,传统的服务通信模式已无法满足需求,服务网格(Service Mesh)应运而生。本文通过分析服务网格的核心组件、运作机制以及在企业中的实际应用案例,探讨了服务网格在微服务架构中的关键作用及其带来的变革,同时提出了实施过程中面临的挑战和解决策略。
|
运维 监控 Cloud Native
云原生架构下的服务网格演进与实践
【5月更文挑战第23天】 随着云计算技术的不断成熟,云原生架构已成为推动企业数字化转型的关键动力。本文将深入探讨服务网格在云原生环境中的重要性,分析其在微服务管理、流量控制和安全性方面的创新应用。通过对服务网格的技术和实践案例的剖析,揭示其如何优化云原生应用的部署、运行和管理,为企业构建更加动态、可靠和高效的分布式系统提供策略指导。
|
运维 监控 负载均衡
探索微服务架构下的服务网格(Service Mesh)实践
【4月更文挑战第28天】 在现代云原生应用的后端开发领域,微服务架构已成为一种广泛采用的设计模式。随着分布式系统的复杂性增加,服务之间的通信变得愈加关键。本文将深入探讨服务网格这一创新技术,它旨在提供一种透明且高效的方式来管理、监控和保护微服务间的交互。我们将从服务网格的基本概念出发,分析其在实际应用中的优势与挑战,并通过一个案例研究来展示如何在现有的后端系统中集成服务网格。