之前有紀錄過開發的網站遇到 CSRF token 認證的問題,事實上解決的方法就是讓使用者盡量存取同一個 Pod 來避免從 A Pod 取得 token,但卻在 B Pod 驗證 token。在 K8s 上可以針對 ingress.yml 裡面去做設定
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: hello-ingress annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/affinity: "cookie" nginx.ingress.kubernetes.io/session-cookie-name: "hello-cookie" nginx.ingress.kubernetes.io/session-cookie-expires: "172800" nginx.ingress.kubernetes.io/session-cookie-max-age: "172800" nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/affinity-mode: persistent nginx.ingress.kubernetes.io/session-cookie-hash: sha1 spec: rules: - host: DOMAIN.NAME http: paths: - path: / backend: serviceName: hello-service servicePort: hello-port
這邊要強調的是 affinity : "cookie" 以及 affinity-mode: persistent。透過設定 persistent 的模式可以令 Pod 做 Sticky Session 的控制,進而解決 CSRF 的認證問題。
留言
張貼留言