0

minikubeVM 上,我有两个k8s服务:service-v1service-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:这是唯一的选择吗?还有其他选择如何解决这个问题吗?

4

0 回答 0