데비안 9의 Docker Swarm (CE)과의 끈적한 세션

소개

Docker Swarm은 개별 서버를 컴퓨터 클러스터로 변환합니다. 확장 성, 고 가용성 및로드 밸런싱을 용이하게합니다. Swarm로드 밸런서는 라운드 로빈로드 밸런싱 전략을 구현하며, 이는 여러 인스턴스로 고 가용성 설정을 허용하기 위해 일정 형식의 고정 세션이 필요한 (레거시) 상태 저장 애플리케이션의 올바른 기능을 방해 할 수 있습니다. Docker Enterprise Edition은 Layer-7 고정 세션을 지원하지만이 안내서에서는 Docker의 무료 (CE) 버전에 중점을 둘 것입니다. 고정 세션을 구현하기 위해 Traefik을 사용합니다.

전제 조건

  • 프라이빗 네트워킹이 활성화 된 동일한 서브넷에서 새로 배포 및 업데이트 된 데비안 9 인스턴스
  • 이러한 인스턴스에 설치된 Docker CE
  • 인스턴스는 동일한 Swarm의 일부 여야하며 개인 네트워크를 통해 서로 통신 할 수 있어야합니다
  • Docker 및 Docker Swarm에 대한 사전 지식
  • sudo권한 이있는 루트가 아닌 사용자 (선택 사항이지만 루트 사용자를 사용하지 않는 것이 좋습니다)

이 자습서에서는 프라이빗 IP 주소 192.168.0.100와 와 함께 두 개의 Vultr 인스턴스를 사용합니다 192.168.0.101. 둘 다 Docker Swarm 관리자 노드입니다 (생산에는 이상적이지 않지만이 자습서에는 충분합니다).

우와 미

이 학습서는 jwilder/whoami도커 이미지를 데모 애플리케이션으로 사용합니다 . 이 간단한 컨테이너는 응답 컨테이너의 이름으로 REST 호출에 응답하므로 고정 세션이 작동하는지 테스트하기가 매우 쉽습니다. 이 이미지는 분명히 데모 목적으로 만 사용되며 사용자의 응용 프로그램 이미지로 교체해야합니다.

whoami 서비스는 다음과 같이 구성됩니다.

sudo docker network create whoaminet -d overlay
sudo docker service create --name whoami-service --mode global --network whoaminet --publish "80:8000"  jwilder/whoami
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

이후 curlwhoam REST 엔드 포인트 http://192.168.0.100/가 작동하면 Docker Swarm의 라운드 로빈로드 밸런싱을 볼 수 있습니다.

curl http://192.168.0.100
I'm a6a8c9294fc3
curl http://192.168.0.100
I'm ae9d1763b4ad
curl http://192.168.0.100
I'm a6a8c9294fc3
curl http://192.168.0.100
I'm ae9d1763b4ad
curl http://192.168.0.100
I'm a6a8c9294fc3

Chrome 또는 Firefox와 같은 최신 브라우저는 연결을 유지하도록 설계되었으므로 Docker Swarm로드 밸런서는 새로 연결할 때마다 다른 컨테이너로만 전환됩니다 . 브라우저에서이를 테스트하려면 연결이 닫힐 때까지 30 초 이상 기다려야 새로 고칠 수 있습니다.

Traefik 설정

Traefik은 기본적으로 Docker Swarm을 지원하며 컨테이너를 즉시 감지 및 등록 또는 등록 취소 할 수 있으며 내부 오버레이 네트워크를 통해 애플리케이션과 통신합니다. Traefik은 요청 처리를 시작하기 전에 애플리케이션에 대한 정보가 필요합니다. 이 정보는 Swarm 서비스에 레이블을 추가하여 Traefik에 제공됩니다.

sudo docker service update --label-add "traefik.docker.network=whoaminet" --label-add "traefik.port=8000" --label-add "traefik.frontend.rule=PathPrefix:/" --label-add "traefik.backend.loadbalancer.stickiness=true" whoami-service

