1. 程式人生 > 其它 >haproxy+keepalive+ingress的k8s高可用

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"   #記錄切換為主節點的資訊
}