Kubernetes 具有会话相关性的Google容器引擎负载平衡器问题

Kubernetes 具有会话相关性的Google容器引擎负载平衡器问题,kubernetes,google-compute-engine,google-kubernetes-engine,Kubernetes,Google Compute Engine,Google Kubernetes Engine,我在Google GKE Kubernetes集群上运行了3个Nginx吊舱。我使用Kubernetes服务和负载平衡器选项(TCP级别4)将这些POD公开给外部internet。使用SessionAffinity:ClientIP选项打开粘性会话 当我访问外部URL时,请求被转发到SessionAffinity配置中预期的同一个内部Nginx pod。但是,如果我让浏览器空闲大约3分钟,然后再次访问外部URL,则请求会转到另一个Nginx pod。为什么会这样?我是否可以在GKE负载平衡器中配

我在Google GKE Kubernetes集群上运行了3个Nginx吊舱。我使用Kubernetes服务和负载平衡器选项(TCP级别4)将这些POD公开给外部internet。使用SessionAffinity:ClientIP选项打开粘性会话

当我访问外部URL时,请求被转发到SessionAffinity配置中预期的同一个内部Nginx pod。但是,如果我让浏览器空闲大约3分钟,然后再次访问外部URL,则请求会转到另一个Nginx pod。为什么会这样?我是否可以在GKE负载平衡器中配置SessionAffinity到期或超时

我的Nginx Yaml

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 3
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80
我的外部负载平衡器服务yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: live
    spec:
      ports:
        - name: name2
          port: 80
          targetPort: 80
          nodePort: 31080
      selector:
        app: nginx
      type: LoadBalancer
      sessionAffinity: ClientIP

我猜使用的IP不是客户端的IP,而是节点平衡器节点的IP。我不知道GKE的情况,但我在CoreOS节点上遇到过这个问题。检查头部以查看客户端IP是否有效地被正确转发。正如我所说的,sessionAffinity属性可以工作大约3分钟。这表明负载平衡器至少在前3分钟内能够转发到正确的粘性吊舱。我怀疑Google网络负载平衡器在基于IP的粘性方面已经有些过时了。不幸的是,我还没有找到任何文档来备份它。你找到了吗?