k8s 集群使用 haproxy+keepalived+nginx 实现k8s集群负载均衡
高可用 Kubernetes 集群能够确保应用程序在运行时不会出现服务中断,这也是生产的需求之一,并且在私有网络环境中,使用固定IP对外提供服务,并且基于Kubernetes service 4层负载均衡可以在保证高用的情况下,又可以获取到客户端的真实IP,这里我们使用。keepalived+haproxy 来实现。通过使用Proxy Protocol 代理协议透传客户端IP,来实现。
集群架构:
示例集群有三个主节点,以及一个虚拟 IP 地址。本示例中的虚拟 IP 地址也可称为“浮动 IP 地址”。这意味着在节点故障的情况下,该 IP 地址可在节点之间漂移,从而实现高可用。

keepalived + haproxy 安装
Keepalived 提供 VRRP 实现,并允许您配置 Linux 机器使负载均衡,预防单点故障。HAProxy 提供可靠、高性能的负载均衡,能与 Keepalived 完美配合。
由于在所有集群上安装了 Keepalived 和 HAproxy,如果其中一个节点故障,虚拟 IP 地址(即浮动 IP 地址)将自动与另一个节点关联,使集群仍然可以正常运行,从而实现高可用。若扩展集群,可以继续 添加更多安装 Keepalived 和 HAproxy 的节点。
yum install -y haproxy keepalived
keepalived
master 配置
vim 编辑 /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
zhanglu90@126.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_1
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI-kube-master {
state MASTER #需要将状态设置为(MASTER)
interface eno1 #这个地方需要特别注意,一个服务器有很多虚拟网卡,而这个网卡是真实网卡,可以通过ifconfig 命令查看你服务器中的名字,我的服务器中ip地址对应的网卡名称就是eno1 ,这个不能写错
virtual_router_id 51 #这个id可以是其他数字,但是该数字必须在master和node中要保持一致,也可以照我这个写,不需要修改的
priority 100 #权重设置,数值大的选为master 节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.41.39.206 # vip #这个就是虚拟出来的ip了,简称VIP,需要确保集群环境中不能有ip与这个vip冲突,其次需要确定该vip能和集群中所有节点ping的通
}
}
node 配置
vim 编辑 /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
zhanglu90@126.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_1
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI-kube-master {
state BACKUP #此处需要设置为备份状态(BACKUP)
interface eno1 #这个地方需要特别注意,一个服务器有很多虚拟网卡,而这个网卡是真实网卡,可以通过ifconfig 命令查看你服务器中的名字,我的服务器中ip地址对应的网卡名称就是eno1 ,这个不能写错
virtual_router_id 51 #这个id可以是其他数字,但是该数字必须在master和node中要保持一致,也可以照我这个写,不需要修改的
priority 80 #权重设置,数值大的选为master 节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.41.39.206 # vip #这个就是虚拟出来的ip了,简称VIP,需要确保集群环境中不能有ip与这个vip冲突,其次需要确定该vip能和集群中所有节点ping的通
}
}
启动keepalived并设置开机自启
#启动
systemctl start keepalived
#查看状态
systemctl status keepalived
#设置开机自启
systemctl enable keepalived
haproxy
「HAProxy」- 在 TCP Mode 下,从 Haproxy 向 Nginx 传递客户端真实网络地址

Haproxy配置介绍:
HaProxy配置(haproxy.cfg)中分为五部分内容(五大组件),可以根据需要选择进行配置。
五大组件:global、defaults、frontend、backend、listen
1、global:参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改。
2、defaults:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件。
3、frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的 backend(可动态选择)。
4、backend:后端服务集
Kubernetes集群高可用:Haproxy+Keepalived+Nginx实现负载均衡与真实IP获取

本文详细指导了如何在Kubernetes集群中通过Keepalived、Haproxy和Nginx构建高可用架构,包括安装配置、VRRP负载均衡、ProxyProtocol获取真实IP,以及Nginx的配置策略。
最低0.47元/天 解锁文章
1267

被折叠的 条评论
为什么被折叠?



