为泳道服务集成其他虚拟服务能力

本文涉及的产品
轻量应用服务器 2vCPU 4GiB,适用于搭建Web应用/小程序
轻量应用服务器 2vCPU 4GiB,适用于网站搭建
无影云电脑个人版,1个月黄金款+200核时
简介: ASM流量泳道基于服务网格能力,实现全链路流量隔离,适用于灰度发布场景。通过编辑ASMSwimLaneGroup CR,可为服务添加超时、故障注入等功能,保障泳道流量规则不受影响。

简介

ASM流量泳道依托服务网格的虚拟服务、目标规则,以及ASM提供的TrafficLabel、ASMHeaderPropagation等能力来提供全链路上下文的流量隔离,常用于全链路灰度场景。

在使用流量泳道时,流量泳道会为您自动生成虚拟服务,这些虚拟服务属于系统管理、禁止进行人为变更,以防止泳道中的流量走向出现问题。当您想为泳道创建的虚拟服务加入其他的能力(如超时、重试、故障注入等)时,可以通过编辑ASMSwimLaneGroup CR的方式完成。

实践步骤

  1. 参考文档 搭建宽松模式泳道的示例环境。
  2. 使用kubectl编辑asmswimlanegroup CR,为指定的服务加入路由以外的虚拟服务能力。本文中,以为mockc服务加入故障注入能力为例:
apiVersion: istio.alibabacloud.com/v1
kind: ASMSwimLaneGroup
metadata:
  finalizers:
  - asmswimlanegroup-operator.finializer.alibabacloud.com
  name: test
spec:
  ingress:
    gateway:
      name: ingressgateway
      namespace: istio-system
      type: ASM
    ingressRouting:
      weightedRoutingRule: {}
  isPermissive: true
  permissiveModeConfiguration:
    fallbackTarget: s1
    routeHeader: version
    traceHeader: my-trace-id
  services:
  - cluster:
      id: xxx
      name: xxx
    name: mocka
    namespace: default
  - cluster:
      id: xxx
      name: xxx
    name: mockb
    namespace: default
  - cluster:
      id: xxx
      name: xxx
    name: mockc
    namespace: default
    httpRoutePatch: # 添加httpRoutePatch字段
      fault:
        abort:
          httpStatus: 500
          percentage:
            value: 50

其中,httpRoutePatch中可以指定虚拟服务的HTTPRoute中的绝大部分字段,以实现包括超时、故障注入、重写、重试等能力;但为防止破坏泳道流量规则,您无法指定match、name、route、delegate字段。

  1. 查看相关虚拟服务已修改

使用kubectl获取泳道组为您自动生成的针对mockc的虚拟服务

kubectl get virtualservice -n istio-system trafficlabel-vs-test-default-mockc -oyaml

预期输出

apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  labels:
    asm-system: 'true'
    provider: asm
    swimlane-group: test
  name: trafficlabel-vs-test-default-mockc
  namespace: istio-system
spec:
  hosts:
    - mockc.default.svc.cluster.local
  http:
    - fault:
        abort:
          httpStatus: 500
          percentage:
            value: 50
      name: default
      route:
        - destination:
            host: mockc.default.svc.cluster.local
            subset: $asm-label
          fallback:
            target:
              host: mockc.default.svc.cluster.local
              subset: s1

可以看到虚拟服务中已经加入了故障注入相关的字段。

  1. 确认虚拟服务能力生效

使用文档 中给出的验证方式,重新验证服务访问:

for i in {1..100};  do curl   -H 'version: s2' -H'my-trace-id: x000'$i http://$ASM_GATEWAY_IP:8000/mock ;  echo ''; sleep 1; done;

预期输出

