'docker swarm haproxy microservice
i want to deploy microservice inside docker swarm. for it i have 2 machine. one is swarm master other is swarm worker.
i have 2 different service called web1 and web2.
Inside master deployed haProxy and web1. Inside worker deployed web2.
it is working if i use self ip:port BUT from haProxy can not call web2 (another host deployed). actually haproxy doesnt know docker service.actually i dont want to given ip address. is not possible docker service name ?
haproxy.cf is like following
global
maxconn 100
log stdout format raw local0 debug
defaults
log global
mode http
option httpclose
retries 5
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
acl has_web1 path_beg /web1
acl has_web2 path_beg /web2
use_backend web1 if has_web1
use_backend web2 if has_web2
default_backend web1
resolvers docker
nameserver dns1 127.0.0.11:53
backend web1
http-request replace-path /web1[/]?(.*) \1\2
server web1 web1:80 check inter 10s resolvers docker
backend web2
http-request replace-path /web2[/]?(.*) \1\2
server web2 web2:80 check inter 10s resolvers docker
docker-stack.yml is like following
version: "3.9"
services:
web1:
image: dockercloud/hello-world
hostname: web1
container_name: web1
ports:
- "81:80"
networks:
- backend
deploy:
placement:
constraints:
- node.role == worker
web2:
image: dockercloud/hello-world
hostname: web2
container_name: web2
ports:
- "82:80"
networks:
- backend
haproxy:
image: sample/sample-haproxy
ports:
- "80:80"
networks:
- backend
depends_on:
- web1
- web2
deploy:
placement:
constraints:
- node.role == manager
networks:
backend:
attachable: true
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
