HAProxy
HAProxy是免费、极速且可靠的用于为TCP和基于HTTP应用程序提供高可用、负载均衡和代理服务的解决方案。
使用场景
小型项目在使用 docker swarm 部署微服务时,需要一个服务来做负载均衡。之前使用过 consul + fabio 来做自动服务发现、负载均衡,配置起来很麻烦。后来用 haproxy 就简单多了。
如何使用
docker hub 上有两个版本的镜像
- dockercloud (已停止维护)
- 官方
我使用的就是 dockercloud 的,原因是不需要写配置文件,傻瓜配置。
version: '3.4'
networks:
lb:
external:
name: fruit_lb
services:
lb:
networks:
- lb
image: dockercloud/haproxy:1.6.7
deploy:
placement:
constraints:
- node.role == manager
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- SSL_CERT=-----BEGIN CERTIFICATE-----\nMIIFlzCCBHRU5DS9iI=\n-----END RSA PRIVATE KEY-----\n
ports:
- 80:80
- 443:443
app:
networks:
- lb
image: smkd/example
environment:
- VIRTUAL_HOST=http://api.example.com,https://api.example.com
- SERVICE_PORTS=5757
- BALANCE=source
admin:
image: smkd/example-admin
environment:
- VIRTUAL_HOST=admin.example.com
- SERVICE_PORTS=80
- BALANCE=source
networks:
- lb
VIRTUAL_HOST 指定虚拟主机,格式:[scheme://]domain[:port][/path],
SERVICE_PORTS 你想要暴露的客户机的端口
BALANCE=source 即同一IP请求均会被指向同一台后端服务器
SSL_CERT 这里是要把公钥私钥拼接以文本形式放在这里
首先把文件拼接在一起
cat example.com.crt > example.com.pem
echo "" >> example.com.pem
cat example.com.key >> example.com.pem
然后执行
awk 1 ORS='\\n' example.com.pem
把打印出来的字符串写在 SSL_CERT 就可以了
网友评论