icon

Sealos,在云桌面中运行分布式应用程序,像使用个人电脑一样使用云

icon

去看看👀

icon

扫码加入微信群,和云原生大佬们一起探讨云原生和不可描述的事情!

wechat qr code
 
今日天气
 
舔狗日记

Istio 中 VirtualService 的注意事项
  1. 博客/

Istio 中 VirtualService 的注意事项

·854 字·2 分钟· · ·
服务网格 Istio
米开朗基杨
作者
米开朗基杨
云原生搬砖师 & Sealos 开发者布道师 & FastGPT 熟练工
Table of Contents
gptgod
FastGPT
Laf
Contact me

Istio 要求集群中 VirtualService 定义的所有目标主机都是唯一的。当使用目标主机的短名称时(不包含 '.' 的目标主机,例如使用 reviews,而不是 reviews.default.svc.cluster.local),Istio 会将该短名称转换为 VirtualService 规则所在的命名空间的 FQDN,而不是转换为目标主机所在的命名空间的 FQDN。因此,当在不同的命名空间中定义 VirtualService 资源时允许目标主机的短名称重复。当你的目标主机包含 * 通配符前缀、IP 地址或 Web 地址时,VirtualService 不会将其视为短名称,也就不会尝试将其转换为 FQDN。反正无论如何,目标主机必须是唯一的。

目标主机冲突示例
#

下面举几个目标主机冲突的例子,以帮助大家加深对这方面的理解。

示例 1
#

下面两个 VirtualService 的目标主机的 FQDN 分别是 reviews.foo.svc.cluster.localreviews.bar.svc.cluster.local ,这是允许的。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs1
  namespace: foo
spec:
  hosts:
  - reviews
  ...
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs2
  namespace: bar
spec:
  hosts:
  - reviews
  ...

示例 2
#

下面两个 VirtualService 的目标主机的 FQDN 都是 reviews.default.svc.cluster.local,这是不推荐的,会导致不确定的路由行为。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs3
  namespace: default
spec:
  hosts:
  - reviews
  ...
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs4
  namespace: default
spec:
  hosts:
  - reviews
  ...

优化方案请参考下文的 使目标主机唯一

示例 3
#

下面这种写法也是不推荐的,因为它在两个不同的 VirtualService 资源中定义了相同的 Web 地址,会导致路由冗余。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs5
  namespace: foo
spec:
  hosts:
  - google.com
  http:
  - match:
    - uri:
        prefix: /search
    route:
    - destination:
        host: search.foo.svc.cluster.local
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs6
  namespace: foo
spec:
  hosts:
  - google.com
  http:
  - match:
    - uri:
        prefix: /mail
    route:
    - destination:
        host: mail.foo.svc.cluster.local

优化方案请参考下文的 合并冲突的 VirtualService

优化方案
#

这里给出两个优化准则,可以改进上文的不恰当写法。

使目标主机唯一
#

可以将冲突的 VirtualService 中定义的目标主机更改为唯一的。以下的 VirtualServices 具有唯一的目标主机 reviewsratings,可以用来优化上面示例 2 的写法。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs3
  namespace: default
spec:
  hosts:
  - reviews
  ...
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs4
  namespace: default
spec:
  hosts:
  - ratings
  ...

合并冲突的 VirtualService
#

可以将冲突的 VirtualService 中定义的路由规则合并到同一个 VirtualService 中。下面的 VirtualService 可以解决示例 3 的问题,因为规则已合并,并且仅保留具有目标主机 google.com 的单个 VirtualService。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs5
  namespace: foo
spec:
  hosts:
  - google.com
  http:
  - match:
    - uri:
        prefix: /search
    route:
    - destination:
        host: search.foo.svc.cluster.local
  - match:
    - uri:
        prefix: /mail
    route:
    - destination:
        host: mail.foo.svc.cluster.local
-------他日江湖相逢 再当杯酒言欢-------

相关文章

Istio 的高级边缘流量控制(二)
·1303 字·3 分钟·
服务网格 Istio Kubernetes
Istio 的高级边缘流量控制(一)
·2165 字·5 分钟·
服务网格 Istio Kubernetes
在服务网格内部调用外部 TCP 服务
·4275 字·9 分钟·
服务网格 Istio Kubernetes
在服务网格内部调用外部 Web 服务
·3111 字·7 分钟·
服务网格 Istio Kubernetes
Istio 出口流量的 TLS
·2515 字·6 分钟·
服务网格 Istio Kubernetes
了解如何在服务网格中进行性能测试
·2533 字·6 分钟·
服务网格 Istio

公众号二维码