我正在使用两个运行Graphql引擎的服务建立一个Istio服务网格。我打算将它们设置在两个不同的子路径上。您将如何在VirtualService上设置重定向?
我已经尝试使用此VirtualService配置
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: hasura-1
spec:
hosts:
- "*"
gateways:
- hasura-gateway
http:
- match:
- uri:
prefix: /hasura1
route:
- destination:
host: hasura-1
port:
number: 80
- match:
- uri:
prefix: /hasura2
route:
- destination:
host: hasura-2
port:
number: 80
但是,每当尝试访问这些前缀时,我始终会遇到错误404。
编辑:我已经更新了我的虚拟服务,以合并
rewrite.uri
。每当我尝试访问任何一个前缀时,我都将重定向到/
,并发出错误404。这是我更新的网关和VirtualService list 。apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: hasura-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: hasura-1
spec:
hosts:
- "*"
gateways:
- hasura-gateway
http:
- match:
- uri:
exact: /hasura1
rewrite:
uri: /
route:
- destination:
host: hasura-1
port:
number: 80
- match:
- uri:
exact: /hasura2
rewrite:
uri: /
route:
- destination:
host: hasura-2
port:
number: 80
---
最佳答案
您的Hasura的GraphQL端点在什么路径上配置?
配置VirtualService
的方式,对网关的请求将如下所示:my.host.com/hasura1
-> hasura-1/hasura1
my.host.com/hasura1/anotherpath
-> hasura-1/hasura1/anotherpath
my.host.com/hasura2
-> hasura-2/hasura2
也许您缺少rewrite.uri
规则来删除请求中的路径。
例如:使用此规则:
http:
- match:
- uri:
prefix: /hasura1
rewrite:
uri: /
route:
- destination:
host: hasura-1
port:
number: 80
您的Hasura容器应在根路径上收到请求:
my.host.com/hasura1
-> hasura-1/
my.host.com/hasura1/anotherpath
-> hasura-1/anotherpath