Ingress 是什么

  • Ingress 是对k8s集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。
  • Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管。

最近发布了 1.0.0正式版, 有很多不兼容的改动.

名词说明:

注解 annotation
资源 resource
对象 object
控制器 controller

=============================================================

本文原始英文文档在此: https://kubernetes.github.io/ingress-nginx/#faq-migration-to-apiversion-networkingk8siov1

2021.8.27

欢迎

这是 NGINX Ingress 控制器 的文档.

它基于 Kubernetes Ingress resource 构建, 使用 ConfigMap 来保存 NGINX 的配置.

要了解更多关于使用 Ingress的内容, 点击这里 k8s.io .

开始

如果想快速开始请阅读这里 Deployment .

常见问题FAQ - 版本升级到 networking.k8s.io/v1

什么是 ingressClass , 为什么现在它对 Ingress-NGINX 控制器 用户如此重要 ?

IngressClass是一种 Kubernetes 资源, 请阅读后面的描述.

这个很重要, 安装Ingress-NGINX 控制器, 以前的版本不需要ingressClass对象. 但是从 1.0.0版本之后, 就必须需要ingressclass这个对象了.

在集群里, 如果有多个Ingress-NGINX 控制器, 那么所有控制器的实例必须知道它们服务的是什么类型的 Ingress对象. 设置 ingress 对象的 ingressClass 字段就可以让控制器知道.

