1 min read

Kubernetes Nginx Ingress Controller 實現基於 User-Agent 的 Canary 發布策略

Kubernetes Nginx Ingress Controller 實現基於 User-Agent 的 Canary 發布策略

Nginx-ingress 文檔

因為前端代碼有兩套(電腦版及手機版)的原因無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