我在开发环境中使用了具有以下配置的minibike进行粘性会话:
入口:
df.withColumn("is_red", when(col("type").equalTo("Red"), "Red")
.otherwise("not Red")
.withColumn("portion", col("value")/sum("value)
.over(Window.partitionBy(col"is_Red")))
.drop(is_Red)
服务:
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
现在我已经将我的项目部署到GKE粘性会话不再起作用了。我相信原因是在GKE中配置的全局负载均衡器与NGINX Ingress控制器没有会话关联。任何人都有运气接线吗?任何帮助,将不胜感激。我想建立会话亲和力:客户端浏览器>负载均衡器> Ingress>服务。实际会话位于服务后面的pod中。它是一个API网关(用Zuul构建)。
答案 0 :(得分:4)
GCE / GKE Ingress控制器中尚未提供会话亲和力。
在此期间和解决方法中,您可以直接使用GCE API来创建HTTP负载均衡器。请注意,您不能在同一群集中同时使用Ingress。
spec.ports[*].nodePort
中设置端口的值,否则将分配随机的答案 1 :(得分:2)
基于此:https://github.com/kubernetes/ingress-gce/blob/master/docs/annotations.md 没有可用的注释,该注释可能会影响通过Ingress创建而创建的Google Cloud LoadBalancer(GCLB)的会话相似性设置。因此:
关于#3,简单的解决方案:
更复杂的解决方案(但其豆荚少于节点):
注意:上面的抗亲和力版本已于2018年7月24日在运行COS的2节点群集(默认GKE VM映像)上使用1.10.4-gke.2 kubernetes版本进行了测试
答案 2 :(得分:0)
好消息!最后,他们支持将这些调整作为beta功能!
从GKE版本1.11.3-gke.18开始,您可以使用Ingress配置后端服务的以下属性:
后端服务的配置信息保存在名为BackendConfig的自定义资源中,您可以将其“附加”到Kubernetes服务。
连同其他可爱的beta功能(例如CDN,Armor等...),您可以在此处找到操作指南: https://cloud.google.com/kubernetes-engine/docs/how-to/configure-backend-service
答案 3 :(得分:0)
我正在尝试在版本1.11.6-gke.6(最新版本)上使用的gke教程。 粘性不存在...唯一有效的选择是在服务上使用了externalTrafficPolicy“:” Local“之后。
spec:
type: NodePort
externalTrafficPolicy: Local
我向google公开了同样的缺陷,他们接受了它,但没有承诺eta。 https://issuetracker.google.com/issues/124064870
答案 4 :(得分:0)
对于入口负载均衡器的BackendConfig,可以在这里找到文档: https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-features
类型生成的cookie的示例片段是:
spec:
timeoutSec: 1800
connectionDraining:
drainingTimeoutSec: 1800
sessionAffinity:
affinityType: "GENERATED_COOKIE"
affinityCookieTtlSec: 1800