首页 > 其他分享 >k8s 高可用集群3:VIP:HAProxy、keepalived

k8s 高可用集群3:VIP:HAProxy、keepalived

时间:2023-11-22 17:02:21浏览次数:55  
标签:HAProxy kubernetes -- keepalived 192.168 etc VIP k8s

为何要使用负载均衡器VIP(HAProxy、keepalived)

  1. k8s Master 初始化配置时,使用负载均衡器,可以将 apiserver 的请求转发到不同的机器上,避免一台服务器宕机,造成所有节点不可使用。
  2. 如果不使用负载均衡器,先创建一个 k8s Master,然后再加入其他的 k8s Master,当第一台 k8s Master 宕机时,后面加入的 k8s Master 将无法使用(因为请求是发送给第一台 k8s Master 的 apiserver)
  3. 有了 keepalived 为何还需要 HAProxy,keepalived 不是直接可以创建 VIP(虚拟IP)吗?如果 keepalived 与 k8s 所在的机器是同一台,则可以这样做(每台机器必须同时存在 k8s、keepalived),并且虚拟IP在哪台机器上,最终调用的就是哪台机器,有可能会出现虚拟IP所在的机器正常,但是k8s不能使用的情况。实际情况可能是会有单独的负载均衡服务器VIP(不与 k8s在同一台机器上)。
  4. 为何不使用 k8s Service 的 IP?因为 k8s Service 的 IP 可能在外部机器无法访问,并且 Service 的IP是随机的,每个 Service 不同。所以对外提供服务时,使用的是 VIP(Virtual IP Address 虚拟IP)

安装配置 HAProxy(三台服务器均需要执行)

mkdir -p /etc/kubernetes/

cat > /etc/kubernetes/haproxy.cfg << EOF
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4096
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option                  http-server-close
    option                  forwardfor    except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend  kube-apiserver
    mode                 tcp
    bind                 *:9443
    option               tcplog
    default_backend      kube-apiserver

listen stats
    mode                 http
    bind                 *:8888
    stats auth           admin:password
    stats refresh        5s
    stats realm          HAProxy\ Statistics
    stats uri            /stats
    log                  127.0.0.1 local3 err

backend kube-apiserver
    mode        tcp
    balance     roundrobin
    server  k8s-master1 $MASTER_1_IP:6443 check
    server  k8s-master2 $MASTER_2_IP:6443 check
    server  k8s-master3 $MASTER_3_IP:6443 check

EOF

cat /etc/kubernetes/haproxy.cfg


docker run \
  -d \
  --name k8s-haproxy \
  --net=host \
  --restart=always \
  -v /etc/kubernetes/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro \
  haproxytech/haproxy-debian:2.3

安装配置 keepalived(第一台机器:192.168.80.81)

cat > /etc/kubernetes/keepalived.conf << EOF
! Configuration File for keepalived

global_defs {
   router_id LVS_1
}

vrrp_script checkhaproxy
{
    script "/usr/bin/check-haproxy.sh"
    interval 2
    weight -30
}

vrrp_instance VI_1 {
    state MASTER
    interface $INTERFACE_NAME
    virtual_router_id 51
    priority 100
    advert_int 1

    virtual_ipaddress {
        $VIP_IP/24 dev $INTERFACE_NAME
    }

    authentication {
        auth_type PASS
        auth_pass password
    }

    track_script {
        checkhaproxy
    }
}

EOF

cat > /etc/kubernetes/check-haproxy.sh << EOF
#!/bin/bash

