【问题标题】:sticky sessions kubernetes service with apache and ingress带有 apache 和 ingress 的粘性会话 kubernetes 服务
【发布时间】:2019-10-16 21:13:46
【问题描述】:

我有一个 k8s Apache 服务器,它使用 mod_jk 连接到不同的 kubernetes 服务。 mod_jk 在这里有点假,因为工作人员正在使用 k8s 服务 URL。我现在正在尝试基于 cookie 中的JESSIONID 实现粘性会话。我有 traefik 入口控制器,它将所有请求定向到 k8s Apache 服务。请求在 TLS 的入口级别终止。实现粘性会话的最佳方法是什么?

我尝试启用sessionAffinity: ClientIP,但客户端 IP 始终相同。它是入口控制器。

【问题讨论】:

  • 请点赞/接受答案,让社区知道它的用处,谢谢!

标签: kubernetes


【解决方案1】:

在注释标签中的 Kubernetes 入口对象中,您必须定义您将使用哪种类型的入口,因此在您的情况下:Traefik 入口控制器。请注意,Traefik 中的粘性会话是在带有注释的 Service 对象中定义的。我们将其定义为 JSESSIONID,而不是随机的 cookie 名称。

入口对象定义:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: traefik
  labels:
    app: session-affinity
  name: session-affinity
spec:
  tls:
  - host: <address>
    secretName:
  rules:
  - host: <address>
    http:
      paths:
      - path: /
        backend:
          serviceName: session-affinity
          servicePort: 8080

服务对象定义:

apiVersion: v1
kind: Service
metadata:
  name: session-affinity
  labels:
    app: session-affinity
  annotations:
    traefik.ingress.kubernetes.io/affinity: "true"
    traefik.ingress.kubernetes.io/session-cookie-name: "JSESSIONID"
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080

您可以在documentation找到更多信息。

【讨论】:

  • 是否可以在没有 Ingress 对象的情况下公开您发布的服务对象(即使用specs.ports.nodePort 而不是specs.ports.targetPort)?
猜你喜欢
  • 2011-08-26
  • 2020-02-25
  • 1970-01-01
  • 2022-06-12
  • 2021-07-16
  • 2010-12-24
  • 2020-08-17
  • 2020-04-03
  • 2020-08-10
相关资源
最近更新 更多