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的代理就搭建完毕了。
原文链接:https://blog.csdn.net/QwQNightmare/article/details/105887869
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/6948