我正在测试 Istio,目前我将测试路由流量的“金丝雀”功能。
在我的测试中,我创建了一个由 5 个微服务(serviceA、serviceB、serviceC、serviceD、serviceE)组成的小型 servicemesh。每个人都可以调用其他人。我只是传递了一个像 A、E、C、B、B、D 这样的路径,请求遵循这个路径。
为了从集群外部调用我的 servicemesh,我有一个 Nginx 入口 Controller 使用指向 serviceA pod 的 Ingress 规则
这工作正常。
我面临的问题涉及使用自定义 header 匹配的流量切换,如下所示:
kind: VirtualService
metadata:
name: ServiceA
namespace: demo
labels:
app: demo
spec:
hosts:
- service-a
http:
- route:
- destination:
host: service-a
subset: v1
- match:
- headers:
x-internal-request:
exact: true
route:
- destination:
host: service-a
subset: v2
所以在这里,当我将自定义 header x-internal-request 设置为 true 时,我想尝试将流量路由到 ServiceA 的 v2 版本。
问题 :
今天,我使用 Nginx Ingress Controller 来公开我的一些服务。我们选择 Nginx 是因为它有一些诸如“外部授权”之类的功能,可以为我们节省大量工作,如果我们需要使用 Istio Ingress Controller ,我不确定它是否提供与 Nginx 相同的功能。
也许有一条我看不到的中间道路
感谢您的帮助
最佳答案
Istio
旨在使用 Envoy
在每个 Pod 上部署为 sidecars
拦截和代理服务网格中微服务之间的网络流量。
您可以使用 HTTP headers
进行操作通过 Envoy
获取请求和响应以及。据官方Documentation ,自定义 header 可以按以下顺序添加到请求/响应:加权集群级别 header 、路由级别 header 、虚拟主机级别 header 和最终全局级别 header 。因为您的 Envoy
代理在每个相关的服务 Pod 上部署为 sidecar
, 定制 HTTP header
应该传递给每个请求或响应。
我建议使用 Istio Ingress Controller及其核心组件Istio Gateway
它通常用于在 Istio
中启用监控和路由规则功能网状服务。
在 GitHub 上打开了一个问题关于Nginx Ingress controller
的实现在网格服务中以及路由请求的问题。
关于Istio 和(或与)Nginx 入口 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51780780/