다음 목록은 각 레이블의 의미를 설명합니다.

  • traefik.docker.network : Traefik이 서비스와 통신하는 Docker 오버레이 네트워크
  • traefik.port : 서비스가 청취중인 포트 (게시 된 포트가 아니라 내부적으로 노출 된 포트 임)
  • traefik.frontend.rule: PathPrefix:/ 컨텍스트 루트 ' /'를이 서비스에 바인딩합니다 .
  • traefik.backend.loadbalancer.stickiness :이 서비스에 고정 세션을 사용합니다.

가 지금 whoami-service필요한 라벨로 구성되어, 우리는 떼에 Traefik 서비스를 추가 할 수 있습니다 :

sudo docker service create --name traefik -p8080:80 -p9090:8080 --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock --mode=global --constraint 'node.role == manager' --network whoaminet traefik --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG

이 명령은 다음 목록과 같이 한 번에 많은 작업을 수행합니다.

  • --name traefik : 새로운 Docker 서비스 이름은 Traefik입니다
  • -p8080:80: whoami 서비스에서 포트 가 이미 사용 중이므로 Traefik의 포트 대 포트 80를 게시 합니다.808080
  • -p9090:8080 : Traefik의 자체 웹 인터페이스를 포트에 게시 9090
  • --mount ... : Traefik이 호스트의 Docker 런타임에 액세스 할 수 있도록 Docker Socket을 컨테이너에 마운트합니다.
  • --global : 고 가용성을 위해 각 관리자 노드에 Traefik 컨테이너가 필요합니다.
  • --constraint 'node.role == manager': 작업자 노드는 Traefik에 필요한 정보를 제공 할 수 없으므로 관리자 노드에서만 Traefik을 실행하려고합니다. 예를 들어 docker service ls작업자 노드에서 작동하지 않으므로 Traefik은 실행중인 서비스를 찾을 수조차 없습니다.
  • --network whoaminet: Traefik을와 동일한 네트워크에 whoami-service연결하십시오. 그렇지 않으면 연결할 수 없습니다. 우리는 이전에 Traefik에게 traefik.docker.network라벨 이있는이 네트워크를 통해 서비스에 연결하라고 했습니다
  • traefik : 도커에게이 서비스에 최신 Traefik 도커 이미지를 사용하도록 지시하십시오.
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: Docker swarm 모드에서 실행할 수 있도록 명령 행 인수가 Traefik으로 직접 전달되었습니다. DEBUG여기서는 선택 사항이지만 설정 중에는이 튜토리얼에서 흥미 롭습니다.

남은 일은 데비안 방화벽에서 필요한 포트를 여는 것입니다.

sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 9090 -j ACCEPT

작동 원리

Traefik이 시작 되 자마자 Traefik이 두 whoami컨테이너를 발견 한 로그를 볼 수 있습니다 . 또한 고정 세션을 처리하는 데 사용할 쿠키 이름을 출력합니다.

time="2018-11-25T13:17:30Z" level=debug msg="Configuration received from provider docker: {\"backends\":{\"backend-whoami-service\":{\"servers\":{\"server-whoami-service-1-a179b2e38a607b1127e5537c2e614b05\":{\"url\":\"http://10.0.0.5:8000\",\"weight\":1},\"server-whoami-service-2-df8a622478a5a709fcb23c50e689b5b6\":{\"url\":\"http://10.0.0.4:8000\",\"weight\":1}},\"loadBalancer\":{\"method\":\"wrr\",\"stickiness\":{}}}},\"frontends\":{\"frontend-PathPrefix-0\":{\"entryPoints\":[\"http\"],\"backend\":\"backend-whoami-service\",\"routes\":{\"route-frontend-PathPrefix-0\":{\"rule\":\"PathPrefix:/\"}},\"passHostHeader\":true,\"priority\":0,\"basicAuth\":null}}}"
time="2018-11-25T13:17:30Z" level=debug msg="Wiring frontend frontend-PathPrefix-0 to entryPoint http"
time="2018-11-25T13:17:30Z" level=debug msg="Creating backend backend-whoami-service"
time="2018-11-25T13:17:30Z" level=debug msg="Adding TLSClientHeaders middleware for frontend frontend-PathPrefix-0"
time="2018-11-25T13:17:30Z" level=debug msg="Creating load-balancer wrr"
time="2018-11-25T13:17:30Z" level=debug msg="Sticky session with cookie _a49bc"
time="2018-11-25T13:17:30Z" level=debug msg="Creating server server-whoami-service-1-a179b2e38a607b1127e5537c2e614b05 at http://10.0.0.5:8000 with weight 1"
time="2018-11-25T13:17:30Z" level=debug msg="Creating server server-whoami-service-2-df8a622478a5a709fcb23c50e689b5b6 at http://10.0.0.4:8000 with weight 1"
time="2018-11-25T13:17:30Z" level=debug msg="Creating route route-frontend-PathPrefix-0 PathPrefix:/"
time="2018-11-25T13:17:30Z" level=info msg="Server configuration reloaded on :80"
time="2018-11-25T13:17:30Z" level=info msg="Server configuration reloaded on :8080"