count=\`netstat -apn | grep 9443 | wc -l\`

if [ $count -gt 0 ]; then
    exit 0
else
    exit 1
fi

EOF


cat /etc/kubernetes/keepalived.conf
cat /etc/kubernetes/check-haproxy.sh

docker run \
  -d \
  --name k8s-keepalived \
  --restart=always \
  --net=host \
  --cap-add=NET_ADMIN \
  --cap-add=NET_BROADCAST \
  --cap-add=NET_RAW \
  -v /etc/kubernetes/keepalived.conf:/container/service/keepalived/assets/keepalived.conf \
  -v /etc/kubernetes/check-haproxy.sh:/usr/bin/check-haproxy.sh \
  osixia/keepalived:2.0.20 \
  --copy-service

mkdir -p /root/.ssh/

安装配置 keepalived(第二台机器:192.168.80.82)

# 一路回车
ssh-keygen -t rsa

scp -P 22 /root/.ssh/id_rsa.pub root@$MASTER_1_IP:/root/.ssh/authorized_keys

scp -P 22 root@$MASTER_1_IP:/etc/kubernetes/keepalived.conf /etc/kubernetes/
scp -P 22 root@$MASTER_1_IP:/etc/kubernetes/check-haproxy.sh /etc/kubernetes/

sudo sed -i "s#router_id LVS_1#router_id LVS_2#g" /etc/kubernetes/keepalived.conf
sudo sed -i "s#state MASTER#state BACKUP#g" /etc/kubernetes/keepalived.conf

docker run \
  -d \
  --name k8s-keepalived \
  --restart=always \
  --net=host \
  --cap-add=NET_ADMIN \
  --cap-add=NET_BROADCAST \
  --cap-add=NET_RAW \
  -v /etc/kubernetes/keepalived.conf:/container/service/keepalived/assets/keepalived.conf \
  -v /etc/kubernetes/check-haproxy.sh:/usr/bin/check-haproxy.sh \
  osixia/keepalived:2.0.20 \
  --copy-service

安装配置 keepalived(第三台机器:192.168.80.83)

# 一路回车
ssh-keygen -t rsa

scp -P 22 /root/.ssh/id_rsa.pub root@$MASTER_1_IP:/root/.ssh/authorized_keys

scp -P 22 root@$MASTER_1_IP:/etc/kubernetes/keepalived.conf /etc/kubernetes/
scp -P 22 root@$MASTER_1_IP:/etc/kubernetes/check-haproxy.sh /etc/kubernetes/

sudo sed -i "s#router_id LVS_1#router_id LVS_3#g" /etc/kubernetes/keepalived.conf
sudo sed -i "s#state MASTER#state BACKUP#g" /etc/kubernetes/keepalived.conf

docker run \
  -d \
  --name k8s-keepalived \
  --restart=always \
  --net=host \
  --cap-add=NET_ADMIN \
  --cap-add=NET_BROADCAST \
  --cap-add=NET_RAW \
  -v /etc/kubernetes/keepalived.conf:/container/service/keepalived/assets/keepalived.conf \
  -v /etc/kubernetes/check-haproxy.sh:/usr/bin/check-haproxy.sh \
  osixia/keepalived:2.0.20 \
  --copy-service

访问以下地址,用户名:admin,密码:password

  1. http://192.168.80.81:8888/stats
  2. http://192.168.80.82:8888/stats
  3. http://192.168.80.83:8888/stats
  4. http://192.168.80.100:8888/stats

 

 

 

 

 

 

 

测试VIP(在三台机器上安装不同版本的 Nginx,用于测试,方便查看效果,测试完成将删除)

  1. 安装 Nginx 1.23.1(第一台机器:192.168.80.81)

    docker run \
    --restart=always \
    -itd \
    --privileged=true \
    -p 6443:80 \
    -v /etc/localtime:/etc/localtime \
    --name nginx nginx:1.23.1
     
  2. 安装 Nginx 1.23.2(第二台机器:192.168.80.82)

    docker run \
    --restart=always \
    -itd \
    --privileged=true \
    -p 6443:80 \
    -v /etc/localtime:/etc/localtime \
    --name nginx nginx:1.23.2
     
  3. 安装 Nginx 1.23.3(第三台机器:192.168.80.83)

    docker run \
    --restart=always \
    -itd \
    --privileged=true \
    -p 6443:80 \
    -v /etc/localtime:/etc/localtime \
    --name nginx nginx:1.23.3
     
  4. 访问任意一个地址,均能看见使用 nginx 替代的 k8s-master1,k8s-master2,k8s-master3 已上线

    1. http://192.168.80.81:8888/stats
    2. http://192.168.80.82:8888/stats
    3. http://192.168.80.83:8888/stats
    4. http://192.168.80.100:8888/stats

    image.png

  5. 访问下列地址,能看到三台机器使用了不同的 Nginx 版本

    1. http://192.168.80.81:6443/xuxiaowei
    2. http://192.168.80.82:6443/xuxiaowei
    3. http://192.168.80.83:6443/xuxiaowei
  6. 访问 http://192.168.80.100:9443/xuxiaowei,可以看到 nginx 版本为 1.23.3,访问的是第三台机器

  7.  image.png

  8. 将第三台机器 192.168.80.83 关机后访问 http://192.168.80.100:9443/xuxiaowei ,可以看到 nginx 版本为 1.23.1,访问的是第一台机器 image.png

  9. 将第一台机器 192.168.80.81 关机后访问 http://192.168.80.100:9443/xuxiaowei ,可以看到 nginx 版本为 1.23.2,访问的是第二台机器 image.png

  10. 将创建的nginx容器关闭并删除(三台服务器均需要执行,否则后面无法执行 k8s 初始化)

    docker stop nginx
    docker rm nginx

标签:HAProxy,kubernetes,--,keepalived,192.168,etc,VIP,k8s
From: https://www.cnblogs.com/libruce/p/17849739.html

相关文章

  • 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.21)
    百度网盘会员账号共享(11.21更新)账号:aro85342密码:zdzv4086账号:3719heuk密码:303ulok账号:13262017701密码:4307uqg账号:5815hewo密码:886pinx账号:4636gpxt密码:1529oux共享账号存在密码被修改的可能,请谨慎使用。小编保持实时更新,希望给大家挖掘到更多有用的信息!如上述共享账......
  • Cisco SD-WAN (Viptela) version 20.12.2 ED - 软件定义广域网
    CiscoSD-WAN(Viptela)version20.12.2ED-软件定义广域网请访问原文链接:https://sysin.org/blog/cisco-sd-wan-20/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org支持SASE的架构,其集成了面向多云、安全、统一通信和应用优化的各种功能,可用于轻松安全地将任何......
  • nginx+keepalived+http高可用和负载均衡:(实验)
    1.先NGINX负载均衡(2台)一模一样,客户端设置域名解析,负载均衡器的名称www.web.com YJ.li容器 数据库 自动化 网站架构 管理Nginx-keepalived+Nginx实现高可用集群 Keepalived+Nginx高可用集群(主从模式)#集群架构图:说明:Keepalived机器同样是nginx......
  • Nginx+keepalived实现nginx高可用
    1,keepalived工作原理nginx的安装已有现成文档,就不重新编写文档了本文讲述主、从服务器各一台2,主、从服务器上安装keepalived1.使用yum安装keepalivedyum-yinstallkeepalived2.查看keepalived是否安装成功,出现版本即成功rpm-q-akeepalived3,主、从服务器上修改kee......
  • linux 安装keepalived
    1.下载安装包然后解压  1解压tar-zxvfkeepalived-2.2.2.tar.gzcd /opt/keepalived-2.2.2 ./configure--prefix=/usr/local/keepalived  有时候可能会报这个错误信息,此时只需要安装 libnl/libnl-3 依赖即可,输入 yum-yinstalllibnllibnl-deve***WARNIN......
  • Liunx 安装keepalived
    1.官网下载 keepalived-2.2.2.tar.gz  移动到 /usr/soft/keepalived  然后进行解压     tar-zxvfkeepalived-2.2.2.tar.gz 2.配置   进入目录[root@localhostkeepalived]#cd/usr/soft/keepalived/keepalived-2.2.2[root@localhostkeepali......
  • haproxy的acl匹配方式详解+配置案例
    方法一:在HAProxy中,ACL(AccessControlLists)用于基于条件进行请求的过滤和路由。ACL可以根据不同的条件来匹配请求,比如来源IP地址、HTTP头部、URL路径等。一旦定义了ACL,你可以将其与后端服务器池、前端监听器等进行关联,以便根据条件来决定如何处理请求。以下是一些常见的AC......
  • 抖音自动关注点赞评论脚本,可批量导入视频连接,易语言精易VIP模块开发
    这个软件也是客户定制的,然后调用的是精易论坛的一个VIP模块,一个月收费10块钱,但是功能很强大,它可以直接调用你电脑上安装的谷歌浏览器,然后在浏览器里面直接执行数据功能,比如数据包截取,COOKIE的导入导出,还有JS网页端直接,填表操作等功能,所以用这个模块开发了一个抖音私信的功能,可以直......
  • 小红书视频作品评论用户ID提取,采集关键词工具,精易VIP模块轻松实现
    那么这个工具只是一个开源版,我会把源码,DLL命令,变量,都会公布出来,这样才完整,你可以直接复制去用,不像网上的一些博主就分享一个窗口的代码,用户复制发现缺少这个又缺少那个,非常麻烦,我这边分享的都是完整的哈。实现原理是通过精易VIP助手,它使用C++开发的,直接调用谷歌浏览器官方内核,可......
  • HAProxy 入门实战(2)--简单使用
    本文主要介绍HAProxy的实际使用,文中所使用到的软件版本:Centos7.9.2009、HAProxy2.8.2。1、全局配置全局配置位于global部分,该部分的参数是进程范围的,通常特定于操作系统。它们通常仅设置一次,并且在设置正确后不需要更改。其中一些参数具有命令行等效项。globallog127.0.0......