會(huì)話保持(9)

前面的章節(jié)已經(jīng)實(shí)現(xiàn)了CI/CD,并且能成功登陸到管理后臺(tái),但整個(gè)流程中deployment的都是一個(gè)節(jié)點(diǎn),現(xiàn)在通過dashboard對(duì)TLH服務(wù)的deployment伸縮為兩個(gè)節(jié)點(diǎn)。

問題
  1. 登陸dashboard,擴(kuò)容


    擴(kuò)容
  2. 查看Pod的IP地址

     kubectl get pods -n tlh -o wide
    
    2.png
  3. 重新打開瀏覽器訪問,http://dev.tlh.com/tlh,輸入正確的用戶名和密碼發(fā)現(xiàn)有的時(shí)候能登陸,有的時(shí)候不行,查看ingress的日志,發(fā)現(xiàn)請(qǐng)求到達(dá)ingress之后轉(zhuǎn)發(fā)到的IP(pod)不一致:

    IP地址

    熟悉nginx負(fù)載均衡的同學(xué)很清楚這個(gè)是什么問題導(dǎo)致的,而出現(xiàn)該問題的原因在于,擴(kuò)容之后再ingress中會(huì)進(jìn)行負(fù)載均衡,每次請(qǐng)求可能會(huì)被轉(zhuǎn)發(fā)到上游服務(wù)的不同的pod中,而該pod中的TLH服務(wù)再校驗(yàn)cookie的時(shí)候,發(fā)現(xiàn)該用戶沒用登陸,所以就重新跳轉(zhuǎn)到登陸用戶,即ingress沒有保存住用戶登陸的會(huì)話,導(dǎo)致同一cookie也會(huì)被轉(zhuǎn)發(fā)到不同的pod中。

  4. 解決

    1. 修改ingress配置文件

       kind: Ingress
       metadata:
         name: tlh-ingress
         namespace: tlh
         annotations:
           kubernetes.io/ingress.class: "tlh-nginx-ingress"
           nginx.ingress.kubernetes.io/affinity: "cookie"          # 設(shè)置依賴的依據(jù),目前只能為這個(gè)值
           nginx.ingress.kubernetes.io/affinity-mode: "persistent" # 設(shè)置會(huì)話持久化,不進(jìn)行負(fù)載 
      
    2. 重新配置

       kubectl apply -f ingress.yaml -n tlh
      
  5. 重新登陸問題解決

總結(jié)
  1. 再使用負(fù)載均衡之后需要考慮會(huì)話保持的問題,解決這個(gè)問題的方式:
    1. 在ingress中保持會(huì)話
    2. 在服務(wù)端通過session共享的方式來處理,spring提供了spring-session的模塊可以很好的解決這個(gè)問題,通過服務(wù)端將session進(jìn)行持久化(如:存儲(chǔ)到redis中)
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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