最近收到一個關於 Kubernetes Nginx ingress 在使用上的支援,是關於 Nginx Ingress rewrite 的寫法問題順手記錄一下,這篇相關的程式碼範例放在 shazi7804/aws-eks-samples 提供參考
在這個架構中有幾項需求必須滿足:
foo.bar.com/
轉向到Frontend Service
foo.bar.com/.*
轉向到Backend Service
當請求是 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
。