代码之家  ›  专栏  ›  技术社区  ›  letthefireflieslive

入口类的入口控制器名称

  •  0
  • letthefireflieslive  · 技术社区  · 5 年前

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

    我已经使用

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.0/deploy/static/provider/baremetal/deploy.yaml

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

    0 回复  |  直到 5 年前
        1
  •  13
  •   PjoterS    5 年前

    我已经用它运行了多个场景 IngressClass , Ingress Nginx Ingress Controller .

    情景1

    • 具有自定义名称的入口类
    • 带有默认设置的Nginx入口控制器 --ingress-class 价值是什么 nginx
    • 使用与IngressClass name相同的IngressClass name的入口

    输出:响应404

    情景2

    • 具有自定义名称的入口类
    • Nginx入口控制器,带有自己的 ingress-class 侵入试验
    • 使用与IngressClass name相同的IngressClass name的入口

    输出:响应404

    情景3

    • 与…擦肩而过 test 名称
    • Nginx入口控制器 --入门级 有价值 测验
    • 使用 测验 以你的名义

    输出:正确响应

    塞纳里奥4号

    • 与…擦肩而过 nginx 名称
    • Nginx入口控制器 --入门级 有价值 nginx
    • 使用 nginx 以你的名义

    输出:正确响应

    结论

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

    在其中一个场景中,当我使用 spec.controller: nginx.org/ingress-controller 具有 Nginx入口控制器 争论不休 --ingress-class=nginx 在里面 Nginx入口控制器 你们会看到入口指向 k8s.io/ingress-nginx .

    要重现这种行为,您需要部署 安格拉斯 使用特定的控制器,然后部署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"
    

    只有当 安格拉斯 名称设置为 nginx .

    我会这么说 nginx.org/ingress-controller 是为了 Nginx Incorporated k8s。io/ingress nginx 对于 Open Source Nginx Ingress .

    如果自定义值用于 --入门级 辩论 controller Deployment manifest ,是否有 安格拉斯 相同名称的对象对集群的工作方式没有任何影响,只要保持入口 spec.ingressClass 值与控制器参数相同。而且,如果它存在的话 spec.controller 可以具有任何与所需模式“类似域”匹配且不影响 进入 我的集群上的工作流行为。

    此外 进入 如果我将 入门级 要么 规格入口等级 财产还是 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 Ingress Controlle .如果你想用 安格拉斯 与其他 Ingress Controllers 喜欢 Traefik Ambasador ,你可以查看他们的发行说明。

        2
  •  2
  •   Monkeyanator    5 年前

    您将创建 IngressClass 作为 Installation with Manifests 步骤(步骤3) here ).这将创造一个 安格拉斯 这看起来像:

    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 进入 规格,如图所示 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
      . . .
    
    推荐文章