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

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

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

目录
相关文章
|
6天前
|
运维 Serverless 应用服务中间件
Serverless 应用引擎产品使用之在阿里云Serverless中函数计算FC nginx 部署上去之后放置静态页面如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
35 0
|
6天前
|
弹性计算 运维 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,使数据库和阿里云函数计算位于同一个内网中如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
18 0
Serverless 应用引擎产品使用之在阿里函数计算中,使数据库和阿里云函数计算位于同一个内网中如何解决
|
6天前
|
运维 监控 Serverless
Serverless 应用引擎产品使用之在使用阿里云函数计算部署网站时,网站打开不稳定如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
22 0
|
6天前
|
运维 Serverless API
Serverless 应用引擎产品使用之在阿里云函数计算中通过调用函数如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
130 10
|
6天前
|
运维 文字识别 Serverless
Serverless 应用引擎产品使用之在阿里云函数计算中,需要处理的文件大于100MB如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
124 5
|
6天前
|
运维 Serverless API
Serverless 应用引擎产品使用之在阿里云函数计算中,容器运行过程中的最大内存使用量获取如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
28 2
|
6天前
|
弹性计算 运维 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,使用阿里云API或SDK从函数计算调用ECS实例的服务如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
30 4
|
6天前
|
弹性计算 JSON 运维
Serverless 应用引擎产品使用之阿里云serverless的s deploy,本地的代码编译后的镜像无法推送上去如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
20 0
|
6天前
|
运维 Serverless PHP
Serverless 应用引擎产品使用之在阿里云Serverless中耗时操作执行如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
13 0
|
7天前
|
运维 Serverless API
Serverless 应用引擎产品使用之在阿里云Serverless中将已有的域名绑定到FC函数上如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
20 1