ingress-nginx-controller 部署以及优化
一、说明
- 本文使用的ingress-nginx v1.0 最新版本,v1.0 适用于 Kubernetes 版本 >= v1.19 小于这个版本的k8s集群,请降级ingress-nginx。
 
二、部署
部署ingress-nginx 比较简单,直接下载github上的 deploy.yaml 部署即可,如果需要优化请看步骤三。
由于网络问题镜像如果拉取失败,可以使用下面我提交到hub.docker 上的镜像:
所需镜像
# 对应官方k8s.gcr.io/ingress-nginx/controller:1.0
docker pull koala2020/ingress-nginx-controller:v1
#对应官方k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0
docker pull koala2020/ingress-nginx-kube-webhook-certgen:v1
1、下载 ingres-nginx 的 deploy.yaml 文件
由于github 上目录比较多,涵盖了几乎所有平台,所以需要根据自己情况选择,文章是centos 举例:
下载 github 上 /deploy/static/provider/baremetal/ 目录下的deploy.yaml
wget  https://github.com/kubernetes/ingress-nginx/blob/controller-v1.0.0/deploy/static/provider/baremetal/deploy.yaml -O deploy.yaml 
2、部署
默认不做任何修改即可运行
kubectl apply -f  deploy.yaml
#删除请使用:
kubectl delete -f  deploy.yaml
3、查看运行状态
显示Completed 状态的是两个已经完成任务Job 不用管。
[root@k8s-master01 baremetal]# kubectl get pods -n ingress-nginx 
NAME                                       READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-gsllw       0/1     Completed   0          94m
ingress-nginx-admission-patch-7bvsd        0/1     Completed   0          94m
ingress-nginx-controller-f54b4c9bd-tk7fn   1/1     Running     0          94m
#查看 service
[root@k8s-master01 baremetal]# kubectl get svc -n ingress-nginx
NAME                                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.0.0.112   <none>        80:30220/TCP,443:32164/TCP   102m
ingress-nginx-controller-admission   ClusterIP   10.0.0.129   <none>        443/TCP                      102m
到此 ingress-nginx 就可以正常运行,如果集群中有ingres 项目,那么使用 项目域名:30220 端口号就可以访问了,这个端口号是上面ingress-nginx-controller service nodePort随机的。
三、优化
在步骤二里运行ingress-nginx 是不是感觉有问题,例如:
1、每次部署ingres-nginx 都随机一个nodePort 是不是很不方便;
2、使用域名:端口 对外提供服务不人性化;
3、所有的访问都集中在一个 ingres-nginx 上 pod,没有起到负载均衡的作用(默认ingress-nginx v1.0 启用一个副本);
所有综上所诉我们还需要简单的调整参数
4、由于新版本特性,需要ingress-nginx 需要增加 ingressClass,如果老项目没有 ingressClass 怎么办?
- 负载均衡问题
把配置文件里的 Deployment 换成 DaemonSet 模式,这样保每一台node上都启用 ingress-nginx-controller pod副本。 
部分参数如下:
# Source: ingress-nginx/templates/controller-deployment.yaml
apiVersion: apps/v1
#kind: Deployment   //注释掉
kind: DaemonSet     //改为此模式
metadata:
  labels:
    helm.sh/chart: ingress-nginx-4.0.1
...
...
- 端口问题
默认ingress-nginx 随机提供node port 端口,体验不好,因此需开启hostNetwork 启用80、443端口(ingress-nginx 使用的是7层代理),配置如下:
依然是修改 Deployment 下面的 spec 
    spec:
      hostNetwork: true   //增加
      dnsPolicy: ClusterFirst
      containers:
        - name: controller
          image: koala2020/ingress-nginx-controller:v1 // 镜像地址换成自己私有仓库地址
          imagePullPolicy: IfNotPresent
          lifecycle:
- ingressClass 问题
如果不关心 ingressClass,或者很多没有 ingressClass 配置的 ingress 对象,需要添加参数 ingress-controller --watch-ingress-without-class=true。 
args:
  - /nginx-ingress-controller
  - --publish-service=$(POD_NAMESPACE)/ingress-nginx-dev-v1-test-controller
  - --election-id=ingress-controller-leader
  - --controller-class=k8s.io/ingress-nginx
  - --configmap=$(POD_NAMESPACE)/ingress-nginx-dev-v1-test-controller
  - --validating-webhook=:8443
  - --validating-webhook-certificate=/usr/local/certificates/cert
  - --validating-webhook-key=/usr/local/certificates/key
  - --watch-ingress-without-class=true  //新增
...
...
添加参数  - --watch-ingress-without-class=true 以后的ingres 会在 ADDRESS 绑定了后端的宿主机ip
而CLASS 为空是因为没有写jenkins的ingressClass,如果启用- --watch-ingress-without-class=true 就不用在关心ingressClass 问题;
[root@k8s-master01 k8s]# kubectl  get ing -A
NAMESPACE   NAME      CLASS    HOSTS                 ADDRESS                                           PORTS     AGE
default     jenkins   <none>   jenkins.example.com   192.168.100.170,192.168.100.171,192.168.100.172   80, 443   3d8h
- ingressClass配置示例:
 
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  labels:
    app.kubernetes.io/component: controller
  name: nginx
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"
spec:
  controller: k8s.io/ingress-nginx
												
											ingress-nginx-controller 部署以及优化的更多相关文章
