【问题标题】:How to configure Traefik Sticy Session in Kubernetes如何在 Kubernetes 中配置 Traefik Sticy Session
【发布时间】:2021-08-26 15:00:23
【问题描述】:

我正在将我的应用程序从 docker 合并到 kubernetes

我目前正在使用minikube

我使用 traefik 作为我的反向代理,它是使用官方的 helm chart 安装在 kubernetes 中的,https://github.com/traefik/traefik-helm-chart 提供。

这是我的工作 docker-compose 文件:

version: "3.7"
services:
  myapp:
    image: nexus/my-app
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.myapp.rule=Host(`myapp.localhost`)"
      - "traefik.http.routers.myapp.entrypoints=web,web-secure"
      - "traefik.http.routers.myapp.tls=true"
      - "traefik.http.routers.myapp.service=myapp"
      - "traefik.http.middlewares.myapp.redirectscheme.scheme=https"
      - "traefik.http.middlewares.myapp.redirectscheme.permanent=true"
      - "traefik.http.services.myapp.loadbalancer.server.port=8080"
      - "traefik.http.services.myapp.loadbalancer.sticky=true"
      - "traefik.http.services.myapp.loadbalancer.sticky.cookie.name=StickyCookieMyApp"
      - "traefik.http.services.myapp.loadbalancer.sticky.cookie.secure=true"
      # enable the property below if your are running on https
      - "traefik.http.services.myapp.loadbalancer.server.scheme=https"      
    environment:
      - JAVA_OPTS=-Xmx512m -Xms256m
      - SPRING_PROFILES_ACTIVE=prod

在 Kubernetes 中,我有以下正在运行的配置:

# HTTPS ingress
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: myapp-ingress
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: websecure
    traefik.ingress.kubernetes.io/router.tls: "true"
spec:
  rules:
    - host: myapp.localhost
      http:
        paths:
          - backend:
              serviceName: myapp
              servicePort: 8080
  tls:
    - secretName: myapp-cert
---
# Ingresses
# this middleware is used as the following annotation:
# traefik.ingress.kubernetes.io/router.middlewares: default-redirect@kubernetescrd
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: redirect
spec:
  redirectScheme:
    scheme: https
    permanent: true
---
# http ingress for http->https redirection
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: myapp-redirect
  annotations:
    traefik.ingress.kubernetes.io/router.middlewares: default-redirect@kubernetescrd
    traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
  rules:
    - host: myapp.localhost
      http:
        paths:
          - backend:
              serviceName: myapp
              servicePort: 8080

如何将这三行代码转换为 Kubernetes 规范?

      - "traefik.http.services.myapp.loadbalancer.sticky=true"
      - "traefik.http.services.myapp.loadbalancer.sticky.cookie.name=StickyCookieMyApp"
      - "traefik.http.services.myapp.loadbalancer.sticky.cookie.secure=true"

【问题讨论】:

    标签: docker kubernetes load-balancing traefik traefik-ingress


    【解决方案1】:

    您将在您的服务上设置注释:

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        traefik.ingress.kubernetes.io/service.sticky.cookie: "true"
        traefik.ingress.kubernetes.io/service.sticky.cookie.name: cookie
        traefik.ingress.kubernetes.io/service.sticky.cookie.secure: "true"
    [...]
    

    请参阅文档:https://doc.traefik.io/traefik/routing/providers/kubernetes-ingress/

    【讨论】:

    • 感谢您的回复@SYN。我想知道为什么 traefik 团队没有在他们的文档中添加这样的简单示例。这会让生活更轻松。
    猜你喜欢
    • 2022-10-12
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2023-01-25
    • 2022-08-13
    相关资源
    最近更新 更多