-> mocka(version: v2, ip: 10.1.0.239)-> mockb(version: v1, ip: 10.1.0.160)fault filter abort
-> mocka(version: v2, ip: 10.1.0.239)-> mockb(version: v1, ip: 10.1.0.160)fault filter abort
-> mocka(version: v2, ip: 10.1.0.239)-> mockb(version: v1, ip: 10.1.0.160)-> mockc(version: v2, ip: 10.1.0.237)
-> mocka(version: v2, ip: 10.1.0.239)-> mockb(version: v1, ip: 10.1.0.160)-> mockc(version: v2, ip: 10.1.0.237)
-> mocka(version: v2, ip: 10.1.0.239)-> mockb(version: v1, ip: 10.1.0.160)-> mockc(version: v2, ip: 10.1.0.237)
-> mocka(version: v2, ip: 10.1.0.239)-> mockb(version: v1, ip: 10.1.0.160)fault filter abort
-> mocka(version: v2, ip: 10.1.0.239)-> mockb(version: v1, ip: 10.1.0.160)-> mockc(version: v2, ip: 10.1.0.237)
-> mocka(version: v2, ip: 10.1.0.239)-> mockb(version: v1, ip: 10.1.0.160)-> mockc(version: v2, ip: 10.1.0.237)
-> mocka(version: v2, ip: 10.1.0.239)-> mockb(version: v1, ip: 10.1.0.160)-> mockc(version: v2, ip: 10.1.0.237)
-> mocka(version: v2, ip: 10.1.0.239)-> mockb(version: v1, ip: 10.1.0.160)-> mockc(version: v2, ip: 10.1.0.237)
-> mocka(version: v2, ip: 10.1.0.239)-> mockb(version: v1, ip: 10.1.0.160)fault filter abort
-> mocka(version: v2, ip: 10.1.0.239)-> mockb(version: v1, ip: 10.1.0.160)fault filter abort
-> mocka(version: v2, ip: 10.1.0.239)-> mockb(version: v1, ip: 10.1.0.160)-> mockc(version: v2, ip: 10.1.0.237)
-> mocka(version: v2, ip: 10.1.0.239)-> mockb(version: v1, ip: 10.1.0.160)fault filter abort

可以看到,针对mockc服务的故障注入已经在泳道环境下生效。

相关文章
|
7月前
|
运维 Kubernetes 网络协议
基于虚拟服务配置的渐进式迁移实践:Istio集群至ASM集群的平滑切换
本文介绍了从Istio+k8s环境迁移到阿里云ASM+ACK环境的渐进式方法,通过配置虚拟服务和入口服务实现新老集群间的服务调用与流量转发,确保业务连续性与平滑迁移
766 132
|
消息中间件 Java Kafka
RocketMQ快速入门
RocketMQ快速入门
7662 0
RocketMQ快速入门
|
2月前
|
人工智能 缓存 Kubernetes
ACK GIE配置建议
Gateway with Inference Extension是基于Kubernetes社区Gateway API及其扩展规范实现的增强型组件,支持四层/七层路由服务,并面向生成式AI推理场景提供负载均衡优化、服务管理简化等能力,适用于AI推理服务的高可用部署与性能优化。在不同的场景使用ACK Gateway with Inference Extension时,可能需要根据业务需求和高可用需要对网关和推理扩展进行不同的配置调整。本文主要介绍在实际业务场景中针对ACK GIE的配置建议,以获得更好的使用效果。
128 23
|
2月前
|
Kubernetes NoSQL Redis
使用ASM全局限流实现源IP分别限流
本文介绍了如何在ASM中实现基于源IP的全局限流,防止恶意请求。内容包括前提条件、准备工作、部署步骤及验证方法,帮助用户通过配置限流策略保障业务入口的稳定性与安全性。
|
28天前
使用 ASM 对集群外部服务进行熔断
熔断是一种流量管理策略,用于系统故障或超载时保护系统。ASM 支持集群内外服务的熔断配置,通过 sidecar 自动完成,无需修改应用。本文介绍如何部署应用并配置熔断规则,验证熔断效果。
48 0
|
2月前
|
存储 监控 Shell
SkyWalking微服务监控部署与优化全攻略
综上所述,虽然SkyWalking的初始部署流程相对复杂,但通过一步步的准备和配置,可以充分发挥其作为可观测平台的强大功能,实现对微服务架构的高效监控和治理。尽管未亲临,心已向往。将一件事做到极致,便是天分的展现。
|
7月前
|
人工智能 移动开发 机器人
智能体 | 快速构建专属英语口语陪练助手,这下雅思再也不用愁了
智能体是以云为基础、AI为核心的智能系统,不同于通义千问等AI工具,用户可自建专注于特定领域的智能体,如英语口语陪练助手。通过阿里云百炼平台,开通服务、创建智能体、选择模型、设计Prompt并测试优化,最终发布到多渠道。用户能随时随地进行英语口语练习,提升语言能力。
|
10月前
|
运维 测试技术 数据库
微服务架构的缺点有哪些?
微服务架构的缺点有哪些?
453 33
|
11月前
|
存储 Kubernetes 开发工具
k8s学习--ConfigMap详细解释与应用
ConfigMap 是 Kubernetes 中用于管理非机密配置数据的 API 对象,可将应用配置与容器分离,便于动态管理和更新。它支持四种创建方式:命令行参数、多个文件、文件内的键值对以及 YAML 资源清单文件。ConfigMap 可通过环境变量或挂载为卷的方式传递给 Pod,并且当通过卷挂载时支持热更新。这使得配置管理更加灵活和安全,无需重新部署应用即可更新配置。
475 0