Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google Cloud Kubernetes-与Cloudflare的负载平衡器会话关联 背景_Kubernetes_Google Cloud Platform_Load Balancing_Google Kubernetes Engine - Fatal编程技术网

Google Cloud Kubernetes-与Cloudflare的负载平衡器会话关联 背景

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

我有一个web应用程序,它部署到多个pod中。部署通过具有外部IP的kubernetes服务暴露于internet

通过Cloudflare向世界公开的外部IP:

Client ---> Cloudflare ---> k8 service ---> pod
此web应用程序需要使用粘性会话定义。因此,我用
sessionAffinity:ClientIP
修补了我的服务,如下所示:

kubectl patch service MYSERVICE  -p '{"spec":{"sessionAffinity":"ClientIP"}}'
我在开发环境中检查了它,发现会话关联不能很好地工作

调查 我查找了粘性会话的问题。然后我发现Cloudflare调用者IP可以随时随机更改。这将把所有用户重定向到另一个pod——这正是粘性会话应该解决的问题

所以,问题是我的Loadbalancer服务根据Cloudflare IP重定向流量,并且它是随机的

可能的解决方案
  • 我发现可以根据 曲奇创建了这个。但它使用的是先进的库伯内特 需要更新的组件,如后端服务和入口 定义明确。你有更简单的解决方案吗
  • Cloudflare将真实客户端IP附加到标头中的请求。是否可以定义LoadBalancement来查看此标头并根据其值重定向流量
  • 下面是入口资源的官方示例,这是最简单的使用方法

    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中使用粘性会话的信息

    如果您可以使用,也可以自由探索其他方法

    希望有帮助