_$ k ingressClass 说明
KIND: IngressClass
VERSION: networking.k8s.io/v1 DESCRIPTION:
IngressClass
IngressClass 表示 Ingress的类, 在 Ingress Spec 里使用.
使用 `ingressclass.kubernetes.io/is-default-class` 注解可以用来设置 IngressClass 是否为缺省的class.
当一个单独的 IngressClass 资源的此选项被设置为 true 时, 新的Ingress资源如果没有指定class字段, 则缺省使用这个IngressClass. FIELDS:
apiVersion <string>
APIVersion 定义一个对象的版本. 会转换已知的值到最新的内部值, 不认识的值则可能会被拒绝.
更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources kind <string>
Kind 是一个字符串值, 代表了这个对象的 REST 资源. 服务器会根据这个推断请求提交的服务终端(endpoint).
此值不可修改. 使用驼峰式语法.
更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds metadata <Object>
标准对象的元数据. 更多信息:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata spec <Object>
Spec用来定义 IngressClass 预期到达的状态. 更多信息:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status`

引发了什么变化 ?

主要有两大重要变更.

(变更 #1) 使用 K8s 1.21版本或更早版本, 使用如下方式来声明使用 ingress 资源 ;

  • apiVersion: extensions/v1beta1

  • apiVersion: networking.k8s.io/v1beta1

    (你会得到一个废弃警告, 但是ingress资源还是会被创建.)

从 K8s 1.22 版本之后, 你只能设置 "apiVersion:" 这个字段的值为 "networking.k8s.io/v1". 原因是 关于废弃ingress api 版本的官方说明.

(变更 #2) 当你升级到 K8s v1.22版本, 如果你已经在使用Ingress-NGINX 控制器, 已经存在的ingress对象在几种情况下不能正常工作. 阅读此文档来检查是不是你使用的场景.

ingressClassName 字段是什么 ?

ingressClassName 是ingress对象的spec下的字段.

% k ingress.spec.ingressClassName 说明
KIND: Ingress
VERSION: networking.k8s.io/v1 FIELD: ingressClassName <string> DESCRIPTION:
IngressClassName 是IngressClass集群资源的名字.
这个相关的IngressClass定义了用哪个控制器来实现这个资源.
这个字段用来代替废弃的 "kubernetes.io/ingress.class" 注解.
为了保持向后兼容, 如果也同时注解了这个字段, 那优先使用这个设置的值.
如果注解和此字段的设置不一致, 控制器会发出一个警告信息.
如果一个Ingress对象没有指定 ingressClassName字段, 则它会被忽略(也就是没有创建).
如果系统中有一个IngressClass对象设置了缺省选项, 而且当前Ingress没有设置ingressClassName字段, 则此Ingress也会使用系统缺省的设置.
相关更多信息, 请阅读 IngressClass 的文档.

注意: spec.ingressClassName 优先级比 注解(annotation) 高.

在我的集群里只有一个 Ingresss-NGINX controller 实例. 我应该怎么办 ?

  • 如果你只有一个 Ingress-NGINX 控制器实例, 而且你想用 ingressclass, 你应该在你的 ingressClass 资源声明里面添加 "ingressclass.kubernetes.io/is-default-class" 注解, 这样你新的Ingress对象就会使用缺省的设置.

在这种情况下, 你需要让你的控制器感知Ingress对象. 如果你有几个 Ingress对象, 而且他们没有设置 ingressClassName 字段,

而且也没有设置注解 (kubernetes.io/ingress.class) , 那么你应该用 [--watch-ingress-without-class=true](## 这个 '--watch-ingress-without-class' 是什么设置 ?) 参数来启动你的 ingress-controller .

你可以使用 .controller.watchIngressWithoutClass: true 来配置你的 helm chart 安装.

我们强烈建议你按下面的方法来创建你的 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对象声明中添加 "spec.ingressClassName=nginx"

在我的集群里有很多 ingress 对象. 我应该怎么办 ?

  • 如果你不关心 ingressClass , 或者你有很多没有配置ingressClass 的ingress对象, 你可以使用 --watch-ingress-without-class=true 来启动你的 ingress-controller .

这个 '--watch-ingress-without-class' 是什么设置 ?

  • 这个设置会作为一个参数, 传递给 ingress-controller 调用, 就像下面这样:
...
...
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
...
...

在我的集群里有很多 controller 而且已经用了 annotation ?

没问题, 它会依然保持工作, 不过我们强烈建议你测试验证一下.

在我的集群里有很多 controller 已经在运行了, 需要我使用新的规范吗?

在这种情况下, 你需要创建多个 ingressClasses (参加样例一). 但是一定要注意此时 ingressClass 工作在一种特别的方式下: 你需要修改 IngressClass 的 .spec.controller 的值来让控制器指向相应的ingressClass. 让我们看一些例子, 假设你现在有2个 Ingress类:

  • Ingress-Nginx-IngressClass-1 , 其设置 .spec.controller 为 "k8s.io/ingress-nginx1"
  • Ingress-Nginx-IngressClass-2 , 其设置 .spec.controller 为 "k8s.io/ingress-nginx2"

当部署你的 ingress控制器时, 你必须修改按如下方式修改 --controller-class 字段:

  • Ingress-Nginx-Controller-nginx1 使用 k8s.io/ingress-nginx1
  • Ingress-Nginx-Controller-nginx2 使用 k8s.io/ingress-nginx2

然后, 当你使用 IngressClassName = ingress-nginx2 来创建一个Ingress对象是, 它会根据 controller-class=k8s.io/ingress-nginx2 这个配置来查找控制器, 同时 Ingress-Nginx-Controller-nginx2 会监测指向 ingressClass="k8s.io/ingress-nginx2 的对象, 它会为这个对象提供服务, 而 Ingress-Nginx-Controller-nginx1 会忽略这个对象.

要注意, 如果你的 Ingress-Nginx-Controller-nginx2 启动时带了参数 --watch-ingress-without-class=true , 它会为一下对象提供服务:

  • 没有指定 ingress-class 属性的对象
  • 使用注解 --ingress-class 来设置并且内容相同的对象
  • 使用 --controller-class 来设定, 也就是和指定 .spec.controller 字段一样的对象

为什么 helm chart 里缺省禁用了 ingressClassResource ?

  • 如果这个字段被设置开启(enabled), 而且原来的集群里已经存在 ingress对象, 那原来已经存在的 ingress对象不在被关注(honored), 只有你创建的新的对象才会继承 ingressClass 的值.

NGINX Ingress控制器1.0.0升级迁移文档(翻译)的更多相关文章

  1. IIS6(Win2003) 使用.net 4.0 后,默认文档失效解决方案。

    IIS6(Win2003) 使用.net framework 4.0 后,默认文档失效解决方案. 用.net framework 4.0 开发的WEB项目,但放到iis6 中无法使用默认文档,状况如下 ...

  2. 智表ZCELL产品V1.4.0开发API接口文档 与 产品功能清单

    为了方便大家使用ZCELL,应网友要求,整理编写了相关文档,现与产品一起同步发布,供大家下载使用,使用过程中如有疑问,请与我QQ联系. 智表(ZCELL)V1.4.0版本  功能清单文档下载地址: 功 ...

  3. JIRA6.36-7.23数据迁移文档

    JIRA6.3.6-JIRA7.2.3数据迁移文档 安装JIRA7.2.3 安装包位于服务器/opt/SOFTWARE_PACKAGE目录下 建立JIRA安装的目录数据目录 cd /opt mkdir ...

  4. (转载)学校搭建使用nginx同时编译rtmp-module进行直播的技术文档

    原文地址:学校搭建使用 nginx 同时编译 rtmp-module 进行直播的技术文档 转载自我的大佬同学 MetalkgLZH.学校有几次需要全校观看网络直播的情况,但是学校的带宽不允许所有的班一 ...

  5. mysql数据库迁移文档

    数据库迁移文档 一.需求 确保数据库稳定的运行,为开发人员提供方便的测试数据库和生产数据库的环境. 二.数据库整体架构(master/slave) 1.slave数据库安装 rpm -Uvh http ...

  6. 在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制

    Swashbuckle.AspNetCore3.0 介绍 一个使用 ASP.NET Core 构建的 API 的 Swagger 工具.直接从您的路由,控制器和模型生成漂亮的 API 文档,包括用于探 ...

  7. airflow2.0.2分布式安装文档

    需要安装的组件 组件 功能 Airflow Webserver 查询元数据以监控和执行DAGs的web界面. Airflow Scheduler 它检查元数据数据库中的DAG和任务的状态,在必要时创建 ...

  8. Oracle11.2.0.4 RAC安装文档

    1 环境配置 参考官方文档<Grid Infrastructure Installation Guide for Linux> 1.1 软件环境 操作系统: [root@howe1 ~]# ...

  9. _00024 尼娜抹微笑伊拉克_云计算ClouderaManager以及CHD5.1.0群集部署安装文档V1.0

    笔者博文:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...

随机推荐

  1. java基础---设计模式(1)

    出处:https://blog.csdn.net/zhangerqing/article/details/8194653 java的设计模式分为三大类 创建型模式: 工厂方法模式.抽象工厂模式.单例模 ...

  2. Python 操作 MySQL 的5种方式

    不管你是做数据分析,还是网络爬虫,Web 开发.亦或是机器学习,你都离不开要和数据库打交道,而 MySQL 又是最流行的一种数据库,这篇文章介绍 Python 操作 MySQL 的5种方式,你可以在实 ...

  3. XDFZOI 月赛 201905 Sliver

    组题人自己组完过后,才发现自己还是太弱了... T1 简单模拟. 按照游戏规则直接模拟显然是不明智的,所以我们可以像石头剪刀布一样,将判断改变为检验. 同时,我们发现,一共只有48种牌,所以我们可以直 ...

  4. HTTP 2.0标准针对HTTP 1.X的五点改进

    HTTP 2.0兼容HTTP 1.X,同时大大提升了Web性能,进一步减少了网络延迟,减少了前端方面的工作.HTTP 1.X存在的缺点如下: 1)HTTP 1.0一次只允许在一个TCP连接上发起一个请 ...

  5. 管理员的基本防范措施 Linux系统安全及应用

    系统安全及应用一.账号安全基本措施① 系统账号清理② 密码安全控制③ 命令历史限制④ 终端自动注销二.SU命令切换用户① 用途及用法② 验证密码③ 限制使用su命令的用户④ 查看su操作记录补充三.L ...

  6. C语言typedef的用法详解

    C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样. 起别名的目的不是为了提高程序运行效率,而是为了编码方便.例如有一个结构体的名字是 stu,要想定义一个结构体变量就 ...

  7. [刘阳Java]_eayui-searchbox搜索组件_第6讲

    EasyUI中搜索框也是常用的基本组件,可以用到条件搜索中 <!DOCTYPE html> <html> <head> <meta charset=" ...

  8. python基础之列表推导式

    #列表推导式 ---> 返回的是列表 for语句 效率更高# 1*1 2*2 3*3 4*4 5*5 6*6 7*7 8*8 9*9# import time# to = time.clock( ...

  9. python + Excel数据读取(更新)

    data.xlsx 数据如下: import xlrd#1.读取Excel数据# table = xlrd.open_workbook("data.xlsx","r&qu ...

  10. 2021最新Java基础知总结,助力大厂offer

    本文是我花了三周时间整理出来的,希望对Java初学者有帮助~ Java概述 Java的特点 Java是一门面向对象的编程语言.面向对象和面向过程是一种软件开发思想. 面向过程就是分析出解决问题所需要的 ...