Kubernetes Nginx Ingress Controller 實現基於 User-Agent 的 Canary 發布策略
因為前端代碼有兩套(電腦版及手機版)的原因無RWD,而希望可以透過單個域名 prj.k8s.com
當使用者訪問時,自動選擇電腦版或者手機版。
這邊提供一套測試用例 Github
部署後關鍵切換的位置在 ingress的配置,而以下的範例預設的話是訪問svc nginx
若使用行動裝置或者ipad 偵測到User-agnet之後,就會自動選擇到svc nginx-text
。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/enable-cors: "true"
spec:
ingressClassName: nginx
rules:
- host: nginx.k8s.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-mobile
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "User-Agent"
nginx.ingress.kubernetes.io/canary-by-header-pattern: "(Mobile|Android|iPhone|iPad)"
spec:
ingressClassName: nginx
rules:
- host: nginx.k8s.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-text
port:
number: 80