前面的章節(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)。
問題
-
登陸dashboard,擴(kuò)容
擴(kuò)容 -
查看Pod的IP地址
kubectl get pods -n tlh -o wide2.png -
重新打開瀏覽器訪問,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中。 -
-
修改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ù)載 -
重新配置
kubectl apply -f ingress.yaml -n tlh
-
重新登陸問題解決
總結(jié)
- 再使用負(fù)載均衡之后需要考慮會(huì)話保持的問題,解決這個(gè)問題的方式:
- 在ingress中保持會(huì)話
- 在服務(wù)端通過session共享的方式來處理,spring提供了spring-session的模塊可以很好的解決這個(gè)問題,通過服務(wù)端將session進(jìn)行持久化(如:存儲(chǔ)到redis中)


