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"   #记录切换为主节点的信息
}

  

posted @   JASON_yul  阅读(1046)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示