首页 > 系统相关 >Ingress-nginx+内部LB(nginx)实现业务负载均衡

Ingress-nginx+内部LB(nginx)实现业务负载均衡

时间:2023-02-27 23:32:00浏览次数:40  
标签:Ingress LB ingress nginx controller 镜像 k8s

注:本文使用k8s社区版ingress-nginx实现,涉及知识点:pod、pv、pvc、deployment、service、ingress、ingress-controller、nginx(loadbalance) 一. ingress介绍 1. ingress-nginx的kubernetes社区官网:  https://kubernetes.github.io/ingress-nginx/deploy/   2. ingress功能: 将Nginx的配置抽象成一个Ingress对象,每添加一个新的服务只需写一个新的Ingress的yaml文件即可。 3. ingress具体的工作原理如下:  3.1:ingress contronler通过与k8s的api进行交互,动态的去感知k8s集群中ingress服务规则的变化,然后读取它,并按照定义的ingress规则,转发到k8s集群中对应的service。  3.2:而这个ingress规则写明了哪个域名对应k8s集群中的哪个service,然后再根据ingress-controller中的nginx配置模板,生成一段对应的nginx配置。  3.3:然后再把该配置动态的写到ingress-controller的pod里,该ingress-controller的pod里面运行着一个nginx服务,控制器会把生成的nginx配置写入到nginx的配置文件中,然后reload一下,使其配置生效,以此来达到域名分配置及动态更新的效果。 4. ingress可以解决的问题 1)动态配置服务 如果按照传统方式, 当新增加一个服务时, 我们可能需要在流量入口加一个反向代理指向我们新的k8s服务. 而如果用了Ingress, 只需要配置好这个服务, 当服务启动时, 会自动注册到Ingress的中, 不需要而外的操作。

2)减少不必要的端口暴露 配置过k8s的都清楚, 第一步是要关闭防火墙的, 主要原因是k8s的很多服务会以NodePort方式映射出去, 这样就相当于给宿主机打了很多孔, 既不安全也不优雅. 而Ingress可以避免这个问题, 除了Ingress自身服务可能需要映射出去, 其他服务都不要用NodePort方式。 5. ingress-nginx-controller功能: 将新加入的Ingress转化成Nginx的配置文件并使之生效 二. ingress-nginx安装

  1. 打开社区官网并定位至bare-metal 屏幕截图_20230225_190419.png
  2. 执行如下命令下载deploy.yaml文件  wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.6.4/deploy/static/provider/baremetal/deploy.yaml  2.1 修改deployment中replicas数量为2,另在spec中添加hostNetwork: true字段,添加此字段是为了暴露node的80和443端口,外部用户将通过node ip + 80/443端口方式访问集群内部服务。 屏幕截图_20230225_191633.png  2.2 查看deploy.yaml文件中需求的镜像版本 屏幕截图_20230225_193919.png  2.3 在阿里云或者其他镜像仓库查找对应镜像并下载 下载nginx-ingress-controller镜像: docker pull registry.aliyuncs.com/google_containers/nginx-ingress-controller:v1.5.1 下载kube-webhook-certgen镜像: docker pull registry.aliyuncs.com/google_containers/kube-webhook-certgen:v20220916-gd32f8c343  2.4 打包镜像并分别导入两个node节点中(这里有进行镜像重命名) 重命名镜像: docker tag registry.aliyuncs.com/google_containers/nginx-ingress-controller:v1.5.1 nginx-ingress-controller:v1.5.1 docker tag registry.aliyuncs.com/google_containers/kube-webhook-certgen:v20220916-gd32f8c343 kube-webhook-certgen:v20220916 打包镜像: docker save -o nginx-ingress-controller.tar nginx-ingress-controller:v1.5.1 docker save -o kube-webhook-certgen.tar kube-webhook-certgen:v20220916 在两个节点中分别加载镜像: docker load -i nginx-ingress-controller.tar docker load -i kube-webhook-certgen.tar 屏幕截图_20230225_201332.png
  3. 执行deploy.yaml文件进行安装  kubectl create -f deploy.yaml  执行完毕后查看pod ingress-nginx-controller的状态 image.png 三. 实验
  4. 实验架构 image.png 说明: 1.1 客户端访问业务域名,由DNS解析至LB ip(实验环境使用hosts解析代替DNS) 1.2 LB使用nginx实现,负责将请求转发至后端node 1.3 node接收到请求后,通过ipvs将流量转发到ingress-nginx-controller pod,然后由ingress-nginx-controller中的规则将流程分发到service对应的后端业务pod(即endpoint)。
  5. 实验步骤 2.1 创建pv卷,用于存储业务数据。 image.png 屏幕截图_20230227_215532.png 2.2 创建pvc,绑定上一步创建的pv image.png 2.3 创建deployment image.png 2.4 创建service image.png 执行如下命令在两个node节点的/tmp/lab目录添加index.html文件 [root@k-node01 lab]# touch index.html && echo "test12345" > index.html 然后测试svc是否ok image.png 2.5 创建ingress 屏幕截图_20230227_225829.png ingress创建后需等半分钟左右,待ingress-nginx-controller检测到新创建的ingress并将新ingress规则添加至其中。 2.6 在LB中添加规则,将外部请求转发至后端node image.png 其中,upstream字段中server对应的即为两个后端node的ip location字段中必须要添加 proxy_set_header Host $http_host; 表示http头还是使用客户端请求的,不进行替换,不然ingress无法识别请求的url。 2.7 在hosts文件中添加解析记录 image.png 2.8 打开浏览器,输入www.nginx-lab.com进行测试,如下图,表示成功 image.png

