tutum/haproxy是一个HAProxy镜像,能够在链接的容器之间实现负载均衡。如果在Tutum环境中启动,当链接的集群成员重新部署、加入或离开时,该镜像会自动重新配置自身。
| 标签 | 说明 |
|---|---|
| tutum/haproxy:latest | 对应GitHub的master分支 |
| tutum/haproxy:0.1 | 对应GitHub的0.1标签版本 |
注意:latest标签包含新功能,如虚拟主机、多SSL、多前端等;0.1标签是当前稳定版本,功能较少。
首先启动暴露80端口的应用容器:
bashdocker run -d --name web1 tutum/hello-world docker run -d --name web2 tutum/hello-world
然后运行tutum/haproxy并链接到目标容器:
bashdocker run -d -p 80:80 --link web1:web1 --link web2:web2 tutum/haproxy
此时,tutum/haproxy容器将在80端口监听请求,并使用roundrobin(轮询)算法将请求转发到web1和web2后端。
服务是一组具有相同功能的容器集合,通常使用相同参数创建的容器可视为一个服务。服务是负载均衡管理的理想概念,当服务扩缩容(改变容器数量)时,HAProxy会相应地平衡负载。
tutum/haproxy:在Tutum中设置链接时,会自动在服务之间建立链接,过程完全透明。tutum/haproxy:链接容器到tutum/haproxy时,链接别名至关重要。任何共享相同前缀且后跟“-/_”及整数的链接别名会被视为来自同一服务。例如:web-1和web-2属于服务web,app_1和app_2属于服务app,而app1和web2属于不同服务。此部分设置不可变,需重新部署HAProxy服务才能生效。
| 环境变量 | 默认值 | 描述 |
|---|---|---|
| DEFAULT_SSL_CERT | 默认SSL证书,包含私钥和公证书的PEM文件,使用'\n'作为行分隔符 | |
| BALANCE | roundrobin | 负载均衡算法,可选值:roundrobin(轮询)、static-rr(静态轮询)、source(源IP)、leastconn(最少连接),详见https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-balance |
| MODE | http | HAProxy负载均衡模式,可选值:http、tcp、health |
| MAXCONN | 4096 | 设置每个进程的最大并发连接数 |
| OPTION | redispatch | 逗号分隔的HAProxy option条目,添加到default部分 |
| RSYSLOG_DESTINATION | 127.0.0.1 | HAProxy日志发送的rsyslog目标地址 |
| SSL_BIND_OPTIONS | no-sslv3 | SSL服务器使用的SSL绑定选项,设置HAProxy的ssl-default-bind-options配置,默认仅允许TLSv1.0+ |
| SSL_BIND_CIPHERS | SSL服务器使用的SSL密码套件,设置HAProxy的ssl-default-bind-ciphers配置 | |
| STATS_PORT | 1936 | HAProxy统计信息页面端口,若发布此端口,可通过http://<host-ip>:<STATS_PORT>/访问 |
| STATS_AUTH | stats:stats | 访问HAProxy统计信息所需的用户名和密码 |
| TIMEOUT | connect 5000, client 50000, server 50000 | 逗号分隔的HAProxy timeout条目,添加到default部分 |
| HEALTH_CHECK | check | 每个后端路由的健康检查设置,例如:"check inter 2000 rise 2 fall 3",详见https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#5.2-check |
此处设置可覆盖HAProxy的全局设置,仅适用于链接的服务。在Tutum环境中,当服务重新部署、加入或离开HAProxy服务时,HAProxy会自动更新以应用更改。
| 环境变量 | 描述 |
|---|---|
| APPSESSION | 粘性会话选项,例如:JSESSIONID len 52 timeout 3h,详见http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-appsession |
| COOKIE | 粘性会话选项,例如:SRV insert indirect nocache,详见http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-cookie |
| SSL_CERT | SSL证书,包含私钥和公证书的PEM文件,使用'\n'作为行分隔符 |
| DEFAULT_SSL_CERT | 与SSL_CERT类似,但将PEM文件存储为/certs/cert0.pem作为默认SSL证书。若在链接服务和HAProxy中指定多个DEFAULT_SSL_CERT,行为未定义 |
| EXCLUDE_PORTS | 逗号分隔的端口号(如3306, 3307),默认HAProxy会将应用服务暴露的所有端口添加到后端路由,可通过此参数排除不需要路由的端口(如数据库端口) |
| TCP_PORTS | 逗号分隔的端口(如9000, 9001, 2222/ssl),列在此处的端口将以TCP模式负载均衡,以/ssl结尾的端口表示需要SSL终止 |
| BALANCE | 负载均衡算法,同全局设置中的BALANCE |
| FORCE_SSL | 若设置(任意值)且启用SSL终止,HAProxy会将HTTP请求重定向到HTTPS |
| VIRTUAL_HOST | 指定虚拟主机和虚拟路径,格式:[scheme://]domain[:port][/path], ...,*可作为通配符用于domain和path部分 |
| HEALTH_CHECK | 每个后端路由的健康检查设置,同全局设置中的HEALTH_CHECK |
| HTTP_CHECK | 启用HTTP协议检查服务器健康状态,例如:"OPTIONS * HTTP/1.1\r\nHost:\ www",详见https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-option%20httpchk |
| VIRTUAL_HOST_WEIGHT | 虚拟主机权重整数,与VIRTUAL_HOST配合使用,默认0,影响虚拟主机ACL规则的优先级,权重越高优先级越高 |
| HSTS_MAX_AGE | 启用HSTS,整数表示HSTS的最大存活时间(秒),例如:31536000 |
| GZIP_COMPRESSION_TYPE | 启用gzip压缩,值为要压缩的MIME类型列表,例如:text/html text/plain text/css |
更多信息请参考http://cbonte.github.io/haproxy-dconv/configuration-1.5.html%E3%80%82
虚拟主机和虚拟路径可通过环境变量VIRTUAL_HOST指定,其值为逗号分隔的URL列表,格式为[scheme://]domain[:port][/path]。
| 项 | 默认值 | 描述 |
|---|---|---|
| scheme | http | 可选值:http、https、wss |
| domain | 虚拟主机,*可作为通配符 | |
| port | 80/443 | 虚拟主机端口,当scheme为https或wss时,默认端口为443 |
| /path | 虚拟路径,以/开头,*可作为通配符 |
| 虚拟主机 | 匹配 | 不匹配 |
|---|---|---|
| [***] | example.com | [***] |
| example.com | example.com | [***] |
| example.com:90 | example.com:90 | example.com |
| [***] | [***] | example.com |
| [***] | [***] | [***] |
| *.example.com | [***] | example.com |
| *example.com | [***] example.com | [***] |
| [***] | [] [] | [***] |
| [***] | [] [] | example.com |
| * | 任何HTTP网站 | |
| [***] | 任何HTTPS网站 | |
| */path | example.com/path | example.com/path/ |
| */path/ | example.com/path/ | example.com/path |
| /path/ | example.com/path/abc | example.com/abc/path/ |
| /.js | example.com/abc.js | example.com/abc.css |
注意:基于VIRTUAL_HOST生成的ACL规则顺序是随机的。在HAProxy中,若宽范围规则(如*.example.com)排在窄范围规则(如web.example.com)之前,窄范围规则将永远不会生效。因此,若虚拟主机存在范围重叠,需使用VIRTUAL_HOST_WEIGHT手动设置ACL规则顺序,即给窄范围虚拟主机设置更高权重。
tutum/haproxy支持多证书SSL终止。对于需要SSL终止的应用,只需设置SSL_CERT和VIRTUAL_HOST,HAProxy会从链接环境中读取证书并配置SSL终止。
注意:若环境变量值包含“=”(SSL证书中常见),Docker 1.7.0以下版本会跳过该环境变量,因此多SSL终止仅在Docker 1.7.0+或Tutum环境中可用。
VIRTUAL_HOST未设置,或设置为“https” schemetutum/haproxy中设置DEFAULT_SSL_CERTSSL_CERT和/或DEFAULT_SSL_CERTSSL_CERT和DEFAULT_SSL_CERT的区别:SSL_CERT指定的多个证书存储为cert1.pem、cert2.pem等,而DEFAULT_SSL_CERT指定的证书始终存储为cert0.pem。HAProxy在无SNI匹配时使用cert0.pem作为默认证书。若提供多个DEFAULT_SSL_CERT,仅一个会存储为cert0.pem,其余会被丢弃。
证书是包含私钥(在前)和公证书(在后)的PEM文件,可通过以下脚本生成:
bashopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out ca.pem -days 1080 -nodes -subj '/CN=*/O=My Company Name LTD./C=US' cp key.pem cert.pem cat ca.pem >> cert.pem
生成后,使用以下命令获取证书文本:
bashawk 1 ORS='\\n' cert.pem
将输出复制并设置为SSL_CERT或DEFAULT_SSL_CERT的值。
有三种设置亲和性和粘性会话的方法:
BALANCE=source:HAProxy会对客户端IP地址进行哈希,确保同一IP始终定向到同一服务器。APPSESSION=<value>:使用应用会话确定客户端连接的服务器,例如:JSESSIONID len 52 timeout 3h。COOKIE=<value>:使用应用Cookie确定客户端连接的服务器,例如:SRV insert indirect nocache。更多信息请参考http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-appsession%E5%92%8Chttp://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-cookie%E3%80%82
默认情况下,tutum/haproxy运行在http模式。若要链接的服务运行在tcp模式,可指定环境变量TCP_PORTS(逗号分隔的端口,如9000, 9001)。
bashdocker run --name app-1 --expose 9000 --expose 9001 -e TCP_PORTS="9000,9001" your_app docker run --name app-2 --expose 9000 --expose 9001 -e TCP_PORTS="9000,9001" your_app docker run --link app-1:app-1 --link app-2:app-2 -p 9000:9000 -p 9001:9001 tutum/haproxy
此时,HAProxy会在9000和9001端口分别对app-1和app-2进行TCP模式负载均衡。
bashdocker run --name app-1 --expose 80 --expose 22 -e TCP_PORTS=22 your_app docker run --name app-2 --expose 80 --expose 22 -e TCP_PORTS=22 your_app docker run --link app-1:app-1 --link app-2:app-2 -p 80:80 -p 22:22 tutum/haproxy
此时,HAProxy在80端口使用HTTP模式,在22端口使用TCP模式进行负载均衡。
在TCP_PORTS中,以/ssl结尾的端口(如2222/ssl)会启用SSL终止。
注意:
VIRTUAL_HOST和TCP_PORTS,以更好地控制HTTP模式。TCP_PORTS,tutum/haproxy会将它们视为同一服务。有两种启用WebSocket支持的方法:
ws或wss scheme,例如:-e VIRTUAL_HOST="ws://ws.example.com, wss://wss.example.com"通过Tutum启动要负载均衡的服务,然后启动负载均衡器:
tutum/haproxytutumcli或stackfile,请将role设置为globalHAProxy会自动查询Tutum API获取服务容器的更新列表并重新配置,包括:
bashdocker run -d --link webapp:webapp -p 80:80 tutum/haproxy
bashdocker run -d --link webapp:webapp -e EXCLUDE_PORTS=8083,8086 -p 80:80 tutum/haproxy
以下是 tutum/haproxy 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务