I'm setting up an Istio service mesh with two services inside both running a Graphql engine. I'm planning to set them on two different subpaths. How would you set up redirection on VirtualService?
I already tried using this VirtualService config
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
but I keep on having error 404 whenever I try accessing these prefixes.
EDIT: I've updated my virtual service to incorporate rewrite.uri
. Whenever I try accessing either prefixes I get redirected to /
and it gives out an error 404. Here is my updated Gateway and VirtualService manifest.
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
---
On what path your Hasura's GraphQL endpoint is configured?
The way your VirtualService
is configured, a request to your gateway will behave like this:
my.host.com/hasura1
--> hasura-1/hasura1
my.host.com/hasura1/anotherpath
--> hasura-1/hasura1/anotherpath
my.host.com/hasura2
--> hasura-2/hasura2
Maybe you are missing a rewrite.uri
rule to strip the path from the request.
e.g.: With this rule:
http:
- match:
- uri:
prefix: /hasura1
rewrite:
uri: /
route:
- destination:
host: hasura-1
port:
number: 80
your Hasura container should receive the requests on the root path:
my.host.com/hasura1
--> hasura-1/
my.host.com/hasura1/anotherpath
--> hasura-1/anotherpath