阿里云服务网格多集群应用统一流量管理

简介: 服务网格多集群应用统一流量管理示例

Istio 的流量路由规则可以让您很容易的控制服务之间的流量和 API 调用。它简化了服务属性的配置,通过配置可以能轻松的实现A/B 测试、金丝雀发布、基于流量百分比切分的概率发布等。它还提供了开箱即用的故障恢复特性,有助于增强应用的健壮性,从而更好地应对被依赖的服务或网络发生故障的情况。
本次Demo着重展示了应用流量管理中按百分比切分流量到服务不同版本的场景。创建的istio自定义资源包括虚拟服务,目标规则,网关。其中虚拟服务,目标规则是流量路由功能的关键。虚拟服务(virtual service)定义了一系列指定服务的流量路由规则,目标规则(destination rule)定义了在路由发生后应用于服务的流量策略。

Demo应用使用的是一个10个微服务组成的商城应用,架构如图所示
demo-1.jpg
其中product-catalog服务用来展示商品的类目,我们有三个版本的catalog服务,分别展示不同的商品类目。

准备资源

  • 创建同vpc 两个托管版k8s集群 ,可访问阿里云容器服务控制台进行创建。
  • 设置k8s集群安全组规则,允许两个集群可相互访问。安全组规则可以在ecs控制台进行设置。

demo-2.jpg

创建服务网格实例

访问服务网格控制台,创建新网格,填写相关内容。专有网络选择使用跟已经创建好的k8s集群相同的vpc。
demo-3.jpg

添加集群,部署入口网关服务

mesh实例创建成功后,进入mesh详情页。在数据平面中选择集群,点击添加。选择创建好的两个k8s集群进行添加。成功后如图所示。
demo-4.jpg
在入口网关服务Tab中,点击部署,将入口网关服务部署到数据平面的一个集群中。
demo-5.jpg

部署demo应用到k8s集群

在数据面的两个k8s集群中创建demo命名空间,添加label,istio-injection:enabled。
在demo命名空间下部署demo应用(应用的yaml文件在kubernetes-manifests文件夹中)

kubectl apply --namespace=demo -f ./kubernetes-manifests/

部署成功后如图所示
demo-6.jpg

添加网关和虚拟服务

新建命名空间
服务网格控制台中实例的控制台平面里新建demo命名空间
新建网关
服务网格控制台中实例的控制台平面里,切换至服务网关,新建frontend-gateway。

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

新建虚拟服务
服务网格控制台中实例的控制台平面里,切换至虚拟服务,新建frontend-ingress。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: frontend-ingress
  namespace: demo
spec:
  gateways:
    - frontend-gateway
  hosts:
    - '*'
  http:
    - route:
        - destination:
            host: frontend
            port:
              number: 80

上述配置完成后,访问入口服务网关地址(负载均衡地址),就可以访问到demo应用。
demo-5.jpg
demo-7.jpg

部署productcatalogservice不同版本

在已经部署应用的集群中,部署productcatalogservice-v2

apiVersion: apps/v1
kind: Deployment
metadata:
  name: productcatalogservice-v2
  labels:
    app: productcatalogservice
    version: v2
spec:
  selector:
    matchLabels:
      app: productcatalogservice
      version: v2
  template:
    metadata:
      labels:
        app: productcatalogservice
        version: v2
    spec:
      terminationGracePeriodSeconds: 5
      containers:
      - name: server
        image: registry.cn-hangzhou.aliyuncs.com/ack/istio-demo-productcatalogservice:0.1
        imagePullPolicy: Always
        ports:
        - containerPort: 3550
        env:
        - name: PORT
          value: "3550"
        - name: CATALOG_VERSION
          value: "v2"  
        readinessProbe:
          exec:
            command: ["/bin/grpc_health_probe", "-addr=:3550"]
        livenessProbe:
          exec:
            command: ["/bin/grpc_health_probe", "-addr=:3550"]
        resources:
          requests:
            cpu: 100m
            memory: 64Mi
          limits:
            cpu: 200m
            memory: 128Mi

在服务网格管理的另一个集群中,部署productcatalogservice-v3

apiVersion: apps/v1
kind: Deployment
metadata:
  name: productcatalogservice-v3
  labels:
    app: productcatalogservice
    version: v3
spec:
  selector:
    matchLabels:
      app: productcatalogservice
      version: v3
  template:
    metadata:
      labels:
        app: productcatalogservice
        version: v3
    spec:
      terminationGracePeriodSeconds: 5
      containers:
      - name: server
        image: registry.cn-hangzhou.aliyuncs.com/ack/istio-demo-productcatalogservice:0.1
        imagePullPolicy: Always
        ports:
        - containerPort: 3550
        env:
        - name: PORT
          value: "3550"
        - name: CATALOG_VERSION
          value: "v3"    
        readinessProbe:
          exec:
            command: ["/bin/grpc_health_probe", "-addr=:3550"]
        livenessProbe:
          exec:
            command: ["/bin/grpc_health_probe", "-addr=:3550"]
        resources:
          requests:
            cpu: 100m
            memory: 64Mi
          limits:
            cpu: 200m
            memory: 128Mi
