【云原生Kubernetes】K8S集群+负载均衡层+防火墙 实例(下)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 实验拓扑:

三、创建service资源

编写service对应的yaml文件,使用NodePort类型和TCP 30000端口将Nginx服务发布出去。

#1、编写service对应的yaml文件
 vim myservice.yaml
 apiVersion: v1
 kind: Service
 metadata: 
    name: yuji-nginx-svc
    namespace: default   
 spec:
   type: NodePort        #service类型设置为NodePort
   ports: 
   - port: 80            #service使用的端口号,ClusterIP后面跟的端口号。
     targetPort: 80      #需要转发到的后端Pod的端口号
     nodePort: 30000     #指定映射到物理机的端口号,k8s集群外部可以使用nodeIP:nodePort访问service
   selector:             
     app: yuji-nginx     #标签选择器要和上一步创建的pod的标签保持一致
 #创建service资源    
 kubectl apply -f myservice.yaml
 #2、查看service资源
 kubectl get svc
 NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
 kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP        27h
 yuji-nginx-svc   NodePort    10.96.100.164   <none>        80:30000/TCP   76s
 #查看service资源的详细信息
 kubectl describe svc yuji-nginx-svc  
 Name:                     yuji-nginx-svc
 Namespace:                default
 Labels:                   <none>
 Annotations:              <none>
 Selector:                 app=yuji-nginx
 Type:                     NodePort
 IP Families:              <none>
 IP:                       10.96.100.164
 IPs:                      10.96.100.164
 Port:                     <unset>  80/TCP
 TargetPort:               80/TCP
 NodePort:                 <unset>  30000/TCP
 Endpoints:                10.244.1.2:80,10.244.2.4:80    #service资源管理的2个pod
 Session Affinity:         None
 External Traffic Policy:  Cluster
 Events:                   <none>
 #3、测试使用nodeIP:nodePort访问nginx网页
 curl 192.168.10.20:30000   #node01
 curl 192.168.10.30:30000   #node02
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


四、搭建负载均衡层

负载均衡区域配置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=http://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 3344;                  #自定义监听端口
         proxy_pass k8s-nodes;
     }
 }
 http {
 ......
     #include /etc/nginx/conf.d/*.conf;    #建议将这一行注释掉,否则会同时加载/etc/nginx/conf.d/default.conf文件中的内容,nginx会同时监听80端口。
 }
 #检查配置文件语法是否正确
 nginx -t   
 #启动nginx服务,查看到已监听3344端口
 systemctl start nginx
 systemctl enable nginx
 netstat -natp | grep nginx 
 tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN             48395/nginx: master
 tcp        0      0 0.0.0.0:3344            0.0.0.0:*               LISTEN             48395/nginx: master
 #------------2、两台负载均衡器配置keepalived--------
 #安装keepalived服务
 yum install keepalived -y
 #修改keepalived配置文件
 vim /etc/keepalived/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 LB01   #lb01节点的为LB01,lb02节点的为LB02
 }
 #添加一个周期性执行的脚本
 vrrp_script check_nginx {
     script "/etc/nginx/check_nginx.sh"  #指定检查nginx存活的脚本路径
 }
 vrrp_instance VI_1 {
     state MASTER            #lb01节点的为 MASTER,lb02节点的为 BACKUP
     interface ens33         #指定网卡名称 ens33
     virtual_router_id 51    #指定组ID,两个节点要一致
     priority 100            #设置优先级,lb01节点设置为 100,lb02节点设置为 90
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
         192.168.10.100      #指定VIP地址
     }
     track_script {          #追踪脚本
         check_nginx         #指定vrrp_script配置的脚本
     }
 }
 #将配置文件中剩余的内容全都删除
 #主调度器lb01创建nginx状态检查脚本 
 vim /etc/nginx/check_nginx.sh
 #!/bin/bash
 #egrep -cv "grep|$$" 用于过滤掉包含grep 或者 $$ 表示的当前Shell进程ID
 count=$(ps -ef | grep nginx | egrep -cv "grep|$$")
 if [ "$count" -eq 0 ];then
     systemctl stop keepalived
 fi
 chmod +x /etc/nginx/check_nginx.sh  #为脚本增加执行权限
 #启动keepalived服务(一定要先启动了nginx服务,再启动keepalived服务,否则keepalived检测到nginx没有启动,会杀死自己)
 systemctl start keepalived
 systemctl enable keepalived
 ip addr             #查看主节点的VIP是否生成
 #测试使用VIP:3344访问web网页
 curl 192.168.10.100:3344
 #----------3、关闭主调度器的nginx服务,模拟故障,测试keepalived-------
 #关闭主调度器lb01的Nginx服务,模拟宕机,观察VIP是否漂移到备节点
 systemctl stop nginx
 ip addr
 systemctl status keepalived   #此时keepalived被脚本杀掉了   
 #备节点查看是否生成了VIP
 ip addr    #此时VIP漂移到备节点lb02
 #恢复主节点
 systemctl start nginx         #先启动nginx
 systemctl start keepalived    #再启动keepalived
 ip addr
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


