haproxy+keepalive+ingress的k8s高可用
阿新 • • 發佈:2022-03-29
文件參見: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" #記錄切換為主節點的資訊 }