一、说明

  • 本文使用的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. 如何为HttpServer服务器配置PHP FastCGI,从而让HttpServer具备动态交互能力

    一.软件准备 1.下载HttpServer :HttpServer.zip HttpServer是一款windows平台下基于IOCP模型的轻量级.高并发.高性能web服务器(参见文章). 2.下载W ...

  2. 章节1-Grafana Dashboard的简单应用(2)

    目录 使用Grafana创建可视化Dashboard 1. Add data sources - Prometheus 2. 导入 Dashboard 模板 2.1 Node Exporter for ...

  3. OpenResty简介

    OpenResty(也称为 ngx_openresty)是一个全功能的 Web 应用服务器.它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项. 通过揉和众多设计良好的 ...

  4. CTF-Streamgame2-writeup

    Streamgame2 题目信息: 附件: streamgame2.py from flag import flag assert flag.startswith("flag{") ...

  5. PyCharm代码区不能编辑的解决办法

    问题: 修改之前的Python代码时发现代码区无法编辑,无意中输入i后又可以编辑了. 解决: 原因是打开了工具中的vim Emulator编辑模式,把vim Emulator前面的勾取消即可.

  6. 使用 VSCode 搭建 Flutter环境

    概述 编辑器使用 vscode,不再安装 Android Studio. 安装 Git 点击这里 下载并安装 Git 配置 Java 环境 下载和安装 JDK 点击下载 Java SE Develop ...

  7. android体温登记APP开发过程+问题汇总+源码

    源码上传至https://github.com/durtime/myproject下的temperature 实际效果:   开发过程 1.首先进行布局文件的编写,布局前台页面 2.布置两个按钮,一个 ...

  8. [刘阳Java]_纯CSS代码实现内容过滤效果

    继续我们技术专题课,我们今天给大家带来的是一个比较酷炫的"纯CSS代码实现内容过滤效果",没有加入任何JS的效果.全部都是应用CSS3的新增选择器来实现的.先看效果截图 实现思路 ...

  9. 【LeetCode】523. 连续的子数组和

    523. 连续的子数组和 知识点:数组:前缀和: 题目描述 给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组: 子数组大小 至少为 2 ,且 ...

  10. 【学习笔记】pytorch中squeeze()和unsqueeze()函数介绍

    squeeze用来减少维度, unsqueeze用来增加维度 具体可见下方博客. pytorch中squeeze和unsqueeze