GCE Kubernetes会话持久性

时间:2018-02-12 15:41:03

标签: kubernetes google-compute-engine kubernetes-ingress

我在GCE Kubernetes上运行wordpress / woocommerce网站,因为会话持久性而难以扩展。

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

如果我在WordPress服务上使用SessionAffinity: ClientIP,则所有流量都会转到一个容器中,其他流量将被忽略。这似乎是因为服务正在查看LoadBalancer的IP地址而不是客户端的IP地址。尽管nginx反向代理和wordpress NodePort服务都设置了externalTrafficPolicy: Local

我也尝试使用wordpress服务作为默认后端,我设法让流量转到所有pod但丢失了会话亲和力。

Ingress还会执行TLS终止,我看到它可以影响ClientIP的可见性,但我认为该问题已通过外部流量策略解决。

我们也在使用Cloudflare,我想知道这是否会产生影响。但我们正在使用ngx_http_realip_module来尝试获取正确的客户端IP地址。

1 个答案:

答案 0 :(得分:1)

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

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

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