Kubernetes中使用Traefik的sticky sessions特性

背景

在使用Nginx作為前端頁(yè)面的反向代理時(shí),有時(shí)我們需要在服務(wù)端為用戶的本次訪問(wèn)保存一些臨時(shí)狀態(tài),這種臨時(shí)狀態(tài)通常被稱為 session。當(dāng)訪問(wèn)壓力增大時(shí),常用的辦法是開(kāi)啟多個(gè)服務(wù)端實(shí)例,然后使用Nginx一類的反向代理服務(wù)器進(jìn)行負(fù)載均衡。然而對(duì)于依賴會(huì)話與用戶進(jìn)行交互的頁(yè)面來(lái)說(shuō),由于負(fù)載均衡可能會(huì)將同一用戶的兩次訪問(wèn)分發(fā)到不同的服務(wù)端上,這樣會(huì)話就無(wú)法正常運(yùn)作了。而解決這個(gè)問(wèn)題有最常用的兩種方法,

  • 一種是在應(yīng)用層面上作修改,以支持會(huì)話共享。
  • 一種方式則是使用會(huì)話粘粘:在客戶端第一次發(fā)起請(qǐng)求時(shí),反向代理為客戶端分配一個(gè)服務(wù)端,并且將該服務(wù)端的地址以SetCookie的形式發(fā)送給客戶端,這樣客戶端下一次訪問(wèn)該反向代理時(shí),便會(huì)帶著這個(gè)cookie,里面包含了上一次反向代理分配給該客戶端的服務(wù)端信息。

在Nginx中,這種機(jī)制是通過(guò)一個(gè)名為Sticky的插件實(shí)現(xiàn)的。而Traefik則集成了與Nginx的sticky sessions相同功能,并且可以在Kubernetes中方便的開(kāi)啟和配置該特性。

關(guān)于Traefik 服務(wù)發(fā)現(xiàn)部署部分可以參照之前的文章
Kubernetes 服務(wù)發(fā)布之traefik ingress

kubernetes 中service開(kāi)啟Sticky

Kubernetes中可以通過(guò)為指定的service對(duì)象或ingress對(duì)象聲明annotation來(lái)為ingress controller做額外的詳細(xì)配置。例如,如果要開(kāi)啟sticky,只需要在想要開(kāi)啟sticky的服務(wù)端對(duì)應(yīng)的service上添加以下的annotation即可。
示例配置

apiVersion: v1
kind: Service
metadata:
  name: traefik-web-ui
  namespace: kube-system
  annotations:
    traefik.ingress.kubernetes.io/affinity: "true"
    traefik.ingress.kubernetes.io/session-cookie-name: "traefik-cookie"
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
  - name: web
    port: 80
    targetPort: 8080

Traefik 官方文檔

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容