2

我在 GCE Kubernetes 上运行一个 wordpress / woocommerce 站点,并且由于会话持久性而无法扩展。

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

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

我还尝试使用 wordpress 服务作为默认后端,我设法让流量流向所有 pod,但失去了会话亲和性。

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

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

4

1 回答 1

6

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

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

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

于 2018-02-12T20:30:33.147 回答