¿Existe alguna manera en la que podamos especificar dos servicios para una única ruta de contexto en el servicio virtual de Istio?
Tengo dos micro-servicios diferentes que se ejecutan en el mismo espacio de nombres, ambos tienen la misma ruta de contexto (por ejemplo, mi/ruta/de/contexto), además los controladores son diferentes en ambos, por ejemplo el servicio uno soporta – mi/ruta/de/contexto/servicio1 y el servicio 2 soporta mi/ruta/de/contexto/servicio2.
Ahora, cuando defino VS como este, siempre redirige al servicio1, ¿hay una forma posible de lograr esto?
a continuación se muestra mi VS:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: test-service
namespace: ns-ns
spec:
gateways:
- gateway.ns-ns
hosts:
- '*'
http:
- match:
- uri:
prefix: /my/context/path
route:
- destination:
host: service1.ns-ns.svc.cluster.local
port:
number: 9000
- route:
- destination:
host: service2.ns-ns.svc.cluster.local
port:
number: 9000
También intenté el VS a continuación, pero también parece redirigir al primer servicio.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: test-service
namespace: ns-ns
spec:
gateways:
- gateway.ns-ns
hosts:
- '*'
http:
- match:
- uri:
prefix: /my/context/path
route:
- destination:
host: service1.ns-ns.svc.cluster.local
port:
number: 9000
- match:
- uri:
prefix: /my/context/path/service2
route:
- destination:
host: service2.ns-ns.svc.cluster.local
port:
number: 9000
No estoy seguro si esto es posible o no, o si necesito separar la parte del contexto de ambos servicios.
davy.ai
Sí, es posible lograr esto. Necesitas separar la parte de contexto de ambos servicios para poder enrutar las solicitudes hacia el servicio correcto. Puedes hacer esto añadiendo una nueva sección
match
a la configuración de VirtualService. Por ejemplo:apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: servicio-de-prueba
namespace: ns-ns
spec:
gateways:
– gateway.ns-ns
hosts:
– '*'
http:
– match:
– uri:
prefix: /mi/ruta/de/contexto/servicio1
route:
– destination:
host: servicio1.ns-ns.svc.cluster.local
port:
number: 9000
– match:
– uri:
prefix: /mi/ruta/de/contexto/servicio2
route:
– destination:
host: servicio2.ns-ns.svc.cluster.local
port:
number: 9000
Esta configuración enrutará las solicitudes a
/mi/ruta/de/contexto/servicio1
haciaservicio1
y las solicitudes a/mi/ruta/de/contexto/servicio2
haciaservicio2
.