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

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

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

课程地址:https://developer.aliyun.com/learning/course/752/detail/13223


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


内容介绍:

八、定义 Istio 资源

九、常见问题


八、定义 istio 资源

1、步骤一:定义 Gateway 资源

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

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

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

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

apiversion:networking. istio. io/vlalpha3

kind:Gateway

metadata:

name:bookinfo-gateway

spec:

selector:

istio:ingressgateway#use istio default controller servers:

-port:

number:80

name:http

protocol:HTTP

hosts:

-‘’ * ‘’

在服务网关页签可以看到新建的 bookinfo-gateway 网关。

3)通过前面介绍知道在 AMS 库里面可以定义用于描述路由规则的 istio gateway资源、istio virtualserve 资源,通过他描述一些路由规则。在控制面里面为了定义南北向的流量管理,去定义一个 istio gateway CRD YAML 定义。拷贝好 YAML 之后,切换到服务网格控制平面这个板块,点击新建按钮,在新的窗口里面可以指定命名空间,并且输入 YAML 文件,在 YAML 里面可以看到定义一个 istio  gateway 类型的 CRD 定义。

image.png

他暴露了一个8 0的端口,点击确定之后,就可以看到创建了一个名称为 bookinfo-getaway CRD

2、步骤二:定义虚拟服务

1)登录 ASM 控制台。

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

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

4)在控制平面区域,单击虚拟服务页签,然后单击新建。

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

i.选择相应的命名空间。

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

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

apiversion:networking. istio. io/vlalpha3

kind:VirtualService

metadata:

name:bookinfo

spec:

hosts:

-‘’ * ‘’

gateways:

-bookinfo-gateway

http:

-match:

-uri:

exact:/productpage

-uri:

prefix:/static

-uri:

exact./loʊin.

6)第二步,切换文档可以看到第二步会定义一个虚拟服务,虚拟服务也是相当的方式,可以在服务网格的控制台里面去定义一个虚拟服务,命名空间是 default,在这个 API Serve 里面定义了一个,可以看到它绑定了 getaway 的就是刚才创建的 bookinfo getaway。他里面会定义一个 hppt 的路由规则,当访问 productpage 的时候,他就会定义 productpage  9080的一个端口上面去,点击确定,就可以完成虚拟服务的创建。

3、步骤三:访问入口网关

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

i.登录容器服务管理控制台。

ii.在左侧导航栏,选择路由与负载均衡>服务。

iii.在服务(Service)页面,从集群下拉列表中选择部署入口网关的集群,然后在命名空间下拉列表中选择 istio-system

iv.查看名为 istio-ingressgateway 服务所对应的外部端点信息,即是入口网关服务的IP地址。

image.png

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

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

v1版本不会调用 Ratings 服务。

v2版本会调用 Ratings 服务,并使用15个黑色星形图标来显示评分信息。

v3版本会调用 Ratings 服务,并使用15个红色星形图标来显示评分信息。

image.png

3)在虚拟服务和服务网关都定义好了之后,第三步就是访问入口网关。入口网关的地址既可以通过 ack 的控制台获取地址,也可以通过在 ASM 这个控制台可以看到入口网关的 IP 地址,copy 这个地址,然后去访问这个定义好的服务。看到了这个登录好的 Demo 应用,

image.png

通过入口网关南北向的流量管理,通过访问这个暴露的 newd balance,负载均衡的 IP 地址,入口网关的地址,通过输入 productpage 这个路径,可以访问到客户端服务。刷新之后可以看到,会看到右侧画面结果不同,意味着就是调用了不同的版本服务。

image.png

这个过程中证明了在 Demo 实例中南北向,通过入口网关看到只需要定义两个 YAML 文件,一个是虚拟服务,一个是 getaway YAML 定义,就可以把南北向入口网关的流量进行串通。

4、步骤四:定义目标规则

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

1)在控制平面区域,单击目标规则页签,然后单击新建。

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

i.选择相应的命名空间。

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

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

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

api Version:networking. istio. io/vlalpha3

kind:DestinationRule

metadata:

name:reviews

spec:

host:reviews

subsets:

-name:vi

labels:

version:v1

-name:v2

labels:

version:v2

trafficPolicy:

loadBalancer:

simple:LEAST_CONN

-name:v3

labels:

在目标规则页签可以看到新建的 reviews 目标规则。

