0
点赞
收藏
分享

微信扫一扫

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

 ​​nginx-ingress-controller 安装完毕​​,接下来开始对  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 

作者:沐雪


举报

相关推荐

0 条评论