四、搭建负载均衡层
负载均衡区域配置Keepalived+Nginx,实现负载均衡高可用,通过VIP 192.168.10.100和自定义的端口号即可访问K8S发布出来的服务。
lb01:192.168.10.40
lb02:192.168.10.50
VIP:192.168.10.100
#---------1、两台负载均衡器配置nginx-------------- #关闭防火墙和selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/enforcing/disabled/' /etc/selinux/config #设置主机名 hostnamectl set-hostname lb01 su hostnamectl set-hostname lb02 su #配置nginx的官方在线yum源 cat > /etc/yum.repos.d/nginx.repo << 'EOF' [nginx] name=nginx repo baseurl=https://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 EOF yum install nginx -y #修改nginx配置文件,配置四层反向代理负载均衡,指定k8s群集2台node的节点ip和30000端口 vim /etc/nginx/nginx.conf events { worker_connections 1024; } #在http块上方,添加stream块 stream { upstream k8s-nodes { server 192.168.10.20:30000; #node01IP:nodePort server 192.168.10.30:30000; #node02IP:nodePort } server { listen 30000; #自定义监听端口 proxy_pass k8s-nodes; } } http { ...... #include /etc/nginx/conf.d/*.conf; #建议将这一行注释掉,否则会同时加载/etc/nginx/conf.d/default.conf文件中的内容,nginx会同时监听80端口。 } #检查配置文件语法是否正确 nginx -t #启动nginx服务,查看到已监听30000端口 systemctl start nginx systemctl enable nginx netstat -natp | grep nginx tcp 0 0 0.0.0.0:30000 0.0.0.0:* LISTEN 53751/nginx: master #------------2、两台负载均衡器配置keepalived-------- #安装keepalived yum install -y keepalived #在/etc/keepalived目录下创建nginx检测脚本 cd /etc/keepalived/ vim check_nginx.sh #!/bin/bash #检测nginx是否启动了 A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then #如果nginx没有启动就启动nginx systemctl start nginx #重启nginx if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行VIP转移 killall keepalived fi fi #给脚本执行权限 chmod +x check_nginx.sh #修改keepalived配置文件 vim keepalived.conf ! Configuration File for 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 NGINX_01 #修改主备id #删掉这里的四行vrrp } #加入周期性检测nginx服务脚本的相关配置 vrrp_script check_nginx{ script "/etc/keepalived/check_nginx.sh" #心跳执行的脚本,检测nginx是否启动 interval 2 #(检测脚本执行的间隔,单位是秒) } vrrp_instance VI_1 { state MASTER interface ens33 #修改网卡名称 virtual_router_id 51 priority 100 #优先级,主不改,备改成比100小就行 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.10.100 #修改VIP地址 } #添加跟踪(执行脚本) track_script{ check_nginx } } #重启服务 systemctl restart keepalived.service systemctl enable keepalived.service #备服务器下载好keepalived后,在主服务器上将脚本和keepalived配置文件传过去 [root@nginx01 keepalived]# scp * 192.168.10.50:`pwd` #传过去后修改三处 router_id NGINX_02 state BACKUP priority 90 #然后重启服务 systemctl restart keepalived.service systemctl enable keepalived.service
五、配置网关服务器
网关服务器,设置双网卡,并且配置SNAT和DNAT转换实现外网客户端可以通过12.0.0.1访问内网的Web服务。
内网网卡ens33:192.168.10.1
外网网卡ens32:12.0.0.1
##两台负载均衡器,将网关地址修改为防火墙服务器的内网IP地址 vim /etc/sysconfig/network-scripts/ifcfg-ens33 GATEWAY="192.168.10.1" systemctl restart network #重启网络 ##配置防火墙服务器 #-------------1、关闭防火墙和selinux------------- systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/enforcing/disabled/' /etc/selinux/config #------------2、开启路由转发功能---------------- vim /etc/sysctl.conf net.ipv4.ip_forward = 1 //在文件中增加这一行,开启路由转发功能 sysctl -p //加载修改后的配置 #------------3、配置iptables策略--------------- #先将原有的规则清除 iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X #设置SNAT服务,解析源地址。修改nat表中的POSTROUTING链。 #将源地址192.168.10.100转换为为12.0.0.1 iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens32 -j SNAT --to 12.0.0.1 #-t nat //指定nat表 #-A POSTROUTING //在POSTROUTING链中添加规则 #-s 192.168.10.100/24 //数据包的源地址 #-o ens36 //出站网卡 #-j SNAT --to 12.0.0.1 //使用SNAT服务,将源地址转换成公网IP地址。 #设置DNAT服务,解析目的地址。修改nat表中的PRETROUTING链。 #将目的地址12.0.0.1:3344 转换成 192.168.10.100:3344 iptables -t nat -A PREROUTING -i ens32 -d 12.0.0.1 -p tcp --dport 8080 -j DNAT --to 192.168.10.100:30000 #-A PREROUTING //在PREROUTING链中添加规则 #-i ens32 //入站网卡 #-d 12.0.0.254 //数据包的目的地址 #-p tcp --dport 3344 //数据包的目的端口 #-j DNAT --to 192.168.10.100:3344 //使用DNAT功能,将目的地址和端口转换成192.168.10.100:3344 #查看策略 [root@wall ~]# iptables -t nat -nL Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- 0.0.0.0/0 12.0.0.1 tcp dpt:8080 to:192.168.10.100:30000 Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 192.168.10.0/24 0.0.0.0/0 to:12.0.0.1 ##客户端修改网关配置文件,测试访问内网的Web服务 客户端IP地址:12.0.0.12,将网关地址设置为防火墙服务器的外网网卡地址:12.0.0.1 浏览器输入 http://12.0.0.1:8080 进行访问
配置客户端