kubernetes – GKE负载均衡器 – 入口 – 服务 – 会话亲和力(粘性会话)

我在开发环境中使用了具有以下配置的minibike的粘性会话:

入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gl-ingress
  annotations:
    nginx.ingress.kubernetes.io/affinity: cookie
    kubernetes.io/ingress.class: "gce"
    kubernetes.io/ingress.global-static-ip-name: "projects/oceanic-isotope-199421/global/addresses/web-static-ip"
spec:
  backend:
    serviceName: gl-ui-service
    servicePort: 80
  rules:
  - http:
      paths:
      - path: /api/*
        backend:
          serviceName: gl-api-service
          servicePort: 8080

服务:

apiVersion: v1
kind: Service
metadata:
  name: gl-api-service
  labels:
    app: gl-api
  annotations:
    ingress.kubernetes.io/affinity: 'cookie'
spec:
  type: NodePort
  ports:
  - port: 8080
    protocol: TCP
  selector:
    app: gl-api

现在我已将我的项目部署到GKE粘性会话不再起作用.我相信原因是在GKE中配置的全局负载均衡器与NGINX Ingress控制器没有会话关联.任何人都有运气接线吗?任何帮助,将不胜感激.我想建立会话亲和力:客户端浏览器>负载均衡器> Ingress>服务.实际会话位于服务后面的pod中.它是一个API网关(用Zuul构建).

最佳答案
GCE / GKE Ingress控制器中尚未提供会话亲和性.

在此期间和解决方法中,您可以直接使用GCE API来创建HTTP负载均衡器.请注意,您不能在同一群集中同时使用Ingress.

>使用NodePort进行Kubernetes服务.在spec.ports [*].nodePort中设置端口的值,否则将分配一个随机的端口
> Disable kube-proxy SNAT load balancing
>从GCE API创建Load Balancer,启用cookie session affinity.作为后端使用1的端口.

转载注明原文:kubernetes – GKE负载均衡器 – 入口 – 服务 – 会话亲和力(粘性会话) - 代码日志