入口类的入口控制器名称

时间:2020-11-11 06:08:14

标签: kubernetes kubernetes-ingress

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

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

kubectl apply -f https://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

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

2 个答案:

答案 0 :(得分:2)

我使用IngressClassIngressNginx Ingress Controller运行了多种方案。

场景1

  • 具有自定义名称的IngressClass
  • Nginx Ingress Controller,其默认--ingress-class值为nginx
  • 使用与ingressClass名称相同的ingressClassName的

输出:响应404

场景2

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

输出:响应404

场景3

  • 名称为test的IngressClass
  • Nginx入口控制器--ingress-class的值为test
  • 使用ingressClassName中的test进入

输出:正确的响应

Senario 4

  • 名称为nginx的IngressClass
  • Nginx入口控制器--ingress-class的值为nginx
  • 使用ingressClassName中的nginx进入

输出:正确的响应

结论

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

在一种情况下,当我将spec.controller: nginx.org/ingress-controllerNginx Ingress Controller--ingress-class=nginx一起使用时,在Nginx Ingress Controller窗格中,您会看到指向{{1 }}。

要重现此行为,您将需要使用特定的控制器部署k8s.io/ingress-nginx,然后部署nginx。

IngressClass

在部署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-controllerNginx Incorporated代表k8s.io/ingress-nginx

如果将自定义值用于Open Source Nginx Ingress中的--ingress-class参数,则是否存在同名的controller Deployment manifest对象对集群的工作方式没有任何影响,如果仅使Ingress IngressClass的值与控制器参数相同。而且,如果存在,则IngressClass spec.ingressClass可以具有与所需模式“ domain like”相匹配的任何值,并且根本不影响集群上的spec.controller工作流程行为。

此外,如果我将Ingress的正确值放到Ingress属性或相应地放到ingress-class的地方,spec.ingressClass可以正常工作。如果您尝试将两个值都放在同一个Ingres对象中,则会产生如下错误:

metadata.annotation.kubernetes.io/ingress.class

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

请记住,它仅针对Nginx Ingress Controlle进行了测试。如果您想将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与其他TraefikAmbasador之类的IngressClass一起使用,请检查其发行说明。

答案 1 :(得分:1)

您将创建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资源,只需在ingressClassName: nginx规范中指定Ingress,如图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
  . . .