文檔參見: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" #記錄切換為主節點的信息
}
