在服务网格ASM中使用VirtualService的Delegate能力

简介: 阿里云服务网格(简称ASM)是一个统一管理微服务应用流量、兼容Istio的托管式平台。通过流量控制、网格观测以及服务间通信安全等功能,服务网格ASM可以全方位地简化您的服务治理,并为运行在异构计算基础设施上的服务提供统一的管理能力,适用于Kubernetes集群、Serverless Kubernetes集群、ECS虚拟机以及自建集群。

通过VirtualService定义路由规则时,如果您的服务包含很多微服务,或者您的服务包含很多路由规则,会存在维护一个庞大的VirtualService的问题。ASM引入了Delegate机制,将服务的路由规则进行拆分,降低路由规则变更带来的风险。本文以Bookinfo服务为例,演示如何使用多个VirtualService定义Bookinfo服务的路由规则。

前提条件

背景信息

在服务网格ASM中,通过VirtualService定义路由规则,控制流量路由到服务上的各种行为 。实际使用过程中,会遇到维护一个庞大的VirtualService的问题。服务的路由升级都要修改这个VirtualService规则,同时升级经常会导致服务路由更新冲突,路由配置冗余和耦合。任何的规则配置错误,都会影响数据平面集群下的服务,甚至影响所有的服务访问。

ASM通过扩展VirtualService引入了Delegate机制,使服务的路由规则无需耦合在一个VirtualService中。您可以将VirtualService拆分为主VirtualService和子VirtualService。主VirtualService定义了服务的总规则,子VirtualService定义了服务的详细路由规则。主VirtualService由管理员统一维护,子VirtualService由服务维护者进行维护,可以大大降低服务路由规则变更带来的风险,提高服务独立部署和升级的效率。

注意事项

  • ASM不支持对Delegate进行嵌套,只允许在主VirtualService设置Delegate参数,例如主VirtualService和子VirtualService都设置了Delegate参数,则该主VirtualService和子VirtualService将不会生效。
  • 子VirtualService的HTTPMatchRequest为主VirtualService的子集,否则会发生冲突,HTTPRoute将不会生效。
  • 当主VirtualService的Route和Redirect为空时,才可以指定Delegate。子VirtualService的Hosts必须为空。子VirtualService的路由规则会和主VirtualService的路由规则合并。

步骤一:设置网关规则

  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格详情页面左侧导航栏选择流量管理 > 网关规则,然后在右侧页面单击新建
  5. 新建面板选择命名空间,并将以下内容复制到文本框中,单击确定。本文以default命名空间为例。
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:
    - "*"
  1. 设置number80,使Bookinfo服务通过80端口接收传入或传出的HTTP连接。

步骤二:设置主虚拟服务

  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格详情页面左侧导航栏选择流量管理 > 虚拟服务,然后在右侧页面单击新建
  5. 新建面板选择命名空间,并将以下内容复制到文本框中,单击确定。本文以default命名空间为例。以下内容创建了vs-1和vs-2的delegate,其中vs-1要求请求中必须包含/log才能访问Bookinfo服务,vs-2要求请求中必须包含/才能访问Bookinfo服务。
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: bookinfo
  namespace: default
spec:
  gateways:
    - bookinfo-gateway
  hosts:
    - '*'
  http:
    - delegate:
        name: vs-1
        namespace: ns1
      match:
        - uri:
            prefix: /log
    - delegate:
        name: vs-2
        namespace: ns1
      match:
        - uri:
            prefix: /
  1. delegate下的参数解释:
  • name:delegate的名称。
  • namespace:delegate的命名空间。

步骤三:设置子虚拟服务

  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格详情页面左侧导航栏选择流量管理 > 虚拟服务,然后在右侧页面单击新建
  5. 新建面板选择命名空间,并将以下内容复制到文本框中,单击确定。本文以ns1命名空间为例。
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: vs-1
  namespace: ns1
