簡體   English   中英

在 Kube.netes 中使用 ingress-nginx 時,是否可以使用路徑中捕獲的組配置后端?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM