我已经运行了多个场景IngressClass
, Ingress
and Nginx Ingress Controller
.
场景1
- 具有自定义名称的 IngressClass
- 默认的 Nginx Ingress 控制器
--ingress-class
值为nginx
- Ingress 使用与 IngressClass 名称相同的 ingressClassName
输出:响应 404
场景2
- 具有自定义名称的 IngressClass
- Nginx Ingress 控制器拥有自己的
ingress-class
入口测试
- Ingress 使用与 IngressClass 名称相同的 ingressClassName
输出:响应 404
场景3
- IngressClass 与
test
name
- Nginx 入口控制器
--ingress-class
有价值test
- 入口使用
test
在 ingressClassName 中
输出:正确的响应
塞纳里奥 4
- IngressClass 与
nginx
name
- Nginx 入口控制器
--ingress-class
有价值nginx
- 入口使用
nginx
在 ingressClassName 中
输出:正确的响应
结论
首先,请记住,有 3 种类型Nginx
. Open Source Nginx Ingress Controller
,您可能正在使用它。Nginx Incorporaton
(nginx 公司)和Nginx Incorporaton Plus
.
在其中一种情况下,当我使用过spec.controller: nginx.org/ingress-controller
with Nginx Ingress Controller
有论据--ingress-class=nginx
, in Nginx Ingress Controller
pod 你会看到指向的条目k8s.io/ingress-nginx
.
要重现此行为,您需要部署IngressClass
使用特定控制器,然后部署 nginx。
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
name: nginx
spec:
controller: nginx.org/ingress-controller
部署后Nginx Ingress Controller
,控制器 Pod 将位于CrashLoopBackOff
状态。在日志中您将找到条目:
E1118 15:42:19.008911 8 main.go:134] Invalid IngressClass (Spec.Controller) value "nginx.org/ingress-controller". Should be "k8s.io/ingress-nginx"
仅当IngressClass
名称设置为nginx
.
我会这样说nginx.org/ingress-controller
is for Nginx Incorporated
and k8s.io/ingress-nginx
for Open Source Nginx Ingress
.
如果自定义值用于--ingress-class
论据中的controller Deployment manifest
, 存在或不存在IngressClass
只要保留 Ingress,具有相同名称的对象不会对集群的工作方式产生任何影响spec.ingressClass
值与控制器参数相同。此外,如果存在,IngressClassspec.controller
可以具有与所需模式“类似域”匹配的任何值,并且不会影响Ingress
我的集群上的工作流程行为根本不存在。
此外,Ingress
如果我输入正确的值,效果很好ingress-class
要么spec.ingressClass
财产或metadata.annotation.kubernetes.io/ingress.class
因此。如果您尝试将两个值放入同一个 Ingres 对象,则会出现如下错误:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
ingressClassName: nginx
The Ingress "test-ingress" is invalid: annotations.kubernetes.io/ingress.class: Invalid value: "nginx": can not be set when the class field is also set
请记住,它仅经过测试Nginx 入口控制器 https://kubernetes.github.io/ingress-nginx/。如果您想使用IngressClass
和其他人Ingress Controllers
like Traefik https://traefik.io/ or 大使 https://www.getambassador.io/,你会检查他们的发行说明。