Kubernetes 入口类的入口控制器名称

Kubernetes 入口类的入口控制器名称,kubernetes,kubernetes-ingress,Kubernetes,Kubernetes Ingress,我正在设置入口控制器、入口类和入口,以在集群外部公开服务。这是最新的群集设置 我已使用 kubectl应用-fhttps://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.0/deploy/static/provider/baremetal/deploy.yaml 根据我的理解,下一步是创建ingress类 他们是如何获得控制器的名称的example.com/ingres controller?您将创建in

我正在设置入口控制器、入口类和入口,以在集群外部公开服务。这是最新的群集设置

我已使用

kubectl应用-fhttps://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.0/deploy/static/provider/baremetal/deploy.yaml

根据我的理解,下一步是创建ingress类


他们是如何获得控制器的名称的
example.com/ingres controller

您将创建
ingresclass
,作为
安装清单的一部分(步骤3)。这将创建一个如下所示的
IngressClass

apiVersion:networking.k8s.io/v1beta1 种类:安格拉斯 元数据: 姓名:nginx #注释: #ingressclass.kubernetes.io/is-default-class:“true” 规格: 控制器:nginx.org/ingres-controller
然后,要配置要由
nginx
使用的
ingres
资源,只需在
ingres
规范中指定
ingresclassname:nginx
,如图所示,然后再次粘贴到下面:

apiVersion:networking.k8s.io/v1beta1 种类:入口 元数据: 名称:安格尔咖啡馆 规格: 名称:nginx tls: -主持人: -cafe.example.com 秘密名称:咖啡馆秘密 规则: -主持人:cafe.example.com . . .
我使用
IngressClass
Ingress
Nginx Ingress Controller
运行了多个场景

情景1

  • 具有自定义名称的入口类
  • Nginx入口控制器,具有默认值
    ——入口类
    值,该值为
    Nginx
  • 使用与IngressClass名称相同的IngressClass名称的入口
输出:响应404

场景2

  • 具有自定义名称的入口类
  • 具有自己的
    入口类的Nginx入口控制器
    入口测试
  • 使用与IngressClass名称相同的IngressClass名称的入口
输出:响应404

场景3

  • 带有
    test
    name的入口类
  • Nginx入口控制器
    --入口类
    带值
    测试
  • 在ingressClassName中使用
    测试
输出:正确响应

Senario 4

  • 带有
    nginx
    名称的入口类
  • Nginx入口控制器
    --入口类
    带值
    Nginx
  • 使用ingressClassName中的
    nginx
    进入
输出:正确响应

结论

首先,请记住有三种类型的
Nginx
<代码>开源Nginx入口控制器
,您可能正在使用它
Nginx Incorporaton
(Nginx inc)和
Nginx Incorporaton Plus

在其中一个场景中,当我将
spec.controller:nginx.org/ingres controller
nginx-ingres-controller
一起使用参数
--ingres class=nginx
,在
nginx-ingres-controller
中,您将看到指向
k8s.io/ingres-nginx
的条目

要重现此行为,您需要使用特定控制器部署
ingresclass
,然后部署nginx

apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
  name: nginx
spec:
  controller: nginx.org/ingress-controller
部署
Nginx入口控制器
后,控制器吊舱将处于
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
name设置为
nginx

我想说,
nginx.org/ingres controller
是针对
nginx Incorporated
的,
k8s.io/ingres nginx
是针对
开源nginx ingres

如果自定义值用于
控制器部署清单
中的
--入口类
参数,则存在或不存在具有相同名称的
入口类
对象不会对集群的工作方式产生任何影响,只要将入口
规范.ingresclass
值与控制器参数保持相同即可。此外,如果存在,IngressClass
spec.controller
可以具有与所需模式“类似域”匹配的任何值,并且根本不会影响集群上的
Ingress
工作流行为

此外,
ingres
如果我将
ingres类的正确值相应地放入
spec.ingresclass
属性或
metadata.annotation.kubernetes.io/ingres.class
中,则可以正常工作。如果您试图将两个值放在同一个Ingres对象上,则会出现如下错误:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  ingressClassName: nginx
入口“测试入口”无效:annotations.kubernetes.io/ingres.class:无效值:“nginx”:在同时设置class字段时无法设置


请记住,它只测试了一次。如果您想将
IngressClass
与其他
Ingress控制器一起使用,您可以查看他们的发行说明。

您能否澄清您想要实现的具体目标?您有两个入口控制器,如Nginx Ingress和GCE Ingress,您想强制此特定入口使用其中一个,或者您想创建一个新入口?新入口,freah Cluster您从哪里获得Nginx.org/Ingress控制器?这是在其安装配置中预定义的。他们的控制器将查找具有该名称的入口类
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  ingressClassName: nginx