五、配置防火墙服务器

iptables防火墙服务器,设置双网卡,并且配置SNAT和DNAT转换实现外网客户端可以通过12.0.0.1访问内网的Web服务。

  • 内网网卡ens33:192.168.10.1
  • 外网网卡ens36:12.0.0.1
##两台负载均衡器,将网关地址修改为防火墙服务器的内网IP地址
 vim /etc/sysconfig/network-scripts/ifcfg-ens33
 GATEWAY="192.168.10.1"
 systemctl restart network   #重启网络
 systemctl restart keepalived   #如果VIP丢失,需要重启一下keepalived
 ##配置防火墙服务器
 #-------------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 ens36 -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 ens36 -d 12.0.0.1 -p tcp --dport 3344 -j DNAT --to 192.168.10.100:3344
  #-A PREROUTING         //在PREROUTING链中添加规则        
  #-i ens36              //入站网卡
  #-d 12.0.0.254         //数据包的目的地址
  #-p tcp --dport 3344   //数据包的目的端口
  #-j DNAT --to 192.168.10.100:3344   //使用DNAT功能,将目的地址和端口转换成192.168.10.100:3344
 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:3344 to:192.168.10.100:3344
 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:3344 进行访问
复制代码


两台负载均衡器,将网关地址修改为防火墙服务器的内网IP地址,之后需要重启网络:

网络异常,图片无法展示
|


网络异常,图片无法展示
|


配置防火墙服务器:

网络异常,图片无法展示
|


网络异常,图片无法展示
|


客户端修改网关地址,测试访问内网的Web服务:

网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|

相关文章
|
6天前
|
弹性计算 监控 负载均衡
|
6天前
|
负载均衡 网络协议 网络安全
SLB-Backend多实例部署配置健康检查
【10月更文挑战第22天】
22 3
|
6天前
|
运维 负载均衡 算法
|
10天前
|
负载均衡 网络协议 数据库
选择适合自己的数据库多实例负载均衡技术
【10月更文挑战第23天】选择适合自己的数据库多实例负载均衡技术需要全面考虑多种因素。通过深入的分析和评估,结合自身的实际情况,能够做出明智的决策,为数据库系统的高效运行提供有力保障。
|
7天前
|
弹性计算 缓存 监控
SLB-Backend多实例部署
【10月更文挑战第21天】
18 5
|
10天前
|
缓存 负载均衡 监控
数据库多实例的负载均衡技术深入
【10月更文挑战第23天】数据库多实例负载均衡技术是确保数据库系统高效运行的重要手段。通过合理选择负载均衡策略、实时监控实例状态、不断优化调整,能够实现资源的最优分配和系统性能的提升。在实际应用中,需要根据具体情况灵活运用各种负载均衡技术,并结合其他相关技术,以满足不断变化的业务需求。
|
10天前
|
负载均衡 网络协议 数据安全/隐私保护
创建和删除负载均衡实例
【10月更文挑战第18天】
8 1
|
1月前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
109 17
|
1月前
|
Kubernetes 负载均衡 网络协议
在K8S中,负载均衡器有何作用?
在K8S中,负载均衡器有何作用?
|
1月前
|
负载均衡 Kubernetes 区块链
随机密码生成器+阿里k8s负载均衡型服务加证书方法+移动终端设计+ico生成器等
随机密码生成器+阿里k8s负载均衡型服务加证书方法+移动终端设计+ico生成器等
47 1