进入后端路径的错误句柄?

时间:2017-09-25 06:56:16

标签: istio

我试图通过以下配置通过istio ingress路由我的微服务:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: test
      annotations:
        kubernetes.io/ingress.class: "istio"
    spec:
      rules:
      - http:
          paths:
          - path: /internal/v1.0/service
            backend:
              serviceName: sleep
              servicePort: 80
          - path: /external/v1.0/service
            backend:
              serviceName: sleep
              servicePort: 80

当我测试此配置时,我收到了来自群集的404响应。 似乎istio威胁我作为正则表达式的道路

    → istioctl -n istio-shop get ingress-rule test-1-1
    destination: sleep.istio-shop.svc.cluster.local
    match:
      httpHeaders:
        uri:
          regex: /internal/v1.0/service
    route:
    - tags:
        servicePortNum: "80"
        tlsSecret: ""

我找到的唯一方法是摆脱"。#34;在服务API版本中使用这样的东西:

- path: /internal/v1/service

结果:

    → istioctl -n istio-shop get ingress-rule test-1-3
    destination: sleep.istio-shop.svc.cluster.local
    match:
      httpHeaders:
        uri:
          exact: /external/v1/service
    route:
    - tags:
        servicePortNum: "80"
        tlsSecret: ""

    - path: /internal/v1.*

结果:

        → istioctl -n istio-shop get ingress-rule test-1-4
        destination: sleep.istio-shop.svc.cluster.local
        match:
          httpHeaders:
            uri:
              prefix: /external/v1
        route:
        - tags:
            servicePortNum: "80"
            tlsSecret: ""

uri类型已更改为"前缀"和"确切"来自" regex"

我认为点"。"被处理为正则表达式部分而不是常规符号。 试图逃避它" \"没有结果。

这是一个错误吗?自" /internal/v1.0/service"不是正则表达式

1 个答案:

答案 0 :(得分:0)

正如您已经注意到的那样,Istio在将Ingress路径转换为Istio匹配配置时试图变得聪明,但看起来它在您的情况下还不够智能:https://github.com/istio/pilot/blob/master/adapter/config/ingress/conversion.go#L95

一个简单的"。"字符,单独(即,没有跟随" *",例如)不应该映射到正则表达式。

请在https://github.com/istio/issues/issues中提交错误报告。感谢