NGINX Ingress控制器1.0.0升级迁移文档(翻译)
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
请阅读这里 关于废弃ingress api 版本的官方说明 如果你在K8s v1.22之前版本的集群里使用了ingress对象, 然后你想升级到 K8s v1.22, 那这个文档对你有用.
请阅读这里 关于IngressClass 对象的官方文档
什么是 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升级迁移文档(翻译)的更多相关文章
- IIS6(Win2003) 使用.net 4.0 后,默认文档失效解决方案。
IIS6(Win2003) 使用.net framework 4.0 后,默认文档失效解决方案. 用.net framework 4.0 开发的WEB项目,但放到iis6 中无法使用默认文档,状况如下 ...
- 智表ZCELL产品V1.4.0开发API接口文档 与 产品功能清单
为了方便大家使用ZCELL,应网友要求,整理编写了相关文档,现与产品一起同步发布,供大家下载使用,使用过程中如有疑问,请与我QQ联系. 智表(ZCELL)V1.4.0版本 功能清单文档下载地址: 功 ...
- JIRA6.36-7.23数据迁移文档
JIRA6.3.6-JIRA7.2.3数据迁移文档 安装JIRA7.2.3 安装包位于服务器/opt/SOFTWARE_PACKAGE目录下 建立JIRA安装的目录数据目录 cd /opt mkdir ...
- (转载)学校搭建使用nginx同时编译rtmp-module进行直播的技术文档
原文地址:学校搭建使用 nginx 同时编译 rtmp-module 进行直播的技术文档 转载自我的大佬同学 MetalkgLZH.学校有几次需要全校观看网络直播的情况,但是学校的带宽不允许所有的班一 ...
- mysql数据库迁移文档
数据库迁移文档 一.需求 确保数据库稳定的运行,为开发人员提供方便的测试数据库和生产数据库的环境. 二.数据库整体架构(master/slave) 1.slave数据库安装 rpm -Uvh http ...
- 在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制
Swashbuckle.AspNetCore3.0 介绍 一个使用 ASP.NET Core 构建的 API 的 Swagger 工具.直接从您的路由,控制器和模型生成漂亮的 API 文档,包括用于探 ...
- airflow2.0.2分布式安装文档
需要安装的组件 组件 功能 Airflow Webserver 查询元数据以监控和执行DAGs的web界面. Airflow Scheduler 它检查元数据数据库中的DAG和任务的状态,在必要时创建 ...
- Oracle11.2.0.4 RAC安装文档
1 环境配置 参考官方文档<Grid Infrastructure Installation Guide for Linux> 1.1 软件环境 操作系统: [root@howe1 ~]# ...
- _00024 尼娜抹微笑伊拉克_云计算ClouderaManager以及CHD5.1.0群集部署安装文档V1.0
笔者博文:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...
随机推荐
- QT从入门到入土(一)——Qt5.14.2安装教程和VS2019环境配置
引言 24岁的某天,承载着周围人的关心,一路南下.天晴心静,听着斑马,不免对未来有些彷徨.但是呢,人生总要走陌生的路,看陌生的风景,所幸可以听着不变的歌,关心自己的人就那么多.就像是对庸常生活的一次越 ...
- 「CF568C」 New Language
「CF568C」 New Language 一眼 \(\texttt{2-SAT}\) . 然后不会了. 又看了一会儿,然后发现只要我们确定每个位置大于字典序的两种最小的字母是啥,然后按位贪心,这个问 ...
- C语言:带参数的宏与函数的区别
带参数的宏和函数很相似,但有本质上的区别:宏展开仅仅是字符串的替换,不会对表达式进行计算:宏在编译之前就被处理掉了,它没有机会参与编译,也不会占用内存.而函数是一段可以重复使用的代码,会被编译,会给它 ...
- win10 IIS web.config加密不能访问:打不开 RSA 密钥容器
C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 找到密钥文件, 根据时间判断具体是哪一个文件,赋予network service读权限
- 【LeetCode】151. 翻转字符串里的单词(剑指offer 58-I)
151. 翻转字符串里的单词 知识点:字符串:双指针 题目描述 给你一个字符串 s ,逐个翻转字符串中的所有 单词 . 单词 是由非空格字符组成的字符串.s 中使用至少一个空格将字符串中的 单词 分隔 ...
- ES6 对象定义简写及常用的扩展方法
1.ES6 对象定义简写 es6提供了对象定义里的属性,方法简写方式: 假如属性和变量名一样,可以省略,包括定义对象方法function也可以省略 <script type="text ...
- Redis学习——数据结构下
4.集合(集合(set)类型也是用来保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素.) 1.命令 .集合内操作 1.添加元素 ...
- 前端开发入门到进阶第五集【安装SublimeServer】
参考:https://www.cnblogs.com/jf-67/p/8031614.html 1.我们可以直接在sublime text里面安装,Ctrl+shift+p进入命令模式,输入insta ...
- 聪明的YZH
[题目描述](杨子恒大佬) 聪明的YZH又开始搭积木了-- 他用1*1*1的立方体在n*m的平面搭积木,举几个他的杰作: 现在他又搭完了一个完美的杰作,他很好奇这对积木的表面积是多大 . [输入格式] ...
- dotnet部署出现Failed to load the dll from [ ... hostfxr.dll], HRESULT: 0x80070057
起因 最近看到.net core 3支持wpf了,尝试一下(如果可行,会特别利于脱离.net运行时) dotnet new wpf dotnet publish -c Release -r win-x ...