Kubernetes多master节点部署反向代理服务器

Kubernetes多master节点部署反向代理服务器

在这里插入图片描述
如图所示,在之前的多master节点的基础上搭建一个由nginx做反向代理和负载均衡的调度器。nginx的虚拟IP为:192.168.80130/24.两个proxy代理节点IP地址为:192.168.80.136/24和192.168.80.137/24.

搭建nginx服务

这里的nginx我是用的手动编译安装nginx,所以nginx这里不再过多的赘述如何安装nginx。

搭建keepalived服务

这里我是用yum安装的方法在两个proxy节点安装keepalived。

yum install keepalived -y

修改keepalived的配置文件

! Configuration File for keepalived

#keepalived的全局配置
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_01
   vrrp_skip_check_adv_addr
  ###################################
   #这里需要注释,如果不加注释是无法ping通VIP
  # vrrp_strict
  ###################################
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

#检测 nginx 状态的脚本路径
vrrp_script chk_nginx {
    script "/opt/chk_nginx.sh"

## 检测时间间隔
    interval 2
 ## 如果条件成立,权重-20
    weight -20
}

#定义实例,定义主备节点、端口
vrrp_instance VI_1 {
    state MASTER
    interface ens192
    virtual_router_id 10
    priority 100
# 主备心跳通讯时间间隔,组播信息发送间隔,两个节点设置必须一样, 默认 1s
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

## 执行 Nginx 监控的服务
track_script {
        chk_nginx
    }
#配置的虚拟IP地址
    virtual_ipaddress {
        192.168.80.130/24
    }
}

另一个proxy节点上只需要修改其中一部分内容。

#状态改为备用
state BACKUP
#修改优先级
priority 99

keepalived的配置文件中定义了监控nginx的脚本,需要在相应的目录下编写监控nginx的脚本。大致的意思是:如果查不到nginx的进程号那么解停止keepalived服务,VIP漂移到其他节点。

vim /opt/chk_nginx.sh
#!/bin/bash
count=$(ps -ef |grep nginx |egrep -cv "grep|$$")

if [ "$count" -eq 0 ];then
    /etc/init.d/keepalived stop
fi

在启动keepalived之前需要先开启nginx服务。之后再做VIP地址漂移测试。

#开启nginx
systemctl start nginx
#开启keepalived
systemctl start keepalived

在这里插入图片描述
VIP生效之后,停止proxy01节点的nginx服务查看VIP是否漂移到proxy02节点。
在这里插入图片描述
下面开始配置nginx的配置文件,需要注意的是如果在编译安装nginx的时候没有安装stream模块,需要再次添加stream模块编译安装一次。

worker_processes  1;
events {
    worker_connections  1024;
}
##################  添加如下内容 ########################################
stream {
#定义日志的格式和日志文件的路径
   log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
    access_log  /var/log/nginx/k8s-access.log  main;

#master01的IP地址和master02的IP地址
    upstream k8s-apiserver {
        server 192.168.80.132:6443;
        server 192.168.80.133:6443;
    }
    server {
                listen 6443;
                proxy_pass k8s-apiserver;
    }
    }
#####################################################################
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;


#由于日志文件路径不存在需要手动创建
mkdir -p /var/log/nginx

重启nginx服务,并且访问VIP,可以浏览网页。
在这里插入图片描述
代理端其实已经完成了,这时就需要修改node节点中的配置文件,将apiserver的地址改为代理端的VIP。

#移动到/opt/kubernetes/cfg
cd /opt/kubernetes/cfg
vim bootstrap.kubeconfig 
vim kubelet.kubeconfig 
vim kube-proxy.kubeconfig 

将这三个配置文件中的serverip改为代理的VIP。

 server: https://192.168.80.130:6443

查看是否都改为VIP地址。

grep 130 *

在这里插入图片描述
接着重启kubelet、buke-proxy

systemctl restart kubelet.service
systemctl restart kube-proxy.service 

查看proxy代理端的日志文件,是否有node节点的请求到master节点。这里的日志文件格式是参照nginx配置文件所定义的日志文件格式。 log_format main ‘$remote_addr u p s t r e a m a d d r − [ upstream_addr - [ upstreamaddr[time_local] $status $upstream_bytes_sent’;来访IP地址-跳转上游服务器IP地址-日期状态码

[root@proxy_01 nginx]# tail k8s-access.log 
192.168.80.134 192.168.80.133:6443 - [02/May/2020:12:12:16 +0800] 200 1121
192.168.80.135 192.168.80.132:6443 - [02/May/2020:12:12:16 +0800] 200 1119
192.168.80.135 192.168.80.132:6443 - [02/May/2020:12:12:16 +0800] 200 1120
192.168.80.135 192.168.80.133:6443 - [02/May/2020:12:12:16 +0800] 200 1120
192.168.80.135 192.168.80.132:6443 - [02/May/2020:12:12:17 +0800] 200 1566
192.168.80.134 192.168.80.133:6443 - [02/May/2020:12:12:26 +0800] 200 1566

到这步其实已经完成了代理的搭建,我们可以创建一个nginx的pod。

kubectl run nginx --image=nginx

之后我们用命令查看pod的状态

[root@master_01 cfg]# kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
nginx-dbddb74b8-wl7qx   1/1     Running   0          10m

详细的pod信息我们用可以查看到具体的IP地址:

[root@master_01 cfg]# kubectl get pods -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP            NODE             NOMINATED NODE
nginx-dbddb74b8-wl7qx   1/1     Running   0          27m   172.17.59.2   192.168.80.134   <none>

这时我们在node节点访问pod的IP地址:172.17.59.2
在node节点中打开浏览器,输入pod的IP地址。
在这里插入图片描述
我们也可以用curl命令:
在这里插入图片描述
要想查看pod中的nginx的日志文件需要创建一个匿名用户的,可以有权限查看pod内部的日志。

kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous
clusterrolebinding.rbac.authorization.k8s.io/cluster-system-anonymous created

创建用户需要在etcd中添加的所以在任意master节点中添加都没有关系。最后查看日志。
在这里插入图片描述
这样Kubernetes的代理就搭建完毕了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值