Rob*_*tts 7 regex nginx kubernetes
我想在Ingress规则的路径中使用正则表达式,但我无法让它工作.例如:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: cafe-ingress
spec:
tls:
- hosts:
- cafe.example.com
secretName: cafe-secret
rules:
- host: cafe.example.com
http:
paths:
- path: /tea
backend:
serviceName: tea-svc
servicePort: 80
- path: /coffee
backend:
serviceName: coffee-svc
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
我尝试/t[a-z]a了第一条路径,但是我试过的任何路径都应该匹配正则表达式,这使我进入默认后端而不是我预期的服务.
注意:我正在使用nginx入口控制器,它应该能够支持正则表达式.
显然这个问题仍然有流量,所以我觉得我应该更新它。我不再使用 nginx 入口,所以我无法验证它是否有效。根据https://kubernetes.github.io/ingress-nginx/user-guide/ingress-path-matching/:
入口控制器支持字段中不区分大小写的正则表达式
spec.rules.http.paths.path。这可以通过将nginx.ingress.kubernetes.io/use-regex注释设置为true(默认为 false)来启用。
他们在页面上提供的示例将涵盖它:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress-3
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
- host: test.com
http:
paths:
- path: /foo/bar/bar
backend:
serviceName: test
servicePort: 80
- path: /foo/bar/[A-Z0-9]{3}
backend:
serviceName: test
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
不再有效的原始答案。
似乎解决方案非常简单(至少使用 nginx 入口控制器)-您只需要在路径前加上"~ ":
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: cafe-ingress
spec:
tls:
- hosts:
- cafe.example.com
secretName: cafe-secret
rules:
- host: cafe.example.com
http:
paths:
- path: ~ /t[a-z]a
backend:
serviceName: tea-svc
servicePort: 80
- path: /coffee
backend:
serviceName: coffee-svc
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3872 次 |
| 最近记录: |