代码之家  ›  专栏  ›  技术社区  ›  Steve

GCE Kubernetes会话持久性

  •  2
  • Steve  · 技术社区  · 6 年前

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

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

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

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

    入口还执行TLS终止,我已经看到这会影响客户端的可见性,但我认为这个问题可以通过外部流量策略解决。

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

    1 回复  |  直到 6 年前
        1
  •  6
  •   Radek 'Goblin' Pieczonka    6 年前

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

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

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