首页 文章

GCE Kubernetes会话持久性

提问于
浏览
0

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

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

如果我在WordPress服务上使用 SessionAffinity: ClientIP ,则所有流量都会转到一个容器,其他流量将被忽略 . 这似乎是因为该服务正在看到LoadBalancer 's ip address rather than the Client' . 尽管在nginx反向代理和wordpress NodePort服务上都设置了 externalTrafficPolicy: Local .

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

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

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

1 回答

  • 1

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

    • 在您的pod中共享RWX卷,这将使会话文件可用于部署中的所有实例 . 除非您使用S3之类的内容进行wordpress上传,否则您可能已经为二进制文件做了类似的操作,就像我建议的会话文件一样 .
      使用Memcached或Redis作为会话存储的

    • 会话处理程序(这是我现在拥有的)

    • 你甚至可以将它们保存在MySQL中,与WP数据库相同,尽管我已经看到它可能会对性能产生重大影响 .

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

相关问题