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

Gateway和VirtualService

在 Istio 服务网格中,GatewayVirtualService 是两个关键的配置对象,它们分别用于定义入站流量的接入点和路由规则。下面详细介绍这两个配置对象的功能及其相互关系。

Gateway

Gateway 是 Istio 中用于定义入站流量接入点的配置对象。它描述了外部流量如何进入服务网格,通常与边缘路由器或负载均衡器关联。Gateway 配置定义了监听的端口、协议(如 HTTP 或 TLS)以及与之关联的 IP 地址或主机名。

Gateway 的作用
  1. 定义入站端口:指定哪些端口应该监听入站流量。
  2. 定义协议类型:指定支持的协议类型,如 HTTP、HTTPS 或 TCP。
  3. 关联边缘设备:与边缘路由器或负载均衡器关联,以便管理入站流量。
Gateway 示例

以下是一个简单的 Gateway 配置示例:

 

Yaml

深色版本

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: example-gateway
spec:
  selector:
    istio: ingressgateway # 使用 Istio Ingress Gateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "example.com"
  - port:
      number: 443
      name: https
      protocol: HTTPS
    tls:
      mode: SIMPLE # 简单的 TLS 模式
      credentialName: example-tls-secret # 使用的 TLS 秘钥名称
    hosts:
    - "example.com"

在这个示例中,example-gateway 监听端口 80 和 443,支持 HTTP 和 HTTPS 协议,并且与主机名 example.com 关联。

VirtualService

VirtualService 是 Istio 中用于定义服务间路由规则的配置对象。它允许你根据不同的条件(如 HTTP 方法、URL 路径、请求头等)来定义如何将请求路由到不同的目标服务或服务实例。

VirtualService 的作用
  1. 请求匹配:根据请求的特征(如 HTTP 方法、URL、头部等)匹配请求。
  2. 请求路由:定义匹配请求后应如何路由。
  3. 流量管理:实现金丝雀发布、AB 测试等流量管理策略。
  4. 重试和超时:定义重试逻辑和超时策略。
VirtualService 示例

以下是一个简单的 VirtualService 配置示例,用于将请求路由到不同的服务版本:

 

Yaml

深色版本

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: example-vs
spec:
  hosts:
  - "example.com"
  gateways:
  - example-gateway # 与上面定义的 Gateway 关联
  http:
  - match:
    - uri:
        exact: "/v1/api"
    route:
    - destination:
        host: "v1-service"
        port:
          number: 8080
      weight: 80
    - destination:
        host: "v2-service"
        port:
          number: 8080
      weight: 20

在这个示例中,所有针对 example.com 的 HTTP 请求将被路由到 v1-servicev2-service,其中 v1-service 占 80% 的流量,v2-service 占 20% 的流量。

Gateway 和 VirtualService 的组合使用

GatewayVirtualService 通常配合使用,以实现对外部流量的精细控制。Gateway 定义了流量如何进入服务网格,而 VirtualService 则定义了进入网格后的流量如何被路由。

综合示例

以下是结合 GatewayVirtualService 的综合示例:

 

Yaml

深色版本

# example-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: example-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "example.com"

# example-vs.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: example-vs
spec:
  hosts:
  - "example.com"
  gateways:
  - example-gateway
  http:
  - match:
    - uri:
        exact: "/v1/api"
    route:
    - destination:
        host: "v1-service"
        port:
          number: 8080
      weight: 80
    - destination:
        host: "v2-service"
        port:
          number: 8080
      weight: 20

在这个综合示例中,example-gateway 定义了如何监听来自 example.com 的 HTTP 流量,而 example-vs 则定义了如何将这些请求路由到 v1-servicev2-service


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

相关文章:

  • 小试牛刀-Anchor安装和基础测试
  • 在MATLAB中导入TXT文件的若干方法
  • css uniapp背景图宽度固定高度自适应可以重复
  • SpringBoot中Maven的定义及国内源配置教程,实现自动获取Jar包
  • AWTK VSCode 实时预览插件端口冲突的解决办法
  • 解决微信小程序自定义tabbar点击两次才能跳转
  • 代码随想录算法训练营day44
  • PostgreSQL 数据库语法学习:深入理解 `JOIN` 操作
  • 【AI基础】pytorch lightning 基础学习
  • 【JavaEE初阶】深入解析死锁的产生和避免以及内存不可见问题
  • 药品识别与分类系统源码分享
  • 【Transformer】长距离依赖
  • 微信小程序中的 `<block>` 元素:高效渲染与结构清晰的利器
  • 初识C语言(五)
  • 鸿蒙开发(NEXT/API 12)【硬件(传感器开发)】传感器服务
  • Unity 2D RPG Kit 学习笔记
  • 滚雪球学Oracle[8.1讲]:高级主题与未来趋势
  • vite 快速入门指南
  • Flask+微信小程序实现Login+Profile
  • python-ds:Python 中的数据结构库(适用于面试的数据结构和算法合集)
  • 眼镜识别数据集类别和数量已经在文档中说明,训练集和验证集共2200,g是眼镜,ng是没有眼镜。
  • 可视化图表与源代码显示配置项及页面的动态调整功能分析
  • 9、论文阅读:无监督的感知驱动深水下图像增强
  • Arduino UNO R3自学笔记6 之 Arduino引脚(IO)功能介绍
  • 电笔有用吗
  • 【PostgreSQL 】入门篇——支持的各种数据类型介绍,包括整数、浮点数、字符串、日期、JSON、数组等