istio 入口后端路径的句柄不正确?
istio incorrect handle of ingress backend path?
我正在尝试使用以下配置通过 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: ""
我找到的唯一解决办法是去掉“.”。在服务 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"
更改为 "prefix" 和 "exact"
我假设点“.”作为正则表达式部分而不是常规符号处理。
尝试用“\”转义没有结果。
这是一个错误吗?因为“/internal/v1.0/service”不是正则表达式
正如您所注意到的,Istio 在将 Ingress 路径转换为 Istio 匹配配置时试图变得聪明,但在您的情况下它看起来不够聪明:https://github.com/istio/pilot/blob/master/adapter/config/ingress/conversion.go#L95
一个简单的“.”单独的字符(例如,没有后面的“*”)不应映射到正则表达式。
请在 https://github.com/istio/issues/issues 中提交错误报告。谢谢
我正在尝试使用以下配置通过 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: ""
我找到的唯一解决办法是去掉“.”。在服务 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"
更改为 "prefix" 和 "exact"我假设点“.”作为正则表达式部分而不是常规符号处理。 尝试用“\”转义没有结果。
这是一个错误吗?因为“/internal/v1.0/service”不是正则表达式
正如您所注意到的,Istio 在将 Ingress 路径转换为 Istio 匹配配置时试图变得聪明,但在您的情况下它看起来不够聪明:https://github.com/istio/pilot/blob/master/adapter/config/ingress/conversion.go#L95
一个简单的“.”单独的字符(例如,没有后面的“*”)不应映射到正则表达式。
请在 https://github.com/istio/issues/issues 中提交错误报告。谢谢