[英]When using ingress-nginx in Kubernetes, is is possible to configure backends with captured groups from the path?
是否可以在 Kube.netes 中配置一個nginx
class 入口,后端引用來自路徑正則表達式的捕獲組? 在 ingress-nginx 文檔https://kube.netes.github.io/ingress-nginx/user-guide/ingress-path-matching/中沒有任何指示
我正在嘗試降低入口路徑/后端定義的復雜性,例如:
...
spec:
rules:
- http:
paths:
- path: /some/backend1/*
backend:
serviceName: backend1
- path: /some/otherbackend/*
backend:
serviceName: otherbackend
像這樣:
spec:
rules:
- http:
paths:
- path: /some/([^/]+)/(.+)
backend:
serviceName: $1 # or \1 - possible to ref a capture group here?
在上面的示例中, path
的匹配正則表達式匹配“任何不是'/'重復的字符” - 即它將匹配下一個 URI 部分直到'/'。 然后我想傳遞給serviceName
。
這可能嗎?
編輯
我找到了一種方法來解決這個問題。 這不是一種理想的實現方式,因為我將覆蓋直接注入到 nginx 配置中。 與此類似的功能是否值得作為 nginx controller 功能請求?
我已經發布了一個解決方案來讓它在下面工作,即使它有問題 - 請參閱下面的免責聲明/問題。
免責聲明:在重現之前,了解直接使用 nginx 配置的一些問題是很有用的 - 請看這個-
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: dynamic-routing-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/configuration-snippet: |
set $proxy_upstream_name "default-$BackendService-8088";
spec:
rules:
- http:
paths:
- path: /dynamci/(?<BackendService>[^/]+)(.+)?
pathType: ImplementationSpecific
backend:
service:
name: backendservice
port:
number: 8088
現在,對/dynamic/x-backend
請求將被路由到x-backend
服務(如果存在)。 嚴重警告 - 假設您對服務定義有一致的規范(例如主機/端口/名稱空間等)。
上面討論缺乏健壯性的鏈接是 nginx controller 以相關方式轉換為 nginx 配置,現在您正在進行 + 健全性檢查(例如,通過准入驗證程序),以及了解進入入口的內部 controller 命名約定定義。 如果沒有configuration-snippet
注釋, nginx 位置塊會將proxy_upstream_name
設置為類似default-backendservice-8088
東西,但是配置片段稍后會注入另一set $proxy_upstream_name
參數,該參數與正則表達式中捕獲的組的名稱相匹配 - 所以你必須知道如何創建反向引用並手動維護它,同時確保覆蓋代理參數與所有服務的定義方式一致(例如,如果您在不同端口上運行不同的后端服務,這將無法解決它它很快就會變得更加復雜)。
雖然它確實獲得了所需的功能,但由於可靠性/穩健性問題,我不確定我是否會繼續推進它......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.