우리가 말을 걸면 http://192.168.0.100:8080새로운 쿠키 _a49bc가 설정되어 있음 을 알 수 있습니다 .

curl -v http://192.168.0.100:8080
* About to connect() to 192.168.0.100 port 8080 (#0)
*   Trying 192.168.0.100...
* Connected to 192.168.0.100 (192.168.0.100) port 8080 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.0.100:8080
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 17
< Content-Type: text/plain; charset=utf-8
< Date: Sun, 25 Nov 2018 13:18:40 GMT
< Set-Cookie: _a49bc=http://10.0.0.5:8000; Path=/
<
I'm a6a8c9294fc3
* Connection #0 to host 192.168.0.100 left intact

후속 전화에서이 쿠키를 Traefik으로 보내면 항상 동일한 컨테이너로 전달됩니다.

curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3

쿠키에는 Traefik이 요청을 보내야하는 컨테이너의 내부 IP 주소 만 포함됩니다. 쿠키 값으로 변경 http://10.0.0.4:8000하면 요청이 다른 컨테이너로 효과적으로 전달됩니다. 쿠키를 Traefik으로 다시 보내지 않으면 고정 세션이 작동하지 않고 응용 프로그램 컨테이너와 Traefik 컨테이너간에 요청이 균형을 이룹니다.

이것이 데비안 9의 Docker CE에서 레이어 7 고정 세션을 설정하는 데 필요한 전부입니다.



Leave a Comment

Alpine Linux 3.9.0에서 Docker Swarm 생성

Alpine Linux 3.9.0에서 Docker Swarm 생성

소개이 안내서는 여러 개의 Alpine Linux 3.9.0 서버 및 Portainer를 사용하여 Docker 스웜을 생성 및 구성하는 방법을 보여줍니다. 그쪽으로 알아주십시오

RancherOS에 Rancher 서버 설치

RancherOS에 Rancher 서버 설치

RancherOS는 시스템 서비스를 실행하기 위해 시스템 Docker 데몬을 PID 0으로 실행하는 매우 가벼운 운영 체제 (약 60MB)입니다.

Docker-compose를 사용하여 PHP 응용 프로그램 배포

Docker-compose를 사용하여 PHP 응용 프로그램 배포

PHP 응용 프로그램은 일반적으로 웹 서버, 관계형 데이터베이스 시스템 및 언어 인터프리터 자체로 구성됩니다. 이 튜토리얼에서 우리는 활용할 것입니다

Ubuntu 18.04에 Docker CE 설치

Ubuntu 18.04에 Docker CE 설치

소개 Docker는 컨테이너로 실행되는 프로그램을 배포 할 수있는 응용 프로그램입니다. 인기있는 Go 프로그래밍 언어로 작성되었습니다.

Ubuntu 14.04에 Docker 설치

Ubuntu 14.04에 Docker 설치

다른 시스템을 사용하십니까? Docker는 컨테이너로 실행되는 프로그램을 배포 할 수있는 응용 프로그램입니다. 인기있는 Go 프로그램에서 작성되었습니다.

Docker를 사용하여 Node.js 애플리케이션 배포

Docker를 사용하여 Node.js 애플리케이션 배포

이 기사에서는 Docker 컨테이너 내에 Node 응용 프로그램을 배포하는 방법을 보여줍니다. 참고 :이 튜토리얼은 Docker가 설치되어 있고 읽은 것으로 가정합니다.

CentOS 7에 Harbor를 설치하는 방법

CentOS 7에 Harbor를 설치하는 방법

Harbor는 Docker 이미지를 저장하고 배포하는 오픈 소스 엔터프라이즈 급 레지스트리 서버입니다. 하버, 오픈 소스 Docker Distribution b 확장

Ubuntu 14.04에서 LXC 컨테이너를 안전하게 배포 및 관리

Ubuntu 14.04에서 LXC 컨테이너를 안전하게 배포 및 관리

LXC 컨테이너 (Linux 컨테이너)는 단일 호스트에서 여러 개의 격리 된 Linux 시스템을 실행하는 데 사용할 수있는 Linux의 운영 체제 기능입니다. 그

CentOS 7에서 Kubernetes 시작하기

CentOS 7에서 Kubernetes 시작하기

Kubernetes는 서버 클러스터 전체에서 컨테이너화 된 애플리케이션을 관리하기 위해 Google에서 개발 한 오픈 소스 플랫폼입니다. 그것은 10 년을 기반으로하고

우분투 16.04에 Rancher 설치

우분투 16.04에 Rancher 설치

다른 시스템을 사용하십니까? 소개 Rancher는 컨테이너를 실행하고 개인 컨테이너 서비스를 구축하기위한 오픈 소스 플랫폼입니다. 목장주 기지

CentOS 7에서 Kubeadm으로 Kubernetes 배포

CentOS 7에서 Kubeadm으로 Kubernetes 배포

개요이 기사는 Kubernetes 클러스터를 kubeadm과 함께 시작하고 실행하는 데 도움을주기 위해 작성되었습니다. 이 가이드는 두 대의 서버를 배포합니다.

CoreOS에 docker-compose 설치

CoreOS에 docker-compose 설치

이 기사에서는 CoreOS에 docker-compose를 설치하는 방법에 대해 설명합니다. CoreOS에서는 / usr / 폴더를 변경할 수 없으므로 표준 / usr / local / bin 경로를 사용할 수 없습니다.

CentOS 7에 Rancher 설치

CentOS 7에 Rancher 설치

다른 시스템을 사용하십니까? 소개 Rancher는 컨테이너를 실행하고 개인 컨테이너 서비스를 구축하기위한 오픈 소스 플랫폼입니다. 목장주 기지

CentOS 7에 Docker 설치

CentOS 7에 Docker 설치

다른 시스템을 사용하십니까? Docker는 가상 컨테이너 내에 소프트웨어를 배포 할 수있는 응용 프로그램입니다. Go 프로그램에서 작성되었습니다.

CentOS 7에서 Docker Swarm (CE)을 사용한 고정 세션

CentOS 7에서 Docker Swarm (CE)을 사용한 고정 세션

다른 시스템을 사용하십니까? Docker Swarm은 개별 서버를 컴퓨터 클러스터로 전환하여 확장 및 고 가용성을 용이하게합니다.

Docker 사용 방법 : 첫 번째 Docker 컨테이너 만들기

Docker 사용 방법 : 첫 번째 Docker 컨테이너 만들기

이 튜토리얼은 Docker 시작의 기본 사항을 설명합니다. Docker가 이미 설치되어 있다고 가정합니다. 이 튜토리얼의 단계는

Docker를 사용한로드 밸런싱

Docker를 사용한로드 밸런싱

웹 응용 프로그램을 실행할 때 일반적으로 멀티 스레딩을 사용하도록 소프트웨어를 변환하지 않고도 리소스를 최대한 활용하려고합니다.

CoreOS에서 고유 한 Docker 레지스트리 설정

CoreOS에서 고유 한 Docker 레지스트리 설정

우리는 여러 시스템에서 애플리케이션 컨테이너를 생성, 관리 및 배포 할 수있는 플랫폼 인 Docker를 알고 있습니다. Docker Inc.는 서비스를 제공합니다

Docker를 사용하여 CentOS 7에서 SQL Server 2017 (MS-SQL) 시작

Docker를 사용하여 CentOS 7에서 SQL Server 2017 (MS-SQL) 시작

전제 조건 Docker 엔진 1.8 이상. 최소 4GB의 디스크 공간. 최소 4GB의 RAM. 1 단계. Docker 설치 SQL-Server를 설치하려면 Docker mus

AI가 랜섬웨어 공격의 증가와 싸울 수 있습니까?

AI가 랜섬웨어 공격의 증가와 싸울 수 있습니까?

랜섬웨어 공격이 증가하고 있지만 AI가 최신 컴퓨터 바이러스를 처리하는 데 도움이 될 수 있습니까? AI가 답인가? AI boone 또는 bane인지 여기에서 읽으십시오.

ReactOS: 이것이 Windows의 미래입니까?

ReactOS: 이것이 Windows의 미래입니까?

오픈 소스이자 무료 운영 체제인 ReactOS가 최신 버전과 함께 제공됩니다. 현대 Windows 사용자의 요구 사항을 충족하고 Microsoft를 무너뜨릴 수 있습니까? 이 구식이지만 더 새로운 OS 환경에 대해 자세히 알아보겠습니다.

WhatsApp 데스크톱 앱 24*7을 통해 연결 유지

WhatsApp 데스크톱 앱 24*7을 통해 연결 유지

Whatsapp은 마침내 Mac 및 Windows 사용자용 데스크톱 앱을 출시했습니다. 이제 Windows 또는 Mac에서 Whatsapp에 쉽게 액세스할 수 있습니다. Windows 8 이상 및 Mac OS 10.9 이상에서 사용 가능

AI는 어떻게 프로세스 자동화를 다음 단계로 끌어올릴 수 있습니까?

AI는 어떻게 프로세스 자동화를 다음 단계로 끌어올릴 수 있습니까?

인공 지능이 소규모 회사에서 어떻게 인기를 얻고 있으며 어떻게 인공 지능이 성장할 가능성을 높이고 경쟁자가 우위를 점할 수 있는지 알아보려면 이 기사를 읽으십시오.

macOS Catalina 10.15.4 추가 업데이트로 인해 해결보다 더 많은 문제가 발생함

macOS Catalina 10.15.4 추가 업데이트로 인해 해결보다 더 많은 문제가 발생함

최근 Apple은 문제를 해결하기 위해 macOS Catalina 10.15.4 추가 업데이트를 출시했지만 이 업데이트로 인해 Mac 컴퓨터의 브릭킹으로 이어지는 더 많은 문제가 발생하는 것 같습니다. 자세히 알아보려면 이 기사를 읽어보세요.

빅데이터의 13가지 상용 데이터 추출 도구

빅데이터의 13가지 상용 데이터 추출 도구

빅데이터의 13가지 상용 데이터 추출 도구

저널링 파일 시스템이란 무엇이며 어떻게 작동합니까?

저널링 파일 시스템이란 무엇이며 어떻게 작동합니까?

우리 컴퓨터는 모든 데이터를 저널링 파일 시스템이라고 하는 체계적인 방식으로 저장합니다. 검색을 누르는 즉시 컴퓨터에서 파일을 검색하고 표시할 수 있는 효율적인 방법입니다.https://wethegeek.com/?p=94116&preview=true

기술적 특이점: 인류 문명의 먼 미래?

기술적 특이점: 인류 문명의 먼 미래?

과학이 빠른 속도로 발전하고 우리의 많은 노력을 인수함에 따라 설명할 수 없는 특이점에 처할 위험도 높아집니다. 특이점이 우리에게 무엇을 의미할 수 있는지 읽어보십시오.

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

2021년 의료 분야에서 인공 지능의 영향

2021년 의료 분야에서 인공 지능의 영향

의료 분야의 AI는 지난 수십 년 동안 큰 도약을 했습니다. 따라서 의료 분야에서 AI의 미래는 여전히 나날이 성장하고 있습니다.