阿里云服务网格ASM的流量标签及路由功能之(2): 基于流量标签的路由规则

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 通过流量标签CRD(TrafficLabel) 定义了用户自定义的流量标签, 例如asm-labels-test,其取值范围为test1、test2、test3等。为支持基于标签的路由能力, 还需要创建相应的目标规则DestinationRule和虚拟服务VirtualService,才能将流量根据标签路由到对应的工作负载。

通过流量标签CRD(TrafficLabel) 定义了用户自定义的流量标签, 例如asm-labels-test,其取值范围为test1、test2、test3等。为支持基于标签的路由能力, 还需要创建相应的目标规则DestinationRule和虚拟服务VirtualService,才能将流量根据标签路由到对应的工作负载。

定义目标规则和虚拟服务

  1. 保存以下内容为文件dr-productpage.yaml。使用以下内容将productpage分为test1 、test2 、test3等子集。

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
    name: dr-productpage
    spec:
    host: productpage
    subsets:
    - name: test1
     labels:
       version: test1
    - name: test2
     labels:
       version: test2
    - name: test3
     labels:
       version: test3
    ...
    - name: testn
     labels:
       version: testn
    - name: base
     labels:
       version: base
    
  2. 执行以下命令,创建目标规则DestinationRule。

kubectl apply -f dr-productpage.yaml
  1. 保存以下内容为文件vs-productpage.yaml。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs-productpage
spec:
  hosts:
    - productpage
  http:
  - match:
    - headers:
        asm-labels-test:
         exact: test1
    route:
    - destination:
        host: productpage
        subset: test1
  - match:
    - headers:
        asm-labels-test:
         exact: test2
    route:
    - destination:
        host: productpage
        subset: test2
  - match:
    - headers:
        asm-labels-test:
         exact: test3
    route:
    - destination:
        host: productpage
        subset: test3
  - route:
    - destination:
        host: productpage
        subset: base

其中, match.headers和route.destination.subset决定了将流量根据标签值路由到对应的工作负载,例如将带有名称为asm-labels-test且值为test1的标签的请求路由到test1子集下的工作负载。

具体参数解释如下:

参数 描述
match.headers.asm-labels-test 流量标签名称。
match.headers.exact 流量标签值。
route.destination.subset 路由目标对应的目标工作负载所在的子集(Subset)。
  1. 执行以下命令,创建虚拟服务VirtualService。
kubectl apply -f vs-productpage.yaml

简化虚拟服务的定义

若工作负载的版本有很多个的时候,虚拟服务VirtualService的配置将会变得比较复杂,您可以使用以下内容简化它的定义,并且对流量降级。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs-productpage
spec:
  hosts:
    - productpage
  http:
  - route:
    - destination:
        host: productpage
        subset: $asm-labels-test

扩展虚拟服务定义支持流量降级

此外, ASM企业版支持了对目标服务不可用时提供了流量降级的功能。其中fallback参数定义在route参数下, 用于定义当上述标签路由的目标服务不可用(包括目标服务未定义、或对应的Pod不存在等情况)时回退到的备用服务。
具体字段定义说明如下:

参数 描述
target.host 路由的目标服务名称
target.subset 路由的目标服务的子集。

示例定义如下:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs-productpage
spec:
  hosts:
    - productpage
  http:
  - route:
    - destination:
        host: productpage
        subset: $asm-labels-test
      fallback:
        target:
          host: productpage
          subset: base
相关文章
|
6天前
|
Kubernetes 大数据 调度
使用Kmesh作为阿里云服务网格ASM Sidecarless模式数据面
阿里云服务网格ASM支持Sidecar和Sidecarless两种模式,本文介绍了如何在阿里云ACK集群中部署Kmesh作为Sidecarless数据面并连接ASM控制面。
|
17天前
|
Kubernetes 调度 容器
使用Kmesh作为阿里云服务网格ASM Sidecarless模式数据面
阿里云服务网格ASM支持Sidecar和Sidecarless两种模式,其中Sidecarless模式如Istio Ambient、ACMG和Kmesh等,可减少延迟和资源消耗。Kmesh基于eBPF技术,通过内核空间拦截流量,结合Waypoint Proxy处理L7流量,实现高效的服务治理。本文介绍了如何在阿里云ACK集群中部署Kmesh并连接ASM控制面,包括安装步骤、检查服务状态和流量调度示例。
|
5月前
|
Cloud Native 容器 Kubernetes
基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道
本文简要讨论了使用流量泳道来实现全链路流量灰度管理的场景与方案,并回顾了阿里云服务网格 ASM 提供的严格与宽松两种模式的流量泳道、以及这两种模式各自的优势与挑战。接下来介绍了一种基于 OpenTelemetry 社区提出的 baggage 透传能力实现的无侵入式的宽松模式泳道,这种类型的流量泳道同时具有对业务代码侵入性低、同时保持宽松模式的灵活特性的特点。同时,我们还介绍了新的基于权重的流量引流策略,这种策略可以基于统一的流量匹配规则,将匹配到的流量以设定好的比例分发到不同的流量泳道。
73529 16
基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道
|
5月前
|
负载均衡 测试技术 网络安全
阿里云服务网格ASM多集群实践(一)多集群管理概述
服务网格多集群管理网络打通和部署模式的多种最佳实践
|
4月前
|
人工智能 自然语言处理 安全
使用阿里云服务网格高效管理LLM流量:(一)流量路由
ASM支持通过LLMProvider和LLMRoute资源管理大型语言模型流量。LLMProvider负责注册LLM服务,LLMRoute负责设定流量规则,应用可灵活切换模型,满足不同场景需求。
|
4月前
|
Cloud Native 测试技术 开发者
阿里云服务网格ASM多集群实践(二):高效按需的应用多环境部署与全链路灰度发布
介绍服务网格ASM提出的一种多集群部署下的多环境部署与全链路灰度发布解决方案。
|
5月前
|
人工智能 安全 Go
使用阿里云服务网格 ASM LLMProxy 插件保障大模型用户数据安全
本文介绍如何使用ASM LLMProxy动态为LLM请求添加API_KEY、使用模式匹配以及私有大模型判别请求敏感信息并根据判别结果拒绝请求等功能,帮助用户提升LLM场景下的安全水位。
|
6月前
|
Oracle 关系型数据库
oracle asm 磁盘显示offline
oracle asm 磁盘显示offline
323 2
|
24天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
6月前
|
存储 Oracle 关系型数据库
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例