在K8S中實(shí)現(xiàn)會(huì)話(huà)保持的兩種方案
前言
故事的起因是朋友所在的部門(mén)最近基于auth2實(shí)現(xiàn)單點(diǎn)登錄,他們?cè)跍y(cè)試環(huán)境單點(diǎn)登錄,運(yùn)行得好好的,但他們把單點(diǎn)登錄上到預(yù)發(fā)布環(huán)境,發(fā)現(xiàn)單點(diǎn)登錄不好使了。他們有部分系統(tǒng)是以授權(quán)碼式接入,發(fā)現(xiàn)第一次登錄拿到授權(quán)碼進(jìn)行換取token時(shí),會(huì)提示授權(quán)碼失效。而他們測(cè)試環(huán)境和預(yù)發(fā)布環(huán)境的代碼是一樣的。
后面朋友和我聊天,我就問(wèn)朋友兩套環(huán)境有存在什么不一樣的地方,朋友說(shuō)測(cè)試環(huán)境是單POD部署,而預(yù)發(fā)布環(huán)境是多POD部署。最后我還從朋友的口中得到一個(gè)信息,他們auth2是基于國(guó)內(nèi)開(kāi)源的sa-token進(jìn)行實(shí)現(xiàn),剛好我也玩過(guò)這個(gè)玩意兒,這玩意兒的授權(quán)碼是基于cookies進(jìn)行保持。我就跟朋友說(shuō)可能是因?yàn)槟悴渴鹆硕鄠€(gè)pod,pod的會(huì)話(huà)沒(méi)保持住。然后我就跟朋友提供以下方案
會(huì)話(huà)保持方案
方案一:通過(guò)service進(jìn)行配置
在service配置配置形如下內(nèi)容
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 # 會(huì)話(huà)保持3小時(shí) sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 10800
其中關(guān)鍵配置如下
sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 10800
通過(guò)指定sessionAffinity: ClientIP開(kāi)啟了session保持。當(dāng)設(shè)置了session保持之后,k8s會(huì)根據(jù)訪(fǎng)問(wèn)的ip來(lái)把請(qǐng)求轉(zhuǎn)發(fā)給他以前訪(fǎng)問(wèn)過(guò)的pod,這樣session就保持住了。其中timeoutSeconds指的是session保持的時(shí)間,這個(gè)時(shí)間默認(rèn)是10800秒,也就是三個(gè)小時(shí)。
不過(guò)朋友說(shuō)他配置了這個(gè)之后,貌似沒(méi)產(chǎn)生作用,因?yàn)榕笥阉麄儐吸c(diǎn)登錄是通過(guò)ingress進(jìn)行轉(zhuǎn)發(fā),于是就有了第二種方案
方案二:通過(guò)ingress配置會(huì)話(huà)保持
配置形如下
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
其中關(guān)鍵配置如下
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 屬性,啟用會(huì)話(huà)保持, 其值僅僅支持cookie。
nginx.ingress.kubernetes.io/affinity-mode 屬性,設(shè)置為persistent時(shí),則請(qǐng)求一直請(qǐng)求至同一pods服務(wù),設(shè)置為balanced (默認(rèn)設(shè)置)則請(qǐng)求會(huì)使用輪詢(xún)的方式至后端pods服務(wù)
nginx.ingress.kubernetes.io/session-cookie-name 屬性,自定義cookie名稱(chēng), 其默認(rèn)設(shè)置為 INGRESSCOOKIE,但我們可自定義,如上文的route。
更多詳細(xì)的配置可以查看如下鏈接
https://kubernetes.github.io/ingress-nginx/examples/affinity/cookie/
總結(jié)
朋友后面是通過(guò)配置ingress這種方式解決問(wèn)題,本文就作為一個(gè)記錄
到此這篇關(guān)于如何在K8S中實(shí)現(xiàn)會(huì)話(huà)保持的文章就介紹到這了,更多相關(guān)K8S會(huì)話(huà)保持內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Rancher部署并導(dǎo)入K8S集群的問(wèn)題
這篇文章主要介紹了關(guān)于Rancher部署并導(dǎo)入K8S集群的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12Kubernetes存儲(chǔ)系統(tǒng)數(shù)據(jù)持久化管理詳解
這篇文章主要為大家介紹了Kubernetes存儲(chǔ)系統(tǒng)數(shù)據(jù)持久化管理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11CentOS?8.2?k8s?基礎(chǔ)環(huán)境配置
這篇文章主要介紹了CentOS?8.2?k8s?基礎(chǔ)環(huán)境配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10詳解kubelet?創(chuàng)建pod流程代碼圖解及日志說(shuō)明
這篇文章主要為大家介紹了詳解kubelet?創(chuàng)建pod流程代碼圖解及日志說(shuō)明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09在A(yíng)WS-EC2中安裝Minikube集群的詳細(xì)過(guò)程
這篇文章主要介紹了在A(yíng)WS-EC2中安裝Minikube集群,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06云原生技術(shù)kubernetes調(diào)度單位pod的使用詳解
這篇文章主要介紹了云原生技術(shù)kubernetes調(diào)度單位pod的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用K8S,感興趣的朋友可以了解下2021-03-03k8s如何使用NFS作為StorageClass提供動(dòng)態(tài)存儲(chǔ)
本文主要介紹了k8s中的StorageClass,包括其定義、引入的原因、實(shí)現(xiàn)方式、定義方法以及回收策略對(duì)數(shù)據(jù)的影響等,首先,StorageClass是在K8s集群中創(chuàng)建用于動(dòng)態(tài)PV的管理,可以鏈接至不同的后端存儲(chǔ),對(duì)存儲(chǔ)的請(qǐng)求可以指向StorageClass2024-09-09