haproxy+keepalive+ingress的k8s高可用
文档参见:https://www.cnblogs.com/yanjieli/p/10601819.html
1.架构图

1.1通过haproxy负载均衡的指向两台nginx-ingress(域名)爆露端口的服务器,并监听nginx-ingress(域名)爆露的80端口,即上面的102和103。
若需要监听其他服务端口,需要在haproxy内配置对应的service爆露的端口及服务器地址。
[root@node01 ~]# cat /etc/haproxy/haproxy.cfg
global
# log /dev/log local0
# log /dev/log local1 notice
# chroot /var/lib/haproxy
# stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
nbproc 1
defaults
log global
timeout connect 5000
timeout client 10m
timeout server 10m
# ingress-nginx-conftorer 80 访问入口
listen ingress-node
bind 0.0.0.0:80
mode tcp
option tcplog
balance roundrobin
server 192.168.3.30 192.168.3.30:32084 check inter 2000 fall 2 rise 2 weight 1
server 192.168.3.30 192.168.3.30:32084 check inter 2000 fall 2 rise 2 weight 1
server 192.168.3.30 192.168.3.30:32084 check inter 2000 fall 2 rise 2 weight 1
1.2 keepalive配置vip-200,主备服务器分别是102和103。即vip正常指向102,如果102出现问题会自动切换到103。
当外部服务通过域名或vip访问时,系统会自动通过keepalive转到102,然后在102上寻找nginx-ingress(域名)爆露的80端口,通过域名访问k8s内部服务。
或通过指定的端口查找对应爆露端口的service服务,访问内部服务。
访问服务都是通过haproxy监听端口,然后负载均衡的访问到各个服务中。
[root@haproxy-master scripts]# cat /etc/keepalived/keepalived.conf
global_defs { ##全局定义, 还可以设置发送邮件等功能
router_id haproxy-master # 路由ID,标识本节点的字符串,邮件通知时会用到
}
# 自定义VRRP实例健康检查脚本 keepalived只能做到对自身问题和网络故障的监控,Script可以增加其他的监控来判定是否需要切换主备
vrrp_script chk_haproxy
{
script "/etc/keepalived/scripts/haproxy_check.sh" #心跳检测脚本,检测haproxy是否启动
interval 2 #检测脚本执行的间隔,单位是秒
timeout 2
fall 3
}
# VRRP实例:定义对外提供服务的VIP区域及其相关属性
vrrp_instance haproxy {
state MASTER #指定keepalived的角色,MASTER为主,BACKUP为备
interface ens33 #节点固有IP(非VIP)的网卡,用来发VRRP包
virtual_router_id 20 #虚拟路由编号,主从要一致
priority 150 #优先级,数值越大,获取处理请求的优先级越高,主从之间最好差50
authentication { auth_type PASS auth_pass 20 } #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
virtual_ipaddress {
192.168.1.200 #定义虚拟ip(VIP)
}
# 自定义健康检查脚本
track_script {
chk_haproxy # 配置上面自定义的vrrp脚本调用名
}
notify_master "/etc/keepalived/scripts/haproxy_master.sh" #记录切换为主节点的信息
}
浙公网安备 33010602011771号