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爆露的端口及服务器地址。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | [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监听端口,然后负载均衡的访问到各个服务中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | [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" #记录切换为主节点的信息 } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?