不使用会话保持
前提条件
创建一个nginx工作负载,并确保工作负载的实例个数大于1,工作负载不需要其他的额外特殊配置。
创建一个ClusterIP类型的服务(Service)并关联到上述nginx工作负载,注意Session Affinity不需要设置,保持默认值即可。
测试验证
发起服务调用,在集群节点上执行这个命令发起对服务的100次调用 > for i in {1..100};do curl 10.96.116.221:80;done;
上述curl命令中的IP和端口来自如下地方:
观察工作负载日志,查看Pod实例的日志输出。
结论:服务请求会随机的转发到任一个Pod实例。
集群内请求会话保持
1、前提条件
创建一个nginx工作负载,同上。
创建一个ClusterIP类型的服务(Service)并关联到上述nginx工作负载,注意需要展开高级设置,并设置Session Affinity为客户端IP。
2、测试验证
发起服务调用,同上。观察工作负载日志,查看Pod实例的日志输出。
结论:服务请求会全部转发到某一个Pod实例,进行会话保持。
集群外NodePort访问请求会话保持
1、前提条件
创建一个nginx工作负载,同上。创建一个NodePort类型的服务(Service)并关联到上述nginx工作负载,指定一个合法的主机端口,注意需要展开高级设置,并设置Session Affinity为客户端IP。
2、测试验证
发起服务调用;在集群外执行这个命令发起对服务的100次调用 > for i in {1..100};do curl
10.142.232.160:30080;done;
上述curl命令中的IP可以是集群的vip或者集群任意节点IP,端口是服务(Service)中指定的主机端口。
观察工作负载日志,查看Pod实例的日志输出。
结论:集群外的请求会全部转发到某一个Pod实例,进行会话保持。
集群外Ingress访问请求会话保持
1、前提条件
创建一个nginx工作负载,同上
创建一个ClusterIP类型的服务(Service)并关联到上述nginx工作负载,注意Session Affinity不需要设置,保持默认值即可。
确保当前命名空间已经绑定到一个负载均衡器:
创建一个生产路由(Ingress)并关联到上述服务(Service)。
添加本地hosts映射:# ip为Nginx-Ingress-Controller的访问地址 # 域名为创建Ingress时填入的域名 10.142.232.160 nginx.ccse.io
2、发起服务调用
在浏览器中多次发起对服务的请求 > http://nginx.ccse.io:10080/
这里没法通过curl来测试验证,因为curl请求时没法保持Cookie。
3、观察工作负载日志
结论:浏览器中的请求会全部转发到某一个Pod实例,进行会话保持。
集群外TCP/UDP访问
集群外通过TCP/UDP没法进行会话保持。