ASM workshop-基于服务网格ASM的流量治理实践部分

简介:      阿里云服务网格(Alibaba Cloud Service Mesh,简称ASM)提供了一个全托管式的服务网格平台,兼容于社区Istio开源服务网格,用于简化服务的治理,包括服务调用之间的流量路由与拆分管理、服务间通信的认证安全以及网格可观测性能力,从而极大地减轻开发与运维的工作负担。本文是关于服务网格ASM流量治理相关的workshop。

阿里云服务网格(Alibaba Cloud Service Mesh,简称ASM)提供了一个全托管式的服务网格平台,兼容于社区Istio开源服务网格,用于简化服务的治理,包括服务调用之间的流量路由与拆分管理、服务间通信的认证安全以及网格可观测性能力,从而极大地减轻开发与运维的工作负担。本文是关于服务网格ASM流量治理相关的workshop。

前提条件

  • 创建至少一个ASM实例,并添加至少一个ACK集群到该实例中。详情请参见创建ASM实例添加集群到ASM实例
  • 在ACK控制台获取ACK的kubeconfig 和ASM控制台获取ASM的kubeconfig

环境准备参考:

第一步:在ASM控制台,创建网格实例:

image.png

第二步:添加kubernetes集群到服务网格ASM

image.png

实践内容

本文用到的workshop用到的相关资源

1.部署应用并注入Sidecar代理

(1) 在ASM控制台开启Sidecar的自动注入或者

使用kubectl --kubeconfig asm_kubeconfig label default istio-injection = enabled

image.png

(2) 部署应用

kubectl --kubeconfig ack_kubeconfig apply -f app.yaml

今天演示应用的部署架构,包括产品服务、增值服务(包括三个版本)、产品详情、风格转换服务四个多语言开发的应用,包括一个Ingress 入口网关和一个外部服务,并且通过服务网格ASM注入了Sidecar代理。

image.png

应用增值服务V1

image.png

关于增值服务V2

image.png

关于增值服务V3

image.png

接下来的操作都可以使用ASM控制台或者Kubectl完成。

2.部署入口网关访问应用

使用控制台一键部署网关访问我们的应用。

部署网关

image.png

新增网关规则

使用ASM控制台或者Kubectl

kubectl --kubeconfig asm_kubeconfig apply -f gateway.yaml


apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: demo-default-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"

新增虚拟服务

使用ASM控制台或者Kubectl

kubectl --kubeconfig asm_kubeconfig apply -f gateway_virtualservice.yaml

image.png

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: demo
spec:
  hosts:
  - "*"
  gateways:
  - demo-default-gateway
  http:
  - match:
    - uri:
        exact: /productpage
    - uri:
        exact: /login
    - uri:
        exact: /logout
    - uri:
        prefix: /static    
    - uri:
        prefix: /api/v1/products
    route:
    - destination:
        host: productpage.default.svc.cluster.local
        port:
          number: 9080

3.基于ASM完成蓝绿和灰度发布

kubectl --kubeconfig asm_kubeconfig apply -f addedvalues_DestinationRule.yaml

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: addedvalues
spec:
  host: addedvalues
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v3
    labels:
      version: v3

50%流量到addedvaluesV1,50%流量到addedvaluesV2

kubectl --kubeconfig asm_kubeconfig apply -f addedvalues_VirtualService_v1_50_v2_50.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: addedvalues
spec:
  hosts:
  - addedvalues
  http:
  - route:
    - destination: 
        host: addedvalues
        subset: v1
      weight: 50
    - destination:
        host: addedvalues
        subset: v2
      weight: 50

100%流量到addedvaluesV2

kubectl --kubeconfig asm_kubeconfig apply -f addedvalues_VirtualService_v1_0_v2_100.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: addedvalues
spec:
  hosts:
  - addedvalues
  http:
  - route:
    - destination: 
        host: addedvalues
        subset: v1
      weight: 0
    - destination:
        host: addedvalues
        subset: v2
      weight: 100

