【发布时间】:2019-10-20 17:41:22
【问题描述】:
背景
我有一个部署到多个 pod 部署的 Web 应用程序。部署通过具有外部 IP 的 kubernetes 服务暴露于 Internet。
通过 Cloudflare 向世界公开的外部 IP:
Client ---> Cloudflare ---> k8 service ---> pod
需要使用粘性会话定义此 Web 应用程序。所以我用sessionAffinity: ClientIP 修补了我的服务,如下所示:
kubectl patch service MYSERVICE -p '{"spec":{"sessionAffinity":"ClientIP"}}'
我在开发环境上检查过,发现会话亲和性不好。
调查
我寻找粘性会话的问题。然后我发现 Cloudflare 调用方 IP 可以不时更改 - 随机更改。这会将所有用户重定向到另一个 pod - 这正是 Sticky Session 应该解决的问题。
所以,问题在于我的 Loadbalancer 服务根据 Cloudflare IP 重定向流量并且是随机的。
可能的解决方案
- 我发现可以根据 曲奇饼。创立了这个source。但它使用高级 Kubernetes 组件,例如 BackendService 和 Ingress,需要 定义明确。你有更简单的解决方案吗?
- Cloudflare 将真实客户端 IP 附加到标头中的请求。这是否可以定义负载平衡以查看此标头并根据其值重定向流量?
【问题讨论】:
标签: kubernetes google-cloud-platform load-balancing google-kubernetes-engine