3)接下来看一下东西向的流量管理。在前面已经定义好的入口网关,虚拟服务基础之上,为了支持东西向服务之间流量管理会在演示的 Demo 中会为 review 服务,他的两个版本是 virtual 2号,virtual 3号,会定义一个相应的路由规则。首先,在 ASM 控制平面托管侧会去为 review 服务,他的三个版本服务定义一个他的目标规则,叫 target rule。回到服务网格的控制台,在目标规则里面去创建一个命名空间 default,这里面会有 review 服务,review 服务会用来定义他的目标规则。

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

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

1)在控制平面区域,单击虚拟服务页签,然后单击新建。

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

i.选择相应的命名空间。

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

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

示例说明:将 Reviews 微服务的流量按照50%的权重分别指向 v2v3版本。

apiVersion:networking. istio. io/vlalpha3

kind:VirtualService

metadata:

name:reviews

spec:

hosts:

-reviews

http:

-route:

-destination:

host:reviews

subset:v2

weight:50

-destination:

host:reviews

subset:v3

weight:50

3)创建完毕之后,下一步去定义一个新的虚拟服务,在这个新的虚拟服务里面,能够做的一个事情是把 review 服务的流量,按照50%的权重分别指向 virtual 2号、virtual 3号。就是说他的流量不能分到 virtual 1这个版本,而是以平均指向 virtual 2号、virtual 3号,这个管理。回到 ASM 控制台,新建一个新的虚拟服务,这个里面会定义 virtual 2 virtual 3她们的权重分别是5050。确定之后,访问一下 productpage 页面 。这个时候,无论我们刷新多少次,页面要不就是访问 virtual 2,黑色的星星,或者是红色的,表明 virtual 2号、 virtual 3在切换。这时 virtual 1的版本不会被访问,这是因为我们定义了路由规则。回到实例在看一下,在这个服务里面会看到 Review 服务会被调用,productpage 会去调。

image.png

 

入口是指从前面的浏览器访问到首页,这是一个南北向的流量管理。在东西向与南北向的流量管理,可以通过虚拟服务、路由规则、入口网关、CRD 来进行管理,我们的 demo 就到这。

 

九、常见问题

1Q&A

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

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

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

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

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

Istio CRD 对应的资源只需要在控制平面保存就可以了,控制平面会将对应的规则转换成 sidecar 里的规则应用起来。

2、最后跟大家分享一下常见的一些问题,就是用户在使用 ASM 这个产品中,需要查的一些问题。举了三个最常见的问题,第一个三为何不能在 ASM 实例中部署应用?第二个是为什么不能在 ASM 管理的集群众部署 istio 的虚拟服务等 CRD 资源?第三个问题就是服务网格有自己的连接配置,如果不用这个连接配置,直接使用集群的连接配置是否也可操作 istio 资源呢?第三个其实跟第二个问题有些类似,这里面就跟大家强调一下 ASM 服务网格这个控制台提供的 Kubeconfig 配置是用于连接 ASM 实例,通过使用这个 Kubeconfig, 可以用 kubectl 命令来进行操作定义 istio 资源。在这个过程中可以观察到,要么在控制台上,要么通过 kubectlkubectl 连的是 ASM Kubeconfig,操作虚拟服务的定义。添加的ACK集群操作方式不变,如果是部署一个应用,像部署一个 deployment serviceK8s 这些资源仍然像 ACK 之前那样的方式去部署,这个操作方式没有任何变化。刚才讲到ASM 是一个托管的控制面,所以操作 istio 资源一定是在控制面这个范围,因此去定义 istio 这些虚拟服务、CRD 资源一定是在 ASM kubeconfig 这个环境下去操作。所以说在 ASM 中,它本身定义的是这些控制资源,这些控制面的资源,他不能够部署应用,部署应用仍需要在 ACK K8s 集群上面部署应用。如果想部署 istio 这些虚拟服务等 CRD 资源,必须在 ASM 实例里面去配置,所以说 istio CRD 对应的资源只需要在控制平面定义就好了。定义完之后控制平面组件,就是托管的这些组件,能够把这些定义好的路由规则转换成数据平面需要的格式下发到数据平面去。所以定义的 istio 资源只需要在 ASM 里面去定义,而不需要在数据面去定义了,所以这一点跟大家澄清一下,之前很多用户反馈一些问题。今天主题分享的内容就到此结束,非常感谢大家的收听,后面期待跟大家共同推进服务网格,谢谢大家。



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