当前位置: 首页 > article >正文

istio中使用serviceentry结合egressgateway实现多版本路由

假设有一个外部服务,外部服务ip为:10.10.102.90,其中32033为v1版本,32034为v2版本。

现在需要把这个服务引入到istio中,使用egressgateway转发访问该服务的流量,并且需要实现多版本路由,使得header中x-version的值为v1的路由到v1版本,x-version的值为v2的路由到v2版本。

使用serviceentry引入该服务

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: gindemo-service-entry
spec:
  endpoints:
  - address: 10.10.102.90
    labels:
      version: v1
    ports:
      http: 32033
  - address: 10.10.102.90
    labels:
      version: v2
    ports:
      http: 32034
  hosts:
  - gindemo.test.ch
  location: MESH_EXTERNAL
  ports:
  - name: http
    number: 80
    protocol: HTTP
  resolution: STATIC

定义一个egress gateway:

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: gindemo-egressgateway
spec:
  selector:
    istio: egressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - gindemo.test.ch

创建一个dr,作为流量入口,接收网格内请求外部服务的流量:

注意!该dr需要在创建在istio-system命名空间下

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: egressgateway-for-gindemo
  namespace: istio-system
spec:
  host: istio-egressgateway-1-19-6.istio-system.svc.cluster.local
  subsets:
  - name: gindemo
  trafficPolicy:
    loadBalancer:
      simple: RANDOM

创建服务的dr,声明服务的多个版本:

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: gindemo-destination-rule
spec:
  host: gindemo.test.ch
  subsets:
  - labels:
      version: v1
    name: v1
  - labels:
      version: v2
    name: v2
  trafficPolicy:
    loadBalancer:
      simple: RANDOM

创建一个vs,定义服务路由规则:

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: direct-gindemo-through-egress-gateway
spec:
  gateways:
  - gindemo-egressgateway # 接收来自网关的流量
  - mesh # 接收来自网格内的流量
  hosts:
  - gindemo.test.ch
  http:
  - match: # 该match实现将来自网格内的流量,转发到egressgateway
    - gateways:
      - mesh 
      port: 80
    route:
    - destination:
        host: istio-egressgateway-1-19-6.istio-system.svc.cluster.local
        port:
          number: 80
        subset: gindemo
      weight: 100
  - match: # 该match实现将来自egressgateway的流量转发到serviceentry
    - gateways:
      - gindemo-egressgateway
      headers:
        x-version:
          exact: v1
    route:
    - destination:
        host: gindemo.test.ch
        subset: v1
  - match: # 该match实现将来自egressgateway的流量转发到serviceentry
    - gateways:
      - gindemo-egressgateway
      headers:
        x-version:
          exact: v2
      port: 80
    route:
    - destination:
        host: gindemo.test.ch
        subset: v2


http://www.kler.cn/a/312997.html

相关文章:

  • VSCode可以安装最新版,并且可以对应Node 12和npm 6
  • [ Linux 命令基础 3 ] Linux 命令详解-文件和目录管理命令
  • 【大数据学习 | kafka高级部分】kafka中的选举机制
  • C++初阶——vector
  • 数据重塑:长宽数据转换【基于tidyr】
  • LeetCode:703. 数据流中的第 K 大元素
  • JFinal整合Websocket
  • 大模型中常见 loss 函数
  • 关于“华为杯”第二十一届中国研究生数学建模竞赛赛题下载及提交作品的重要提醒
  • pytorch实现RNN网络
  • Vue使用qrcodejs2-fix生成网页二维码
  • 解决 GitLab CI/CD 中的 `413 Request Entity Too Large` 错误
  • 生信初学者教程(五):R语言基础
  • 【计算机网络篇】电路交换,报文交换,分组交换
  • BGP实验
  • Percona发布开源DBaaS平台;阿里云RDS发布全球多活数据库(GAD);Redshift支持自然语言生成SQL
  • Pyspark dataframe基本内置方法(4)
  • 【有啥问啥】弱监督学习新突破:格灵深瞳多标签聚类辨别(Multi-Label Clustering and Discrimination, MLCD)方法
  • QT 将文字矢量化,按照设置的宽和高绘制
  • 3657A/B/AM/BM矢量网络分析仪
  • CSS - 通用左边图片,右边内容,并且控制长度溢出处理模板(vue | uniapp | 微信小程序)
  • python画图|曲线分段设置颜色基础教程
  • 什么是3D展厅?有何优势?怎么制作3D展厅?
  • 蓝星多面体foc旋钮键盘复刻问题详解
  • JVM java主流的追踪式垃圾收集器
  • docker 镜像,导入导出,