服务网格GRPC协议多种编程语言实践-4.GRPC协议示例的网格实践

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 上一篇容器实践的结果是,4个client容器可以访问到服务`grpc-server-svc.grpc-best.svc.cluster.local`,且该服务按负载均衡路由到4个版本的server容器。本篇将以此为基础,进行2个流量管理的实践。

上一篇容器实践的结果是,4个client容器可以访问到服务grpc-server-svc.grpc-best.svc.cluster.local,且该服务按负载均衡路由到4个版本的server容器。本篇将以此为基础,进行2个流量管理的实践。

1 按版本切流

按版本切流是使用ServiceMesh的常见场景。这里以100%流量路由到Java版本服务作为示例(拓扑如下图所示),演示基于GRPC服务的按版本流量管理。

grpc_mesh_v1_100.png

DestinationRule

首先我们进入服务网格(ASM)实例,定义GRPC服务的DestinationRule,将如下内容复制到页面。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  namespace: grpc-best
  name: grpc-server-dr
spec:
  host: grpc-server-svc
  subsets:
    - name: v1
      labels:
        version: v1
    - name: v2
      labels:
        version: v2
    - name: v3
      labels:
        version: v3
    - name: v4
      labels:
        version: v4

保存后结果示意如下。

image-20200928174411300

VirtualService

接下来我们定义一个VirtualService实现100%流量路由到Java版本服务。新建VirtualService,将如下内容复制保存。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  namespace: grpc-best
  name: grpc-server-vs
spec:
  hosts:
    - "*"
  gateways:
    - grpc-gateway
  http:
    - match:
        - port: 9996
      route:
        - destination:
            host: grpc-server-svc
            subset: v1
          weight: 100

验证

执行如下脚本进行验证。

for i in {1..100}; do
  docker exec -e GRPC_SERVER="${INGRESS_IP}" -it "$client_node_container" node mesh_client.js >> mesh_result
done
sort mesh_result | grep -v "^[[:space:]]*$"| uniq -c | sort -nrk1

预期结果如下。

 100 TalkOneAnswerMore:JAVA
 100 TalkMoreAnswerOne:JAVA
 100 TalkBidirectional:JAVA
 100 Talk:JAVA

2 按GRPC API切流

相比按版本进行流量管理,按GRPC API进行切流是更细粒度的切流方式。我们有4个GRPC的API、4个版本的服务,这里演示一种极端的情况,每一种API路由到指定的一个版本的服务上(拓扑如下图所示)。

grpc_mesh_api_100.png

VirtualService

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  namespace: grpc-best
  name: grpc-server-vs
spec:
  hosts:
    - "*"
  gateways:
    - grpc-gateway
  http:
    - match:
        - port: 9996
        - uri:
            exact: /org.feuyeux.grpc.LandingService/talk
      route:
        - destination:
            host: grpc-server-svc
            subset: v1
          weight: 100
    - match:
        - port: 9996
        - uri:
            exact: /org.feuyeux.grpc.LandingService/talkOneAnswerMore
      route:
        - destination:
            host: grpc-server-svc
            subset: v2
          weight: 100
    - match:
        - port: 9996
        - uri:
            exact: /org.feuyeux.grpc.LandingService/talkMoreAnswerOne
      route:
        - destination:
            host: grpc-server-svc
            subset: v3
          weight: 100
    - match:
        - port: 9996
        - uri:
            exact: /org.feuyeux.grpc.LandingService/talkBidirectional
      route:
        - destination:
            host: grpc-server-svc
            subset: v4
          weight: 100

验证

执行如下脚本进行验证。

for i in {1..100}; do
  docker exec -e GRPC_SERVER="${INGRESS_IP}" -it "$client_node_container" node mesh_client.js >> mesh_result
done
sort mesh_result | grep -v "^[[:space:]]*$"| uniq -c | sort -nrk1

预期结果如下。

 100 TalkOneAnswerMore:GOLANG
 100 TalkMoreAnswerOne:NODEJS
 100 TalkBidirectional:PYTHON
 100 Talk:JAVA
