Google Cloud Kubernetes-与Cloudflare的负载平衡器会话关联 背景
我有一个web应用程序,它部署到多个pod中。部署通过具有外部IP的kubernetes服务暴露于internet 通过Cloudflare向世界公开的外部IP:Google Cloud Kubernetes-与Cloudflare的负载平衡器会话关联 背景,kubernetes,google-cloud-platform,load-balancing,google-kubernetes-engine,Kubernetes,Google Cloud Platform,Load Balancing,Google Kubernetes Engine,我有一个web应用程序,它部署到多个pod中。部署通过具有外部IP的kubernetes服务暴露于internet 通过Cloudflare向世界公开的外部IP: Client ---> Cloudflare ---> k8 service ---> pod 此web应用程序需要使用粘性会话定义。因此,我用sessionAffinity:ClientIP修补了我的服务,如下所示: kubectl patch service MYSERVICE -p '{"spec":{"s
Client ---> Cloudflare ---> k8 service ---> pod
此web应用程序需要使用粘性会话定义。因此,我用sessionAffinity:ClientIP
修补了我的服务,如下所示:
kubectl patch service MYSERVICE -p '{"spec":{"sessionAffinity":"ClientIP"}}'
我在开发环境中检查了它,发现会话关联不能很好地工作
调查
我查找了粘性会话的问题。然后我发现Cloudflare调用者IP可以随时随机更改。这将把所有用户重定向到另一个pod——这正是粘性会话应该解决的问题
所以,问题是我的Loadbalancer服务根据Cloudflare IP重定向流量,并且它是随机的
可能的解决方案
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-test
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
spec:
rules:
- host: stickyingress.example.com
http:
paths:
- backend:
serviceName: http-svc # k8 service name
servicePort: 80 # k8 service port
path: /
为了使用它,您必须在Kubernetes集群上安装Nginx Ingress Controller。您可以按照相应的说明来执行安装说明。然后应用上述入口对象
您还可以阅读本文,以获得更多关于如何在Kubernetes中使用粘性会话的信息
如果您可以使用,也可以自由探索其他方法
希望有帮助