一、说明

  • 本文使用的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. mybatis复杂映射

    1. 类型名对应 当实体类与表中字段完全一致时,mapper文件里返回类型用resultType,否则要用resultMap,并且建立resultMap映射 package com.rf.domain ...

  2. vue-qiankun公司微前端项稳定目落地后的总结(附github仓库demo,将会持续更新)

    ️本文为博客园社区首发文章,未获授权禁止转载 大家好,我是aehyok,一个住在深圳城市的佛系码农‍♀️,如果你喜欢我的文章,可以通过点赞帮我聚集灵力️. 个人github仓库地址: https:gi ...

  3. python -- 面向对象编程(属性、方法)

    一.属性 对象的属性(attribute)也叫做数据成员(data member). 如果想指向某个对象的属性,可以使用格式: object.attribute 属性又分为:私有属性和公有属性. 私有 ...

  4. PphpStorm常用操作整理

    本地修改记录:在项目名称上右键,点击Local History | Show History.你可以看到项目文件各个历史版本:Alt+Shift+C,可以看到项目最近的修改.这就是它的版本集成功能特性 ...

  5. Ubuntu 19.10安装Wine软件

    ======================================== 我使用的操作系统版本为Ubuntu 19.10 64位,如果是32位Ubuntu19.10则可以跳过步骤一 1.添加 ...

  6. 第十五篇 -- QListWidget与QToolButton(界面)

    效果图: 这还只是一个界面,并没有实现相应功能. 先看下这图的构成吧. 工具栏的就是将Action拖上去,这部分前面已经介绍过了,那就看下面这部分的构图. 1.左侧是一个工具箱(ToolBox)组件, ...

  7. (python函数04)zip(*sorted(zip()))

    zip(*sorted(zip())) 用这个玩意儿可以以对两个迭代对象进行排序. 示例代码01  cnts = [2, 4, 3, 6, 5] boundingBoxes = [(730, 20, ...

  8. Super-Mario-Host(超级玛丽)靶机

    仅供个人娱乐 靶机百度云下载  链接:https://pan.baidu.com/s/13l1FUgJjXArfoTOfcmPsbA 提取码:a8ox 一.主机发现 arp-scan -l 二.漏洞扫 ...

  9. python安全编程之指纹识别

    什么是cms CMS是Content Management System的缩写,意为"内容管理系统",这是百度百科的解释,意思是相当于网站的建站模板,整个网站架构已经集成好了,只需 ...

  10. CF832D题解

    题目传送门 Description 给定一棵树上的三个点 \(a,b,c\),你要制定两条起点和终点都在这三个点中的路径,使得两条路径重叠的节点最多. Solution 感觉我的方法和大众不同,显然是 ...