HAProxy
HAProxy是免費(fèi)、極速且可靠的用于為TCP和基于HTTP應(yīng)用程序提供高可用、負(fù)載均衡和代理服務(wù)的解決方案。
使用場景
小型項(xiàng)目在使用 docker swarm 部署微服務(wù)時(shí),需要一個(gè)服務(wù)來做負(fù)載均衡。之前使用過 consul + fabio 來做自動(dòng)服務(wù)發(fā)現(xiàn)、負(fù)載均衡,配置起來很麻煩。后來用 haproxy 就簡單多了。
如何使用
docker hub 上有兩個(gè)版本的鏡像
- dockercloud (已停止維護(hù))
- 官方
我使用的就是 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 指定虛擬主機(jī),格式:[scheme://]domain[:port][/path],
SERVICE_PORTS 你想要暴露的客戶機(jī)的端口
BALANCE=source 即同一IP請求均會(huì)被指向同一臺(tái)后端服務(wù)器
SSL_CERT 這里是要把公鑰私鑰拼接以文本形式放在這里
首先把文件拼接在一起
cat example.com.crt > example.com.pem
echo "" >> example.com.pem
cat example.com.key >> example.com.pem
然后執(zhí)行
awk 1 ORS='\\n' example.com.pem
把打印出來的字符串寫在 SSL_CERT 就可以了