【云原生Kubernetes系列项目实战第一篇】k8s集群+高可用负载均衡层+防火墙( 提及年少一词,应与平庸相斥)(三)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 【云原生Kubernetes系列项目实战第一篇】k8s集群+高可用负载均衡层+防火墙( 提及年少一词,应与平庸相斥)(三)

四、搭建负载均衡层


负载均衡区域配置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 进行访问




配置客户端



目录
相关文章
|
1月前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
103 17
|
1月前
|
Kubernetes Cloud Native Ubuntu
云原生之旅:Kubernetes集群搭建与应用部署
【8月更文挑战第65天】本文将带你进入云原生的世界,通过一步步指导如何在本地环境中搭建Kubernetes集群,并部署一个简单的应用。我们将使用Minikube和Docker作为工具,探索云原生技术的魅力所在。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和实践技巧。
|
1月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
68 0
|
2月前
|
Kubernetes 监控 Cloud Native
Cluster Optimizer:一款云原生集群优化平台
**Cluster Optimizer** 是一款云原生集群优化平台,旨在通过自动化和智能化工具帮助企业降低云成本,解决云原生架构中的成本管理难题。面对资源闲置、配置不当和缺乏自动化优化机制等挑战,Cluster Optimizer能够深入分析云资源、应用和用户行为,精准识别优化机会,并给出具体建议,涵盖节点组、节点、GPU 节点、磁盘、持久卷和应用等多个维度。通过优化实例类型、自动扩缩容和资源分配,帮助企业降低成本、提升性能和效率。[点击此处](https://www.wiseinf.com.cn/docs/setup/) 免费安装和试用 **Cluster Optimizer 社区版**。
93 9
|
3月前
|
运维 Kubernetes Cloud Native
探索云原生:Kubernetes集群的部署与管理
【8月更文挑战第31天】 本文将带领读者深入了解云原生技术,特别是以Kubernetes为核心的集群部署和管理。文章不仅介绍了Kubernetes的基础概念和架构,还通过实际的代码示例展示了如何在云平台上搭建一个Kubernetes集群。我们将从基础的安装步骤到高级的服务部署,一步步揭示如何利用Kubernetes来简化容器化应用的管理与扩展。无论你是云原生新手还是希望提升现有技能的开发者,这篇文章都将成为你实践云原生技术的宝贵指南。
|
3月前
|
Kubernetes Cloud Native 应用服务中间件
云原生之旅:构建你的首个Kubernetes集群
【8月更文挑战第31天】在这个数字化迅速演进的时代,云原生技术如同星辰般璀璨。它不仅是企业数字化转型的引擎,更是开发者们探索创新的乐园。本文将带你开启一场云原生的奇妙旅程,从零开始,一步步构建属于你自己的Kubernetes集群。想象一下,当你的应用在云端自如地伸缩、滚动更新时,那份成就感和掌控感,是不是已经让你跃跃欲试了呢?那就让我们开始吧!
|
3月前
|
Kubernetes Cloud Native JavaScript
云原生之旅:Kubernetes 集群搭建与应用部署实践
【8月更文挑战第31天】云原生技术正在改变软件开发和运维的方式,而Kubernetes作为其核心组件之一,提供了一个强大的平台来编排容器化的应用。本文将引导你了解如何搭建一个基本的Kubernetes集群,并通过一个简单的Node.js应用示例,展示如何在集群中部署和管理应用。我们将从零开始,逐步构建起对Kubernetes的直观理解,并在实践中学习其核心概念。
|
存储 Kubernetes API
在K8S集群中,如何正确选择工作节点资源大小? 2
在K8S集群中,如何正确选择工作节点资源大小?
|
Kubernetes Serverless 异构计算
基于ACK One注册集群实现IDC中K8s集群以Serverless方式使用云上CPU/GPU资源
在前一篇文章《基于ACK One注册集群实现IDC中K8s集群添加云上CPU/GPU节点》中,我们介绍了如何为IDC中K8s集群添加云上节点,应对业务流量的增长,通过多级弹性调度,灵活使用云上资源,并通过自动弹性伸缩,提高使用率,降低云上成本。这种直接添加节点的方式,适合需要自定义配置节点(runtime,kubelet,NVIDIA等),需要特定ECS实例规格等场景。同时,这种方式意味您需要自行
基于ACK One注册集群实现IDC中K8s集群以Serverless方式使用云上CPU/GPU资源
|
Kubernetes API 调度
在K8S集群中,如何正确选择工作节点资源大小?1
在K8S集群中,如何正确选择工作节点资源大小?