spec:
  http:
    - match:
        - uri:
            exact: /login
        - uri:
            exact: /logout
      route:
        - destination:
            host: productpage.default.svc.cluster.local
            port:
              number: 9080
  • metadata:与主VirtualService的delegate参数保持一致,用于绑定delegate参数。本文与vs-1的delegate参数一致,表示绑定vs-1的delegate参数。
  • match:设置请求的过滤条件。本文设置uriexact: /loginexact: /logout,表示可以登录和登出Bookinfo服务。
  1. 重复执行上述步骤,在新建面板选择命名空间,并将以下内容复制到文本框中,单击确定
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: vs-2
  namespace: ns1
spec:
  http:
    - match:
        - uri:
            exact: /productpage
        - uri:
            prefix: /static
        - uri:
            prefix: /api/v1/products
      route:
        - destination:
            host: productpage.default.svc.cluster.local
            port:
              number: 9080
  • metadata:与主VirtualService的delegate参数保持一致,用于绑定delegate参数。本文与vs-2的delegate参数一致,表示绑定vs-2的delegate
  • match:设置请求的过滤条件。本文设置请求中必须包含/productpage/static/api/v1/products参数。

步骤四:获取ASM网关地址

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择网络 > 服务
  5. 服务页面顶部设置命名空间为istio-system,查看istio-ingressgateway外部端点列下端口为80的IP地址。

结果验证

在浏览器中输入http://<ASM网关地址>/productpage,显示以下页面。说明请求中包含/productpage参数访问Bookinfo服务成功,即vs-2的VirtualService设置成功。

image.png

单击右上角的Sign in,在弹出对话框输入账号密码,登录Bookinfo服务。显示如下页面,说明登录Bookinfo服务成功,表示vs-1的VirtualService设置成功。

image.png

目录
相关文章
|
1月前
|
Kubernetes 大数据 调度
使用Kmesh作为阿里云服务网格ASM Sidecarless模式数据面
阿里云服务网格ASM支持Sidecar和Sidecarless两种模式,本文介绍了如何在阿里云ACK集群中部署Kmesh作为Sidecarless数据面并连接ASM控制面。
|
负载均衡 网络协议 测试技术
使用eBPF加速阿里云服务网格ASM
服务网格下的Sidecar 代理业务服务的收发请求,并提供业务层面的流量控制(路由)、负载均衡等功能,会引入一定的Latency 延迟。 通过eBPF 技术(部署sidecar 加速组件)将同节点下两个进程间的TCP 报文进行socket 短路可以提升一定的性能,HTTP 场景下QPS 可提升15% 左右, 有效地降低业务请求的Latency 。
987 0
使用eBPF加速阿里云服务网格ASM
阿里云服务网格 ASM 2023 年 3 月产品动态
阿里云服务网格 ASM 2023 年 3 月产品动态
阿里云服务网格 ASM 2023 年 3 月产品动态
|
人工智能 自然语言处理 运维
站酷基于服务网格 ASM 的生产实践
随着站酷业务服务的持续改造,将持续基于阿里云服务网格 ASM 产品,获得更加丰富便捷的企业级特性,助力降本增效。
188 2
站酷基于服务网格 ASM 的生产实践
阿里云服务网格 ASM 2023 年 5 月产品动态
阿里云服务网格 ASM 2023 年 5 月产品动态
阿里云服务网格 ASM 2023 年 2 月产品动态
阿里云服务网格 ASM 2023 年 2 月产品动态
阿里云服务网格 ASM 2023 年 2 月产品动态
阿里云服务网格 ASM 2023 年 1 月产品动态
阿里云服务网格 ASM 2023 年 1 月产品动态来啦
阿里云服务网格 ASM 2023 年 1 月产品动态
阿里云服务网格 ASM 2023 年 4 月产品动态
阿里云服务网格 ASM 2023 年 4 月产品动态
服务网格 ASM 2022年12月产品动态
服务网格 ASM 2022年12月产品动态来啦
服务网格 ASM 2022年12月产品动态
|
人工智能 自然语言处理 运维
站酷基于服务网格ASM的生产实践
随着站酷业务服务的持续改造,将持续基于阿里云服务网格 ASM 产品,获得更加丰富便捷的企业级特性,助力降本增效。
站酷基于服务网格ASM的生产实践