LoadBalance 通常分成两种类型:Client Side 和 Server side。
详见 Kubernetes service 章节的介绍,Nginx,haproxy,kube-proxy 都属于 Server side LB。
Dns
当你使用域名访问互联网服务时,经常会使用到 DNS 负载均衡。
例如,当 使用 curl 访问 www.baidu.com
时
访问时进行抓包
当你多次 curl www.baidu.com
时,可以观察到你发送的请求到了 110.242.68.3
和 110.242.68.4
,这就是你请求百度的 IP 地址时,DNS server 给你返回了不同的 IP,你的请求则发送到了不同的 IP。
Haproxy
haproxy 还提供服务检查(当检查失败不会转发到对应 server )、web 展示等服务。
可以看到 haproxy 代理 client 端去访问 http 服务,server 端收到的访问地址都是 vip 的地址。Server Client LB。
配置示例,基于默认变化。
frontend http-in
bind *:8080
mode http
log global
option httpclose
option logasap
option dontlognull
capture request header Host len 20
capture request header Referer len 60
default_backend servers
backend servers
balance roundrobin
server websrv1 172.18.22.235:80
server websrv2 172.18.22.237:80
Nginx
upstream myserver{
server 172.18.22.235:80;
server 172.18.22.237:80;
}
server {
listen 8080 default_server;
location / {
root html;
index index.html index.htm;
proxy_pass http://myserver;
}
可以看到 nginx 反向代理 client 端去访问 http 服务,server 端收到的访问地址都是 vip 的地址,和 proxy 很像;Server Client LB。