目录
相关文章
|
5月前
|
监控 安全 Cloud Native
构建无缝的服务网格体验:分享在生产环境中构建和管理服务网格的最佳实践
构建无缝的服务网格体验:分享在生产环境中构建和管理服务网格的最佳实践
24 0
|
7月前
|
运维 Kubernetes Cloud Native
服务网格实施周期缩短 50%,丽迅物流基于阿里云 ACK 和 ASM 的云原生应用管理实践
通过本文介绍丽迅物流关于基于阿里云服务网格 ASM 如何加速企业业务云原生化进程的实践经验。
|
10月前
|
Prometheus 监控 Kubernetes
使用ASM网格拓扑观测多集群的流量控制与容灾场景
作为业内首个全托管Istio兼容的阿里云服务网格产品ASM,一开始从架构上就保持了与社区、业界趋势的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立。ASM产品是基于社区Istio定制实现的,在托管的控制面侧提供了用于支撑精细化的流量管理和安全管理的组件能力。通过托管模式,解耦了Istio组件与所管理的K8s集群的生命周期管理,使得架构更加灵活,提升了系统的可伸缩性。从2022年4月
|
人工智能 自然语言处理 运维
站酷基于服务网格 ASM 的生产实践
随着站酷业务服务的持续改造,将持续基于阿里云服务网格 ASM 产品,获得更加丰富便捷的企业级特性,助力降本增效。
155 0
站酷基于服务网格 ASM 的生产实践
|
人工智能 自然语言处理 运维
站酷基于服务网格ASM的生产实践
随着站酷业务服务的持续改造,将持续基于阿里云服务网格 ASM 产品,获得更加丰富便捷的企业级特性,助力降本增效。
站酷基于服务网格ASM的生产实践
|
Kubernetes 安全 机器人
Lyft 微服务研发效能提升实践 | 3. 利用覆盖机制在预发环境中扩展服务网格
Lyft 微服务研发效能提升实践 | 3. 利用覆盖机制在预发环境中扩展服务网格
523 0
Lyft 微服务研发效能提升实践 | 3. 利用覆盖机制在预发环境中扩展服务网格
|
安全 测试技术 微服务
站酷基于服务网格 ASM 的生产实践
随着站酷业务服务的持续改造,将持续基于阿里云服务网格ASM产品,获得更加丰富便捷的企业级特性,助力降本增效,包括但不限于:1、提供便捷的网格内服务安全与鉴权方案:ASM现已提供ASM安全策略中心,可帮助快速配置网关与网格内服务安全鉴权方案。2、更加精细化的流量治理能力:随着站酷微服务化改造的不断加深,将会持续挖掘ASM提供的多项企业级流量治理特性,如全链路灰度发布、本地限流、接口级熔断。
149 0
站酷基于服务网格 ASM 的生产实践
|
Kubernetes 数据安全/隐私保护 容器
服务网格ASM使用FAQ之(3):如何在ASM网关中通过配置TLS协议版本来增强安全性
一个增强网站安全性的最佳做法是禁用早期版本的 TLS (TLS v1.0 和 1.1)并仅启用 TLS v1.2 和更高版本。这背后的原因是包括 TLS v1.0 在内的早期 TLS 版本存在已知的安全问题,并且使用功能强大的工具和系统进行了解密,导致传输中的数据泄露。禁用TLS v1.2 中的弱密码也很重要。您可以在 ASM 网关中通过配置TLS协议版本来增强安全性, 从而简单地解决上述问题。前
158 0
|
Kubernetes 网络安全 数据安全/隐私保护
服务网格ASM使用FAQ之(3):如何在ASM网关中通过配置TLS协议版本来增强安全性
包括TLS v1.0在内的早期TLS版本存在已知的安全问题,并且使用功能强大的工具和系统进行了解密,导致传输中的数据泄露。因此,一个增强网站安全性的最佳做法是禁用早期版本的TLS(v1.0和v1.1)并仅启用TLS v1.2及更高版本。同时,禁用TLS v1.2中的弱密码也非常重要。 本文介绍如何在ASM网关配置TLS协议版本,增强网站安全性。
224 0
|
25天前
|
Oracle 关系型数据库
oracle asm 磁盘显示offline
oracle asm 磁盘显示offline
21 2

相关产品

  • 容器镜像服务
  • 容器服务Kubernetes版