4.支持多种流量治理能力以故障注入为例

故障注入使得调用ddedvalues服务时返回400

kubectl --kubeconfig asm_kubeconfig apply -f addedvalues_VirtualService_v1_v2_fault.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: addedvalues
spec:
  hosts:
  - addedvalues
  http:
  - fault:
        abort:
          httpStatus: 400
          percentage:
            value: 100
    route:
        - destination:
            host: addedvalues
            subset: v1
          weight: 50
        - destination:
            host: addedvalues
            subset: v2
          weight: 50

将yunqi开头的用户流量切到addedvaluesV3

kubectl --kubeconfig asm_kubeconfig apply -f addedvalues_VirtualService_v3.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: addedvalues
spec:
  hosts:
    - addedvalues
  http:
    - match:
        - headers:
            end-user:
              prefix: yunqi
      route:
        - destination:
            host: addedvalues
            subset: v3
          weight: 100
    - fault:
        abort:
          httpStatus: 400
          percentage:
            value: 100
      route:
        - destination:
            host: addedvalues
            subset: v1
          weight: 50
        - destination:
            host: addedvalues
            subset: v2
          weight: 50

4. 服务网格ASM可观测性开箱即用

  在服务网格SM控制台功能设置页面一键开启可观测性能力,具体可以参考ASM对应的文档。

image.png

Mesh访问日志详细记录  

image.png

Mesh访问日志监控中心

image.png

网格Prometheus监控指标

image.png

调用拓扑和调用链路

image.png

image.png

5. 服务网格ASM支持零信任安全

(1)控制服务访问,只允许default下应用查询addedvalues

各种零信任安全能力也支持kubectl或者表单操作

kubectl --kubeconfig asm_kubeconfig apply -f addedvalues_AuthorizationPolicy_allow.yaml

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-default
  namespace: default
spec:
 selector:
    matchLabels:
      app: addedvalues
  action: ALLOW
  rules:
    - from:
        - source:
            namespaces:
              - default
      to:
        - operation:
            methods:
              - GET

image.png

(2)在Sidecar管理控制访问外部服务

可以在服务网格ASM中设置对外部服务的访问策略OutboundTrafficPolicy,用于配置对外部服务(即未在Istio的内部服务注册表中定义的服务)的访问策略。

  • 如果该选项设置为ALLOW_ANY,则Sidecar代理允许对未知服务的透传通过。优点是直接透传对外部服务的访问,缺点是失去了对外部服务流量的网格层面的监视和控制。
  • 如果该选项设置为REGISTRY_ONLY,则Sidecar代理将阻止任何没有在网格中定义了HTTP服务或服务条目的主机

image.png

设置REGISTRY_ONLY后由于V3依赖了外部服务,所以V3无法访问,加入下面的ServiceEntry后访问正常。

kubectl --kubeconfig asm_kubeconfig apply -f ServiceEntry.yaml

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-svc-styletransfer
spec:
  hosts:
  - apply.mcard.boc.cn
  location: MESH_EXTERNAL
  ports:
  - number: 443
    name: https
    protocol: HTTPS
  resolution: NONE

(3)还有很多其他功能,大家可以参考服务网格ASM的官方文章,包括控制入口网关的访问,OPA策略等等。

6.服务网格ASM生命周期管理

阿里云服务网格(Alibaba Cloud Service Mesh,简称ASM)提供了一个全托管式的服务网格平台,兼容于社区Istio开源服务网格,标准统一,并且可以实现控制平面的平滑升级和数据面的热升级能力。

控制平面一键平滑升级

image.png

数据平面升级

数据平面可以选择应用发布滚动升级到当前控制面对应的数据面最新版本。

image.png

同时服务网格ASM也支持数据平面的热升级能力,也在10月份在ASM控制台上推出。

image.png

欢迎使用服务网格ASM和加入服务网格ASM用户交流群,有什么问题欢迎沟通交流。

image.png

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