---    
apiVersion: v1
kind: Service
metadata:
  name: productcatalogservice
  labels:
    app: productcatalogservice
spec:
  type: ClusterIP
  selector:
    app: productcatalogservice
  ports:
  - name: grpc
    port: 3550
    targetPort: 3550

添加虚拟服务和目标规则,控制不同版本访问流量百分比

服务网格控制台中实例的控制台平面里,切换至目标规则,新建productcatalogservice。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: productcatalogservice
  namespace: demo
spec:
  host: productcatalogservice
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2
      name: v2
    - labels:
        version: v3
      name: v3

服务网格控制台中实例的控制台平面里,切换至虚拟服务,新建productcatalogservice。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: productcatalogservice
  namespace: demo
spec:
  hosts:
    - productcatalogservice
  http:
    - route:
        - destination:
            host: productcatalogservice
            subset: v1
          weight: 40
        - destination:
            host: productcatalogservice
            subset: v2
          weight: 30
        - destination:
            host: productcatalogservice
            subset: v3
          weight: 30

再次访问入口服务网关地址,刷新页面,可以看到不同版本的商品类目,访问概率如上述weight配置。
demo-8.jpg

目录
相关文章
|
24天前
|
Kubernetes 测试技术 微服务
结合阿里云ASM泳道与Kruise Rollout进行全链路灰度发布
本文将介绍如何结合阿里云ASM泳道与Kruise Rollout进行低成本,自动化的全链路灰度发布。
|
1月前
|
Kubernetes 大数据 调度
使用Kmesh作为阿里云服务网格ASM Sidecarless模式数据面
阿里云服务网格ASM支持Sidecar和Sidecarless两种模式,本文介绍了如何在阿里云ACK集群中部署Kmesh作为Sidecarless数据面并连接ASM控制面。
|
1月前
|
Kubernetes Cloud Native JavaScript
为使用WebSocket构建的双向通信应用带来基于服务网格的全链路灰度
介绍如何使用为基于WebSocket的云原生应用构建全链路灰度方案。
|
1月前
|
Kubernetes 调度 容器
使用Kmesh作为阿里云服务网格ASM Sidecarless模式数据面
阿里云服务网格ASM支持Sidecar和Sidecarless两种模式,其中Sidecarless模式如Istio Ambient、ACMG和Kmesh等,可减少延迟和资源消耗。Kmesh基于eBPF技术,通过内核空间拦截流量,结合Waypoint Proxy处理L7流量,实现高效的服务治理。本文介绍了如何在阿里云ACK集群中部署Kmesh并连接ASM控制面,包括安装步骤、检查服务状态和流量调度示例。
|
4月前
|
Prometheus Kubernetes 监控
打造无缝灾备新境界:运用服务网格ASM,将集群外服务无缝融入集群内服务,铸就高可用性坚盾!
【8月更文挑战第2天】随着微服务架构的应用,服务的高可用性变得至关重要。服务网格如阿里巴巴的ASM提供流量管理、服务发现等功能,支撑高可靠服务系统。本文介绍如何利用ASM实现集群外服务作为集群内服务的灾备方案,确保服务连续性。先决条件包括已部署ASM的Kubernetes集群环境及内外部的关键服务副本。通过定义服务条目、配置虚拟服务和目的地规则,可实现自动或手动故障转移。借助ASM的流量管理能力,确保服务高可用性和业务连续性。
60 10
|
4月前
|
Perl
如何利用服务网格ASM使用集群外服务做集群内服务的灾备
本文档指导您如何配置阿里云服务网格(ASM)以实现在多集群环境下,服务间的优先访问及故障转移策略。
127 2
|
5月前
|
Kubernetes Dubbo Cloud Native
如何将Dubbo应用接入服务网格
介绍使用传统Dubbo微服务体系的客户要如何将自己的服务接入到服务网格这一新一代云原生基础设施。
|
5月前
|
人工智能 自然语言处理 安全
使用阿里云服务网格高效管理LLM流量:(一)流量路由
ASM支持通过LLMProvider和LLMRoute资源管理大型语言模型流量。LLMProvider负责注册LLM服务,LLMRoute负责设定流量规则,应用可灵活切换模型,满足不同场景需求。
|
5月前
|
Cloud Native 测试技术 开发者
阿里云服务网格ASM多集群实践(二):高效按需的应用多环境部署与全链路灰度发布
介绍服务网格ASM提出的一种多集群部署下的多环境部署与全链路灰度发布解决方案。
|
7月前
|
Oracle 关系型数据库
oracle asm 磁盘显示offline
oracle asm 磁盘显示offline
356 2