- 云原生之旅 - 8)云原生时代的网关 Ingress Nginx
		
前言 当我们在Kubernetes部署的服务需要暴露给外部用户使用时,有三种选择:LoadBalancer,NodePort, Ingress. LoadBalancer类型得结合各个Cloud Pr ...
 - kubernetes nginx ingress controller部署
		
Kubernetes nginx ingress controller部署 1.下载kubernetes nginx的yaml文件 Wget https://raw.githubusercontent ...
 - Nginx Ingress on TKE 部署最佳实践
		
概述 开源的 Ingress Controller 的实现使用量最大的莫过于 Nginx Ingress 了,功能强大且性能极高.Nginx Ingress 有多种部署方式,本文将介绍 Nginx I ...
 - 基于k8s集群部署prometheus监控ingress nginx
		
目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...
 - vue-小爱ADMIN系列文章(二):微信微博等分享,国际化,前端性能优化,nginx服务器部署
		
最近在做我的小爱ADMIN后台管理系统,结合当前市场后台管理系统对相关功能的需求,我又开始新增了一些新的功能和组件,如分享功能组件,项目国际化功能:项目完成后,部署在nginx服务器,发现首次访问的速 ...
 - 【夯实Nginx基础】Nginx工作原理和优化、漏洞
		
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
 - Nginx工作原理和优化、漏洞
		
1. Nginx的模块与工作原理 第三方模块:HTTP Upstream Request Hash模块.Notice模块和HTTP Access Key模块. 图1-1展示了Nginx模块常规的HT ...
 - Nginx 工作原理和优化、漏洞
		
1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(locat ...
 - Nginx工作原理和优化、漏洞(转)
		
查看安装了哪些模块命令: [root@RG-PowerCache-X xcache]# nginx/sbin/nginx -Vnginx version: nginx/1.2.3built by gc ...
 - nginx服务部署 说明
		
第1章 常用的软件 1.1 常用来提供静态服务的软件 Apache :这是中小型Web服务的主流,Web服务器中的老大哥, Nginx :大型网站Web服务的主流,曾经Web服务器中的初生牛犊 ...
 
随机推荐
- 「CF662C」 Binary Table
			
「CF662C」 Binary Table 题目链接 题目所给的 \(n\) 很小,于是我们可以考虑这样一种朴素做法:暴力枚举第 \(i\) 行是否翻转,这样每一行的状态就确定了,这时取每一列 \(0 ...
 - Modelsim波形显示字符
			
偶然在 QQ 群里看到一个大佬发的 Modelsim 波形显示字符,闲着没事拿来玩玩,并将改良过程也整理一下. 一.字符点阵产生 软件采用 PCtoLCD2002,打开后不需要设置,直接打字然后点击[ ...
 - 【转载】SpringMVC学习笔记
			
转载于:SpringMVC笔记 SpringMVC 1.SpringMVC概述 MVC: Model(模型): 数据模型,提供要展示的数据,:Value Object(数据Dao) 和 服务层(行为S ...
 - Go LRU Cache 抛砖引玉
			
目录 1. LRU Cache 2. container/list.go 2.1 list 数据结构 2.2 list 使用例子 3. transport.go connLRU 4. 结尾 正文 1. ...
 - PGSQL基础语句汇总
			
一.pgsql里面的数据类型不再介绍:https://www.runoob.com/postgresql/postgresql-data-type.html 二.常用基本语句 2.1.CREATE D ...
 - (Opencv07)绘制边框
			
(Opencv07)绘制边框 cv2.boundingRect(img) 这个函数可以获得一个图像的最小矩形边框一些信息 cv2.rectangle()可以画出该最小矩形边框 x, y ,w, h = ...
 - 深入刨析tomcat 之---第8篇  how tomcat works 第11章 11.9应用程序,自定义Filter,及注册
			
writed by 张艳涛, 标签:全网独一份, 自定义一个Filter 起因:在学习深入刨析tomcat的学习中,第11章,说了调用过滤链的原理,但没有给出实例来,自己经过分析,给出来了一个Filt ...
 - 深入刨析tomcat 之---第6篇  how tomcat works 第5章 容器实现原理
			
writedby 张艳涛
 - 关于clear:both;后有固定高度的原因及解决方法
			
不知道从什么时候开始,拥有clear:both;元素的父元素偶尔会出现固定的高度,之前给父元素加diaolay:hidden;临时处理,一直没搞清楚原因,今天又出现该问题,花费半天时间找出了原因记录一 ...
 - Kubernetes的基本概念和术语
			
Kubernetes中的大部分概念如Node.Pod.Replication Controller. Service等都可以被看作一种资源对象,几乎所有资源对象都可以通过 Kubernetes提供的k ...