💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] K8S的Service可以设置会话亲和,通过`spec.sessionAffinity`字段,如下: ``` apiVersion: v1 kind: Service metadata: ... spec: ... sessionAffinity: ClientIP # None or ClientIP ``` 目前只能通过客户端IP来保持会话亲和,默认时间为10080秒(3小时)。即如果客户端client1在A时刻被转发到了pod1(`client1 -> pod1`),那么这条转发记录会保存三个小时。如果A+1时刻有client1的包到达,则根据记录会把这个包转发pod1,则该记录从A+1时刻重新计时三小时;如果从A+1时刻起三个小时内没有client1的数据包到达,A+4时刻这条记录将会被删掉。 Service的会话保持使用的iptables的recent模块,在iptables中可以看到如下的规则: ``` $ iptables -t nat -nL KUBE-SVC-XCAGX7RHRFTW6HB5 Chain KUBE-SVC-XCAGX7RHRFTW6HB5 (2 references) target prot opt source destination KUBE-SEP-JTNZFRZJT467BX36 all -- 0.0.0.0/0 0.0.0.0/0 recent: CHECK seconds: 10800 reap name: KUBE-SEP-JTNZFRZJT467BX36 side: source mask: 255.255.255.255 KUBE-SEP-2CUHEM7IPAUR2J7O all -- 0.0.0.0/0 0.0.0.0/0 recent: CHECK seconds: 10800 reap name: KUBE-SEP-2CUHEM7IPAUR2J7O side: source mask: 255.255.255.255 KUBE-SEP-JTNZFRZJT467BX36 all -- 0.0.0.0/0 0.0.0.0/0 statistic mode random probability 0.50000000000 KUBE-SEP-2CUHEM7IPAUR2J7O all -- 0.0.0.0/0 0.0.0.0/0 ``` 一开始以为是这条记录是持久化在conntrack中,经过实验发现其实不是。其实想想也是,如果持久化在conntrack中,会造成源端口的浪费。 ### **参考** * https://blog.csdn.net/fly910905/article/details/103808783