我尝试使用以下配置通过 istio 入口路由我的微服务:
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”不是正则表达式