k8s- nginx ingress 高可用部署(最新版,支持 k8s 1.22---1.19)第2篇


 ,接下来开始对  nginx-ingress-controller 实现高可用。我们通过 keepalive+nginx 实现 nginx-ingress-controller 高可用!

注意:这里的keepalive+nginx 仅仅是对  nginx-ingress-controller 实现高可用!本教程里都是在Worker节点操作,即安装了nginx-ingress-controller 的节点操作。

一、安装keepalive+nginx 

3台安装了nginx-ingress-controller的worker节点上分别安装。

[root@k8snode1 mytest]# yum install nginx keepalived -y
[root@k8snode2 mytest]# yum install nginx keepalived -y
[root@k8snode3 mytest]# yum install nginx keepalived -y

二、修改 nginx 配置文件。主备一样

vim /etc/nginx/nginx.conf
  

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
# 四层负载均衡,为两台 Master apiserver 组件提供负载均衡
stream {
log_format main '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';


access_log /var/log/nginx/k8s-access.log main;


upstream k8s-apiserver {
server 192.168.157.202:80; # Master1 APISERVER IP:PORT
server 192.168.157.203:80; # Master2 APISERVER IP:PORT

server 192.168.157.204:80; # Master2 APISERVER IP:PORT
}


server {
listen 10080;
proxy_pass k8s-apiserver;
}
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';


access_log /var/log/nginx/access.log main;


sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 8080 default_server;
server_name _;


location / {
}
}
}



 请将 upstream k8s-apiserver里的ip设置为安装了 nginx-ingress controller对应的宿主机的IP地址。端口号为80.

三、keepalive 配置

双机热备,其中主节点和备节点的配置稍稍有所不同。

vim   /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id NGINX_MASTER
}

vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh"
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33  # 修改为实际网卡名
    virtual_router_id 51 # VRRP 路由 ID实例,每个实例是唯一的
    priority 100    # 优先级,备服务器设置 90
    advert_int 1    # 指定VRRP 心跳包通告间隔时间,默认1秒
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟IP
    virtual_ipaddress {
        192.168.157.199/24
    }
    track_script {
        check_nginx
    }
}

#vrrp_script:指定检查nginx工作状态脚本(根据nginx状态判断是否故障转移)
#virtual_ipaddress:虚拟IP(VIP)

需要修改4个地方:

1、 interface +本机的网卡名

2、state MASTER ,若为主节点则为MASTER,备节点为BACKUP ,都是大写字母。

3、priority 100  优先级,主节点MASTER则设置100,备节点设置比100小即可,比如90 .

4、virtual_ipaddress  虚拟IP,设置为当前主机环境一个未被使用的IP。

 从该配置文件可以看出,还需要创建一个check_nginx.sh 文件。

三、创建check_nginx.sh

vim /etc/keepalived/check_nginx.sh
#!/bin/bash
#1、判断Nginx是否存活
counter=`ps -C nginx --no-header | wc -l`
if [ $counter -eq 0 ]; then
    #2、如果不存活则尝试启动Nginx
    service nginx start
    sleep 2
    #3、等待2秒后再次获取一次Nginx状态
    counter=`ps -C nginx --no-header | wc -l`
    #4、再次进行判断,如Nginx还不存活则停止Keepalived,让地址进行漂移
    if [ $counter -eq 0 ]; then
        service  keepalived stop
    fi
fi

四、3台机器上执行

1、需要安装一个插件

yum install nginx-mod-stream -y

2、开启

systemctl daemon-reload
systemctl enable nginx keepalived
systemctl start nginx
systemctl start keepalived

教程中涉及到的文件可以下载:

链接:https://pan.baidu.com/s/1oRvhN2_nfVT2ndE2VEN2QQ
提取码:muxx