Сохранение сеанса с использованием Traefik на копиях Docker Swarm - PullRequest
0 голосов
/ 09 ноября 2018

Я пытался реализовать липкую сессию на dockers-swarm с traefik, но я не смог добиться сохранения сессии на двух репликах на одной машине. В моем docker-compose.yml я добавил ярлыки для traefik и также добавил loadbalancer. Ниже приведен мой docker-compose.yml, (хотя отступ здесь может показаться некорректным, но он корректен в реальном проекте)

version: '3'

   services:
      web:
        image: php:7.2.11-apache-stretch
        ports:
            - "8080:80"
        volumes:
            - ./code/:/var/www/html/hello/
       stdin_open: true
       tty: true
       deploy:
        mode: replicated
        replicas: 2
        restart_policy:
            condition: any
        update_config:
            delay: 2s
        labels:
            - "traefik.docker.network=docker-test_privnet"
            - "traefik.port=80"
            - "traefik.backend.loadbalancer.sticky=true"
            - "traefik.frontend.rule=PathPrefix:/hello"

    networks:
        - privnet
loadbalancer:
    image: traefik
    command: 
        --docker \
        --docker.swarmmode \
        --docker.watch \
        --web \
        --loglevel=DEBUG
    ports:
        - 80:80
        - 9090:8080
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    deploy:
        restart_policy:
            condition: any
        mode: replicated
        replicas: 1
        update_config:
            delay: 2s
        placement:
            constraints: [node.role == manager]

    networks:
        - privnet
networks:
    privnet:
        external: true

Я что-то упустил?

1 Ответ

0 голосов
/ 11 ноября 2018

Несколько вещей.

  1. .sticky является устаревшим в пользу traefik.backend.loadbalancer.stickiness=true
  2. Я не думаю, что вам нужно устанавливать сеть с traefik.docker.network, когда к этой услуге подключена только одна сеть.
  3. Убедитесь, что вы тестируете с помощью инструмента, который использует куки-файлы, и именно поэтому липкие сессии остаются липкими. При использовании curl обязательно используйте -c и -b, как в в этом примере .
  4. Я использовал образец приложения для голосования из моей тестовой настройки Swarm и добавил липкие сессии в службу «голосования», и она работала для меня на одном узле. Если вы используете многоузловый рой, вам понадобится LB перед несколькими ройными узлами, чтобы также включить закрепление.
...