相关参考: https://blog.csdn.net/weixin_44729138/article/details/105978555

标签:Ingress,LB,ingress,nginx,controller,镜像,k8s
From: https://blog.51cto.com/u_11332082/6089306

相关文章

  • nginx介绍与配置详解
    内容介绍1、nginx基本概念(1)Nginx是什么,做什么事情Nginx是一个高性能的HTTP和反向代理web服务器,特点是占有内存少,并发能力强。因它的稳定性、简单的配置文件和低系统资......
  • Cephadm部署rgw ingress和nfs ingress(Pacific版本)
    rgwingress自动生成的配置keepalived的配置文件:/etc/keepalived/keepalived.conf#Thisfileisgeneratedbycephadm.vrrp_scriptcheck_backend{script"/u......
  • Gslb基础概念和原理
    GSLB基础概念和原理简概采用全局负载均衡(GSLB)的前提是在不同地区设立了多个数据中心,并不是所有的互联网服务都能做GSLB,前提是业务已经做了分布式部署的规划,无论用户从哪......
  • nginx代理本地目录配置文件
    #usernobody;worker_processes1;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx......
  • vite 打包vue3项目 nginx配置访问 生成dist文件夹文件
    其中一个是,vite项目执行“vitebuild”并部署上线后,在浏览器中访问就会有以下关于路由的奇怪问题:我们用嵌套路由开发的页面生成的路径,个别菜单在初次加载、或者二......
  • kubernetes之Ingress发布Dashboard(二)
    1.什么是DashboardDashboard是基于网页的Kubernetes用户界面。你可以使用Dashboard将容器应用部署到Kubernetes集群中,也可以对容器应用排错,还能管理集群资源。你......
  • nginx反向代理WebSocket
    1.nginx反向代理websocket原理2.nginx配置文件详解2.1map值映射2.2upstream2.3location3.nginx反向代理协议升级======================================......
  • Nginx安装jdk
    系统环境为CentOS-7-x86_64。一、文件下载 二、安装2.1文件准备2.2解压准备好gz安装包后,直接解压即安装,这里演示安装到/usr/java目录下。  移动安装包到/us......
  • docker for nginx run
    PSC:\Users\[user]>dockerpullnginx:latestlatest:Pullingfromlibrary/nginxbb263680fed1:Alreadyexistsa0bc35e70773:Pullcomplete077b9569ff86:Pullco......
  • K8S Pod Sidecar 应用场景之一-加入 NGINX Sidecar 做反代和 web 服务器
    KubernetesPodSidecar简介Sidecar是一个独立的容器,与Kubernetespod中的应用容器一起运行,是一种辅助性的应用。Sidecar的常见辅助性功能有这么几种:服务网格(s......