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

简介: 实验拓扑:

三、创建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服务:

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


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


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

相关文章
|
11月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
1099 3
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1308 33
|
存储 人工智能 Kubernetes
ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with AI Extension组件,在Kubernetes环境中为大语言模型(LLM)推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
442 21
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
449 2
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
1048 3
|
负载均衡 应用服务中间件 nginx
解决nginx配置负载均衡时invalid host in upstream报错
在Windows环境下,配置Nginx 1.11.5进行负载均衡时遇到问题,服务无法启动。错误日志显示“invalid host in upstream”。检查发现上游服务器列表中,192.168.29.128的主机地址无效。负载均衡配置中,两个服务器地址前误加了&quot;http://&quot;。修正方法是删除上游服务器列表和proxy_pass中的&quot;http://&quot;。问题解决后,Nginx服务应能正常启动。
1306 4
解决nginx配置负载均衡时invalid host in upstream报错
|
负载均衡 算法 应用服务中间件
nginx自定义负载均衡及根据cpu运行自定义负载均衡
nginx自定义负载均衡及根据cpu运行自定义负载均衡
513 1

热门文章

最新文章

推荐镜像

更多