在minikube
VM 上,我有两个k8s
服务:service-v1
和service-v2
. 我有istio-ingress
规则:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: forecast-ingress
annotations:
kubernetes.io/ingress.class: "istio"
spec:
rules:
- http:
paths:
- path: /v2/.*
backend:
serviceName: service-v2
servicePort: 8080
- http:
paths:
- path: /v1/.*
backend:
serviceName: service-v1
servicePort: 8080
因此,当我访问/v1/endpoint
它时,它会将呼叫转发到service-v1
. /endpoint
在我的应用程序中,我有一个 for而不是 for的映射/v1/endpoint
,所以我还有一个httpRewrite
规则:
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: ingress-service-v2-rewrite
namespace: default
spec:
destination:
name: service-v2
match:
request:
headers:
uri:
prefix: /v2
rewrite:
uri: /
route:
- labels:
version: "2.0"
---
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: ingress-service-v1-rewrite
namespace: default
spec:
destination:
name: service-v1
match:
request:
headers:
uri:
prefix: /v1
rewrite:
uri: /
route:
- labels:
version: "1.0"
但是现在我有另一个问题:当我/v1/endpoint
从浏览器访问时,它会再次调用我的服务给另一个服务/endpoint2
,它给了我404
,因为这个端点可以作为/v1/endpoint2
. 我可以/v1/endpoint2
从浏览器访问。我可以看到修复它的唯一方法是更改代码以调用相对 URL,如下所示../endpoint1
:这是唯一的选择吗?还有其他选择如何解决这个问题吗?