当前位置: 首页 > 知识库问答 >
问题:

入口类的入口控制器名称

冯淳
2023-03-14

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

我已经使用 nginx 入口控制器设置了 nginx-ingress 控制器

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

根据我的理解,下一步是创建入口类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

他们如何获得控制器的名称< code > example . com/ingress-controller ?

共有2个答案

夏振国
2023-03-14

您将创建< code > Ingres class 作为< code >使用清单安装步骤的一部分(此处为步骤3)。这将创建一个类似于以下内容的< code > Ingres class :

apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
  name: nginx
  # annotations:
  #   ingressclass.kubernetes.io/is-default-class: "true"
spec:
  controller: nginx.org/ingress-controller 

然后,要配置nginx使用的入口资源,只需在入口规范中指定ingressClassName:nginx,如下所示,并再次粘贴如下:

  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
  . . .
贲文景
2023-03-14

我已经用< code > Ingres class 、< code>Ingress和< code>Nginx Ingress控制器运行了多个场景。

情景1

  • 具有自定义名称的In<>
  • 具有默认--ingress-class值的NGINX入口控制器,该值为nGINX
  • 使用ingressClassName与Ingres类名相同的入口

输出:响应404

场景2

  • 具有自定义名称的IngressClass
  • Nginx入口控制器具有自己的入口类入口测试
  • 使用与IngressClass名称相同的ingressClassName的Ingress

输出:响应404

场景3

    < li >具有< code >测试名称的Ingres class < li>Nginx入口控制器< code> -具有值< code>test的入口级 < li >使用ingressClassName中的< code>test进入

输出:适当的反应

塞纳里奥4

    < li >具有< code>nginx名称的Ingres class < li>Nginx入口控制器< code> -具有值< code>nginx的入口类 < li >使用ingressClassName中的< code>nginx进入

输出:适当的反应

结论

首先,请记住,有3种类型的Nginx开源Nginx Ingress Controller,您可能正在使用它。Nginx Incorporaton(nginx inc)和Nginx Incorporaton Plus

在其中一个场景中,当我使用<code>规范时。控制器:nginx。org/ingress-controller,带有参数--ingress class=Nginx,在NginxIngress-controller-pod中,您将看到指向 nginx<="" ode=""> 的条目。

要重现此行为,您需要使用特定的控制器部署< code>IngressClass,然后部署nginx。

apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
  name: nginx
spec:
  controller: nginx.org/ingress-controller

部署Ngin x In的控制器后,控制器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"

仅当IngressClassname设置为nginx时,它才有效。

我会说<code>nginx。org/ingress控制器用于Nginx Incorporatedk8s。io/ingress nginx用于开源nginx ingress

如果自定义值用于控制器部署清单中的--IngressClassargument,则存在或不存在具有相同名称的IngressClass对象不会对集群的工作方式产生任何影响,只要您保留ingress规范。ingressClass值与控制器参数相同。此外,如果存在IngressClass<code>规范。控制器可以具有与所需模式“类域”匹配的任何值,并且完全不影响集群上的Ingress工作流行为。

此外,如果我将Ingress类的正确值设置为规范, 就可以正常工作。ingressClass</code>属性或<code>metadata.annotation.kubernetes.io/ingress。类 。如果尝试将两个值都放在同一Ingres对象上,则会出现如下错误:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  ingressClassName: nginx

入口“测试入口”无效:annotations.kubernetes.io/Ingress。class:无效值:“nginx”:当class字段也被设置时无法设置

请记住,它仅针对N的入口控制器进行了测试。如果您想将Ingresclass与其他入口控制器(如Traefik或Ambasader)一起使用,您可以查看他们的发行说明。

 类似资料:
  • 我正在AWS EKS上设置NGINX入口控制器。 我浏览了k8s入口资源,它非常有助于理解我们将LB端口映射到k8s服务端口,例如file Def。我安装了nginx控制器,直到必要的步骤。然后教程指示我创建一个入口资源。 我错过了什么?

  • 新来的。我想知道是否有人可以帮助我区分我可以用来识别入口控制器和通过YAML和服务识别入口的特征。我有一个预先存在的集群,我认为入口控制器可能是通过helm安装的,但我不确定。有没有办法了解helm在安装nginx ingress控制器时使用的yaml?

  • 我们正在GKE(谷歌kubernetes引擎)上运行一个API服务器。我们使用Google云endpoint和API密钥处理授权。我们将每个API密钥上的某些IP地址列为白名单。为了做到这一点,我们必须将负载平衡器转换为入口控制器,以公开我们的API服务器。IP白名单不适用于loadbalancer服务。现在,我们有一个类似以下内容的入口设置:

  • 我在RedHat EC2实例上安装了Minikube v1.3.1以进行一些测试。 由于nginx-ingress-控制器默认使用的端口已经在使用中,我正在尝试在部署中更改它们,但没有结果。有人能建议如何做吗? 如何知道端口已在使用? 当我使用命令kubectl-n kube system get deployment | grep nginx列出系统吊舱时,我得到: nginx入口控制器0/1

  • GCP入口的以下注释等效于什么?我试图使用一个自定义的nginx模板,但我找不到以下注释的参考。在github的回答中,他们使用的是AWS,但我需要使用GCP来实现这一点。 我正在使用ingress类nginx 我正在尝试使用入口控制器在GCP Kubernetes集群中进行入口TCP SSL终止。 我想要来自<代码>https://example.com:1234重定向到

  • 操作系统:RHEL7|k8s版本:1.12/13|kubes祈祷|裸机 我部署了一个标准的kubespray裸机集群,我正在尝试了解部署nginx ingress controller的最简单推荐方法是什么,它将允许我部署简单的服务。没有提供负载平衡器。我希望我的主公共IP作为我的服务的endpoint。 Github k8s ingress nginx建议将节点端口服务作为“强制”步骤,这似乎不