入口的入口控制器名称 class
Ingress controller name for the ingress class
我正在设置入口控制器、入口 class 和入口以在集群外公开服务。这是全新的集群设置。
我已经使用
设置了 nginx-ingress 控制器
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.0/deploy/static/provider/baremetal/deploy.yaml
根据我的理解,下一步是创建入口 class https://v1-18.docs.kubernetes.io/docs/concepts/services-networking/ingress/#ingress-class
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
name: external-lb
spec:
controller: example.com/ingress-controller
parameters:
apiGroup: k8s.example.com/v1alpha
kind: IngressParameters
name: external-lb
他们是怎么得到控制器的名字的example.com/ingress-controller
?
您将创建 IngressClass
作为 Installation with Manifests
步骤(第 3 步 here)的一部分。这将创建一个 IngressClass
看起来像:
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
name: nginx
# annotations:
# ingressclass.kubernetes.io/is-default-class: "true"
spec:
controller: nginx.org/ingress-controller
然后,要配置 Ingress
资源供 nginx
使用,只需在 Ingress
规范中指定 ingressClassName: nginx
,如 here 所示,并再次粘贴在下方:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: cafe-ingress
spec:
ingressClassName: nginx
tls:
- hosts:
- cafe.example.com
secretName: cafe-secret
rules:
- host: cafe.example.com
. . .
我有 运行 多个场景 IngressClass
、Ingress
和 Nginx Ingress Controller
。
场景一
- 具有自定义名称的 IngressClass
- Nginx 入口控制器,默认
--ingress-class
值为 nginx
- Ingress 使用与 IngressClass 名称相同的 ingressClassName
输出:响应 404
场景二
- 具有自定义名称的 IngressClass
- 带有自己的
ingress-class
入口测试的Nginx入口控制器
- Ingress 使用与 IngressClass 名称相同的 ingressClassName
输出:响应 404
场景三
- 名称为
test
的 IngressClass
- Nginx 入口控制器
--ingress-class
,值为 test
- 在 ingressClassName
中使用 test
进入
输出:正确响应
塞纳里奥 4
- 名称为
nginx
的 IngressClass
- Nginx 入口控制器
--ingress-class
,值为 nginx
- 在 ingressClassName
中使用 nginx
进入
输出:正确响应
结论
首先,请记住 Nginx
有 3 种类型。 Open Source Nginx Ingress Controller
,你可能正在使用它。 Nginx Incorporaton
(nginx 公司) 和 Nginx Incorporaton Plus
.
在其中一种情况下,当我将 spec.controller: nginx.org/ingress-controller
与 Nginx Ingress Controller
和参数 --ingress-class=nginx
一起使用时,在 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
后,控制器将处于 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
用于 Nginx Incorporated
,k8s.io/ingress-nginx
用于 Open Source Nginx Ingress
。
如果自定义值用于 controller Deployment manifest
中的 --ingress-class
参数,是否存在具有相同名称的 IngressClass
对象不会产生任何差异,集群如何工作,只要你保持 Ingress spec.ingressClass
值与控制器参数相同。此外,如果存在,IngressClass spec.controller
可以具有与所需模式“类域”相匹配的任何值,并且根本不会影响 Ingress
我集群上的工作流行为。
此外,如果我将 ingress-class
的正确值相应地放入 spec.ingressClass
属性 或 metadata.annotation.kubernetes.io/ingress.class
中,Ingress
工作正常。如果您尝试将两个值都放入同一个 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 Ingress Controlle. If you would like to use IngressClass
with other Ingress Controllers
like Traefik or Ambasador 进行了测试,您可以查看他们的发行说明。
我正在设置入口控制器、入口 class 和入口以在集群外公开服务。这是全新的集群设置。
我已经使用
设置了 nginx-ingress 控制器kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.0/deploy/static/provider/baremetal/deploy.yaml
根据我的理解,下一步是创建入口 class https://v1-18.docs.kubernetes.io/docs/concepts/services-networking/ingress/#ingress-class
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
name: external-lb
spec:
controller: example.com/ingress-controller
parameters:
apiGroup: k8s.example.com/v1alpha
kind: IngressParameters
name: external-lb
他们是怎么得到控制器的名字的example.com/ingress-controller
?
您将创建 IngressClass
作为 Installation with Manifests
步骤(第 3 步 here)的一部分。这将创建一个 IngressClass
看起来像:
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
name: nginx
# annotations:
# ingressclass.kubernetes.io/is-default-class: "true"
spec:
controller: nginx.org/ingress-controller
然后,要配置 Ingress
资源供 nginx
使用,只需在 Ingress
规范中指定 ingressClassName: nginx
,如 here 所示,并再次粘贴在下方:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: cafe-ingress
spec:
ingressClassName: nginx
tls:
- hosts:
- cafe.example.com
secretName: cafe-secret
rules:
- host: cafe.example.com
. . .
我有 运行 多个场景 IngressClass
、Ingress
和 Nginx Ingress Controller
。
场景一
- 具有自定义名称的 IngressClass
- Nginx 入口控制器,默认
--ingress-class
值为nginx
- Ingress 使用与 IngressClass 名称相同的 ingressClassName
输出:响应 404
场景二
- 具有自定义名称的 IngressClass
- 带有自己的
ingress-class
入口测试的Nginx入口控制器 - Ingress 使用与 IngressClass 名称相同的 ingressClassName
输出:响应 404
场景三
- 名称为
test
的 IngressClass - Nginx 入口控制器
--ingress-class
,值为test
- 在 ingressClassName 中使用
test
进入
输出:正确响应
塞纳里奥 4
- 名称为
nginx
的 IngressClass - Nginx 入口控制器
--ingress-class
,值为nginx
- 在 ingressClassName 中使用
nginx
进入
输出:正确响应
结论
首先,请记住 Nginx
有 3 种类型。 Open Source Nginx Ingress Controller
,你可能正在使用它。 Nginx Incorporaton
(nginx 公司) 和 Nginx Incorporaton Plus
.
在其中一种情况下,当我将 spec.controller: nginx.org/ingress-controller
与 Nginx Ingress Controller
和参数 --ingress-class=nginx
一起使用时,在 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
后,控制器将处于 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
用于 Nginx Incorporated
,k8s.io/ingress-nginx
用于 Open Source Nginx Ingress
。
如果自定义值用于 controller Deployment manifest
中的 --ingress-class
参数,是否存在具有相同名称的 IngressClass
对象不会产生任何差异,集群如何工作,只要你保持 Ingress spec.ingressClass
值与控制器参数相同。此外,如果存在,IngressClass spec.controller
可以具有与所需模式“类域”相匹配的任何值,并且根本不会影响 Ingress
我集群上的工作流行为。
此外,如果我将 ingress-class
的正确值相应地放入 spec.ingressClass
属性 或 metadata.annotation.kubernetes.io/ingress.class
中,Ingress
工作正常。如果您尝试将两个值都放入同一个 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 Ingress Controlle. If you would like to use IngressClass
with other Ingress Controllers
like Traefik or Ambasador 进行了测试,您可以查看他们的发行说明。