kubernetes-ingress - 路径中具有命名捕获组的 Ingress-Nginx 正则表达式路由规则
问题描述
我正在为 nginx 入口控制器创建 Kubernetes 入口资源。我将使用的路径有一个 ID,我需要将其提取到一个变量中,该变量可能位于路径中的不同位置。例如:
http://myservice/environment/<someenv>/room/<roomid>
http://myservice/join/<roomid>
如果我在正则表达式中使用未命名的捕获组,那么第一个路径roomid
将是$2
,第二个路径将是$1
. 理想情况下,我可以使用命名捕获组将其分配给我可以轻松使用的特定变量,但是使用命名捕获组创建具有以下路径的 Ingress 会导致错误
# ingresses.networking.k8s.io "nginx-consistent" was not valid:
# * spec.rules[0].http.paths[0].path: Invalid value: "/join/(?<roomid>.*)": must be a valid regex
是否有支持使用命名捕获组的方法?
当前的配置并没有太多有趣的地方。以下是精简的配置。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: {{.Release.Name}}-nginx-route-by-roomid
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/upstream-hash-by: "roomid-$roomid"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header ingress-handler nginx-route-by-roomid;
spec:
rules:
- http:
paths:
- backend:
serviceName: {{ .Values.service.serviceName }}
servicePort: {{ .Values.service.servicePort }}
path: /api/v1/rooms/(?<roomid>[^/]*)
- backend:
serviceName: {{ .Values.service.serviceName }}
servicePort: {{ .Values.service.servicePort }}
path: /api/v1/players/([^/]*)/rooms/(?<roomid>[^/]*)
解决方案
推荐阅读
- ios - ScrollView 缺少约束
- java - DAO 和实体关系
- reactjs - firebase 不会捕获错误
- python - 使用两个函数(Python)
- python - Python,如何以精度(uint8,uint16)将二维数组写入二进制文件?
- javascript - 如何将参数传递给 keydown 事件
- javascript - Angular Material Design Form Field如何使用拖放图标作为matPrefix
- selenium-chromedriver - Magento 2 MFTF 测试:Chrome 无法启动:异常退出
- microsoft-edge - 如何在 Microsoft Edge 官方版本中使用 TEdgeComponent
- wordpress - 根据城市可选择街道