GCE Kubernetes会话持久性

GCE Kubernetes会话持久性,kubernetes,google-compute-engine,kubernetes-ingress,Kubernetes,Google Compute Engine,Kubernetes Ingress,我在GCE Kubernetes上运行wordpress/woocommerce网站,由于会话持久性,在扩展方面遇到了困难 LoadBalancer(GCE入口)将所有流量发送到反向代理,然后反向代理将流量发送到我设置的不同服务,其中一个是wordpress 如果我在WordPress服务上使用SessionAffinity:ClientIP,所有的流量都会进入一个pod,其他的都会被忽略。这似乎是因为服务看到的是负载平衡器的ip地址,而不是客户端的ip地址。尽管nginx反向代理和wordpr

我在GCE Kubernetes上运行wordpress/woocommerce网站,由于会话持久性,在扩展方面遇到了困难

LoadBalancer(GCE入口)将所有流量发送到反向代理,然后反向代理将流量发送到我设置的不同服务,其中一个是wordpress

如果我在WordPress服务上使用SessionAffinity:ClientIP,所有的流量都会进入一个pod,其他的都会被忽略。这似乎是因为服务看到的是负载平衡器的ip地址,而不是客户端的ip地址。尽管nginx反向代理和wordpress节点端口服务都设置了
externalTrafficPolicy:Local

我还尝试使用wordpress服务作为默认后端,我成功地获得了访问所有POD的流量,但丢失了会话亲和力

入口还执行TLS终止,我已经看到这会影响ClientIP的可见性,但我认为这个问题是通过外部通信策略解决的


我们也在使用Cloudflare,我想知道这是否会有效果。但是我们正在使用ngx_http_realip_模块来尝试获取正确的客户端IP地址

我在集群中部署的一个PHP服务中遇到了类似的问题。会话是邪恶的:)但有时你确实需要使用它们。您可以通过几种方式在PHP中对会话数据进行集群,这样就不需要在loadbalancer上使用粘性会话

  • pod中的共享RWX卷将使会话文件对部署中的所有实例可用。除非您在wordpress上传中使用类似S3的东西,否则您可能已经在二进制文件中使用了类似的东西,正如我建议的会话文件
  • 使用Memcached或Redis作为会话存储的会话处理程序(这就是我现在拥有的)
  • 您甚至可以将它们保存在MySQL中,就像WP数据库一样,尽管我已经看到它会对性能产生重大影响

您可以找到简单的mamcache示例。如果您需要集群存储,可以研究Redis集群,或者像我一样,研究Couchbase,我在集群中部署的一个PHP服务中遇到了类似的问题。会话是邪恶的:)但有时你确实需要使用它们。您可以通过几种方式在PHP中对会话数据进行集群,这样就不需要在loadbalancer上使用粘性会话

  • pod中的共享RWX卷将使会话文件对部署中的所有实例可用。除非您在wordpress上传中使用类似S3的东西,否则您可能已经在二进制文件中使用了类似的东西,正如我建议的会话文件
  • 使用Memcached或Redis作为会话存储的会话处理程序(这就是我现在拥有的)
  • 您甚至可以将它们保存在MySQL中,就像WP数据库一样,尽管我已经看到它会对性能产生重大影响

您可以找到简单的mamcache示例。如果您需要群集存储,您可以查看Redis群集,或者像我一样查看Couchbase

谢谢Radek,我将从选项2开始。似乎是最简单的实现方式,没有将会话写入db的缺点。感谢Radek,我将从选项2开始。似乎实现起来最简单,没有将会话写入数据库的缺点。