带有Apache和Ingress的粘性会话kubernetes服务

时间:2019-10-16 21:13:46

标签: kubernetes service pod

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

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

1 个答案:

答案 0 :(得分: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中找到更多信息。