Site icon Mr. 沙先生

Nginx Ingress deploy simple fanout multiple-paths with Path-Priority regular expression

最近收到一個關於 Kubernetes Nginx ingress 在使用上的支援,是關於 Nginx Ingress rewrite 的寫法問題順手記錄一下,這篇相關的程式碼範例放在 shazi7804/aws-eks-samples 提供參考

在這個架構中有幾項需求必須滿足:

當請求是 foo.bar.com/ 時必須要以 Frontend Service 優先路由,對於 Nginx 路由可以透過 location 的正規表示式來決定誰是 first match 來路由,但在寫法上常常要試一陣子

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: simple-app
  labels:
    app: simple-app
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service: 
            name: frontend
            port:
              number: 80
      - path: /(.+)
        pathType: Prefix
        backend:
          service: 
            name: backend
            port:
              number: 80

Regular expression 這邊必須使用 /(.+) 來實現而不是 /(.*) 這是由於兩者在 mapping 時 * is for 0 or more matches+ is for 1 or more matches

Exit mobile version