我在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地址。
答案 0 :(得分:1)
我在群集中部署的某个PHP服务中遇到了类似的问题。会话是邪恶的:)但有时你需要使用它们。您可以通过几种方式在PHP中对会话数据进行聚类,这样您就不需要在loadbalancer上使用粘性会话。
您可以找到简单的mamcache示例here。如果您需要集群存储,可以查看Redis集群,或者像我一样,查看Couchbase