在K8S中實現會話保持的兩種方案
前言
故事的起因是朋友所在的部門最近基于auth2實現單點登錄,他們在測試環(huán)境單點登錄,運行得好好的,但他們把單點登錄上到預發(fā)布環(huán)境,發(fā)現單點登錄不好使了。他們有部分系統(tǒng)是以授權碼式接入,發(fā)現第一次登錄拿到授權碼進行換取token時,會提示授權碼失效。而他們測試環(huán)境和預發(fā)布環(huán)境的代碼是一樣的。
后面朋友和我聊天,我就問朋友兩套環(huán)境有存在什么不一樣的地方,朋友說測試環(huán)境是單POD部署,而預發(fā)布環(huán)境是多POD部署。最后我還從朋友的口中得到一個信息,他們auth2是基于國內開源的sa-token進行實現,剛好我也玩過這個玩意兒,這玩意兒的授權碼是基于cookies進行保持。我就跟朋友說可能是因為你部署了多個pod,pod的會話沒保持住。然后我就跟朋友提供以下方案
會話保持方案
方案一:通過service進行配置
在service配置配置形如下內容
apiVersion: v1
kind: Service
metadata:
namespace: uat
name: uat-sso
spec:
selector:
app: uat-sso
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30666
type: NodePort
# 會話保持3小時
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10800其中關鍵配置如下
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10800通過指定sessionAffinity: ClientIP開啟了session保持。當設置了session保持之后,k8s會根據訪問的ip來把請求轉發(fā)給他以前訪問過的pod,這樣session就保持住了。其中timeoutSeconds指的是session保持的時間,這個時間默認是10800秒,也就是三個小時。
不過朋友說他配置了這個之后,貌似沒產生作用,因為朋友他們單點登錄是通過ingress進行轉發(fā),于是就有了第二種方案
方案二:通過ingress配置會話保持
配置形如下
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/affinity: cookie
nginx.ingress.kubernetes.io/affinity-mode: persistent
nginx.ingress.kubernetes.io/session-cookie-name: route
name: uat-sso-ingress
namespace: uat
spec:
rules:
- host: sso.com
http:
paths:
- backend:
service:
name: uat-sso
port:
number: 80
path: /
pathType: Prefix
tls:
- hosts:
- sso.com
secretName: tls.sso.com其中關鍵配置如下
metadata:
annotations:
nginx.ingress.kubernetes.io/affinity: cookie
nginx.ingress.kubernetes.io/affinity-mode: persistent
nginx.ingress.kubernetes.io/session-cookie-name: route其中nginx.ingress.kubernetes.io/affinity 屬性,啟用會話保持, 其值僅僅支持cookie。
nginx.ingress.kubernetes.io/affinity-mode 屬性,設置為persistent時,則請求一直請求至同一pods服務,設置為balanced (默認設置)則請求會使用輪詢的方式至后端pods服務
nginx.ingress.kubernetes.io/session-cookie-name 屬性,自定義cookie名稱, 其默認設置為 INGRESSCOOKIE,但我們可自定義,如上文的route。
更多詳細的配置可以查看如下鏈接
https://kubernetes.github.io/ingress-nginx/examples/affinity/cookie/
總結
朋友后面是通過配置ingress這種方式解決問題,本文就作為一個記錄
到此這篇關于如何在K8S中實現會話保持的文章就介紹到這了,更多相關K8S會話保持內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解kubelet?創(chuàng)建pod流程代碼圖解及日志說明
這篇文章主要為大家介紹了詳解kubelet?創(chuàng)建pod流程代碼圖解及日志說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09
k8s如何使用NFS作為StorageClass提供動態(tài)存儲
本文主要介紹了k8s中的StorageClass,包括其定義、引入的原因、實現方式、定義方法以及回收策略對數據的影響等,首先,StorageClass是在K8s集群中創(chuàng)建用于動態(tài)PV的管理,可以鏈接至不同的后端存儲,對存儲的請求可以指向StorageClass2024-09-09

