一、说明

  • 本文使用的ingress-nginx v1.0 最新版本,v1.0 适用于 Kubernetes 版本 >= v1.19 小于这个版本的k8s集群,请降级ingress-nginx。

1、ingress-nginx github地址

2、官网

二、部署

部署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 部署以及优化的更多相关文章

  1. 云原生之旅 - 8)云原生时代的网关 Ingress Nginx

    前言 当我们在Kubernetes部署的服务需要暴露给外部用户使用时,有三种选择:LoadBalancer,NodePort, Ingress. LoadBalancer类型得结合各个Cloud Pr ...

  2. kubernetes nginx ingress controller部署

    Kubernetes nginx ingress controller部署 1.下载kubernetes nginx的yaml文件 Wget https://raw.githubusercontent ...

  3. Nginx Ingress on TKE 部署最佳实践

    概述 开源的 Ingress Controller 的实现使用量最大的莫过于 Nginx Ingress 了,功能强大且性能极高.Nginx Ingress 有多种部署方式,本文将介绍 Nginx I ...

  4. 基于k8s集群部署prometheus监控ingress nginx

    目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...

  5. vue-小爱ADMIN系列文章(二):微信微博等分享,国际化,前端性能优化,nginx服务器部署

    最近在做我的小爱ADMIN后台管理系统,结合当前市场后台管理系统对相关功能的需求,我又开始新增了一些新的功能和组件,如分享功能组件,项目国际化功能:项目完成后,部署在nginx服务器,发现首次访问的速 ...

  6. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  7. Nginx工作原理和优化、漏洞

    1.  Nginx的模块与工作原理 第三方模块:HTTP Upstream Request Hash模块.Notice模块和HTTP Access Key模块. 图1-1展示了Nginx模块常规的HT ...

  8. Nginx 工作原理和优化、漏洞

    1.  Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(locat ...

  9. Nginx工作原理和优化、漏洞(转)

    查看安装了哪些模块命令: [root@RG-PowerCache-X xcache]# nginx/sbin/nginx -Vnginx version: nginx/1.2.3built by gc ...

  10. nginx服务部署 说明

    第1章 常用的软件 1.1 常用来提供静态服务的软件   Apache :这是中小型Web服务的主流,Web服务器中的老大哥,   Nginx :大型网站Web服务的主流,曾经Web服务器中的初生牛犊 ...

随机推荐

  1. python远程备份mysql并压缩

    import osimport timeimport tarfileimport zipfile'''mysqldumpUsage: mysqldump [OPTIONS] database [tab ...

  2. sql2008编辑前200行怎么修改

    打开Microsoft SQL Server Management Studio--工具菜单--选项---SQL Server对象资源管理器---命令--右侧"编辑前n行命令的值:1000

  3. python 最大公约数 最小公倍数

    def gongyueshu(m,n): if m<n: m,n=n,m elif m==n: return m if m/n==int(m/n): return n else: for i i ...

  4. 数组去重汇总—v客学院技术分享

    上周基础班结束了数组的学习内容,这几天有时间整理了下几种比较常用的数组去重的方法供大家查阅!!!!! 话不多说,直接贴代码吧~~~~~~~ 欢迎大家指正,共同学习,一同进步!!! (php开发,web ...

  5. 微信小程序云开发-数据库-用户删除数据

    一.在商品详情页添加[删除单条数据]按钮 进入goodDetail.wxml页面,添加[删除单条数据]按钮,绑定点击事件removeGood()  二.进入goodDetail.js文件,定义remo ...

  6. 通过http将yum仓库发布

    说明:这里是Linux服务综合搭建文章的一部分,本文可以作为单独构建http和发布yum仓库到内网的参考. 注意:这里所有的标题都是根据主要的文章(Linux基础服务搭建综合)的顺序来做的. 如果需要 ...

  7. SQlL 中 where 1=1

    提升某种执行效率? 其实,1=1 是永恒成立的,意思无条件的,也就是说在SQL语句中有没有这个1=1都可以. 这个1=1常用于应用程序根据用户选择项的不同拼凑where条件时用的. 如:web界面查询 ...

  8. Win10强制程序高DPI缩放设置

    起因 工作原因,需要在win10上安装数个古老vc版本(vc6,vc2008,vc2010),但是显示器是2K的,DPI缩放有问题 尝试 VC6比较好解决:右键,属性,兼容性,更改高DPI设置,勾选替 ...

  9. (数据科学学习手札125)在Python中操纵json数据的最佳方式

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在日常使用Python的过程中,我们经常会 ...

  10. 解决跨网段intouch嵌入视频问题

    在自控项目中,一般会将视频网络和自控网络分开,分属于两个不同的逻辑网段,以避免局域网ip不够用的问题.这就造成了一个问题,如何实现在自控网络上位机访问摄像头并嵌入使用?这里其实很简单,因为这两个网络本 ...