这是我在配置k8s高可用架构时遇到的问题,集群部署在华为云上,3master 3worker架构,3台master配置了keepalived做高可用。
问题:主节点的keeplived挂掉后,管理员再手动恢复时,VIP也会恢复到主网卡上,但是ping不通公网了,公网能访问到服务器,但是服务器不能主动访问公网,只能被动被外界访问(跟NAT反过来一样。。。)
我是怎么搭建该集群的:第一个要解决的是虚拟IP(即VIP)的问题,keepalived在指定网卡上生成一个VIP用于公网对本集群的访问,那么这个VIP就不能是内网IP,在购买了弹性公网IP后,在 虚拟私有云->子网->subnet_xxx->IP地址管理

处申请虚拟IP,然后和弹性公网IP绑定,再和3台高可用服务器绑定。具体步骤可以看官方文档:https://support.huaweicloud.com/usermanual-vpc/vpc_vip_0011.html#section0
故障点:这里其实是由于默认路由在VIP切换时被内核自动删除了,重启keepalived,VIP切换回来后,默认路由并没有自动恢复,导致数据走的还是内网网络,自然无法访问公网。
解决办法:在keepalived配置中添加自动脚本,服务down掉时删除默认路由,恢复时添加默认路由。
编辑配置文件 /etc/keepalived/keepalived.conf,主要在于下面注释的3行:
[root@k8s-master-0001 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id k8s
}
vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 3
weight -2
fall 10
rise 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.154
}
track_script {
check_haproxy
}
notify_master "/etc/keepalived/add_route.sh" #增添默认路由
notify_backup "/etc/keepalived/del_route.sh" #删除默认路由
notify_fault "/etc/keepalived/del_route.sh" #删除默认路由
}
添加脚本,这里请参考我的自行添加:
[root@k8s-master-0001 ~]# ls /etc/keepalived/
add_route.sh del_route.sh keepalived.conf
[root@k8s-master-0001 ~]# cat /etc/keepalived/add_route.sh
#!/bin/bash
ip route replace default via 192.168.100.1 dev eth0 src 192.168.100.154
[root@k8s-master-0001 ~]# cat /etc/keepalived/del_route.sh
#!/bin/bash
ip route del default via 192.168.100.1 dev eth0 src 192.168.100.154 2>/dev/null || true
再修改另外两条高可用服务器,和主节点相似,只要保证这三行内容在配置文件里存在:
notify_master "/etc/keepalived/add_route.sh" #增添默认路由
notify_backup "/etc/keepalived/del_route.sh" #删除默认路由
notify_fault "/etc/keepalived/del_route.sh" #删除默认路由
还有add_route.sh,del_route.sh脚本文件在合适的位置即可。

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



