入口后端路径的iStio手柄不正确



im试图通过ISTIO INTRESS路由我的微服务以及以下配置:

    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: ""

我发现的唯一方法是摆脱"。在Service 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类型已更改为" pregex"的"前缀"one_answers"精确"

我假设那个点"。作为正则零件而不是常规标志。试图用" "而没有结果逃脱它。

那是一个错误吗?因为"/internal/v1.0/service"不是正则

正如您所注意到的,Istio在将入口路径转换为istio Match config时会试图变得聪明,但是在您的情况下,它看起来还不够聪明:https://github.com/istio/pilot/blob/master/master/apapter/config/infress/conversion.go#l95

一个简单的"。字符,单独(即没有以下"*"),不应将其映射到正则。

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

最新更新