首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >入口类的入口控制器名称

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

Stack Overflow用户
提问于 2020-11-11 06:08:14
回答 2查看 22.2K关注 0票数 9

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

我已经安装了nginx入口控制器

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

代码语言:javascript
复制
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**?**的名字的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-19 13:12:39

我已经使用IngressClassIngressNginx Ingress Controller运行了多个场景。

场景1

  • 具有自定义名称的IngressClass
  • 默认--ingress-class值为nginx的Nginx侵入控制器
  • 使用ingressClassName与IngressClass名称相同的入口

产出:答复404

场景2

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

产出:答复404

场景3

  • 具有IngressClass名称的test
  • 具有值--ingress-class的Nginx入侵控制器test
  • test在ingressClassName中的应用

产出:适当反应

Senario 4

  • 具有IngressClass名称的nginx
  • 具有值--ingress-class的Nginx入侵控制器nginx
  • nginx在ingressClassName中的应用

产出:适当反应

结论

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

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

要再现这种行为,您需要使用特定的控制器部署IngressClass,然后部署nginx。

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
  name: nginx
spec:
  controller: nginx.org/ingress-controller

在部署Nginx Ingress Controller之后,控制器pod将处于CrashLoopBackOff状态。在日志中可以找到条目:

代码语言:javascript
复制
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 Incorporatedk8s.io/ingress-nginx代表Open Source Nginx Ingress

如果自定义值用于--ingress-class参数中的controller Deployment manifest,则存在或不存在具有相同名称的IngressClass对象对集群的工作方式没有任何影响,如果仅在控制器参数中保持spec.ingressClass值相同的话。此外,如果存在,IngressClass spec.controller可以具有任何与所需的模式“域类似”相匹配的值,而这根本不影响集群上的Ingress工作流行为。

此外,如果我将Ingress的正确值放置到spec.ingressClass属性或相应的metadata.annotation.kubernetes.io/ingress.class中,则spec.ingressClass可以正常工作。如果尝试将两个值都放入相同的Ingres对象,则会出现如下错误:

代码语言:javascript
复制
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入侵控制。如果您想将IngressClass与其他Ingress Controllers (如特雷菲克安巴沙多 )一起使用,您将检查它们的发行说明。

票数 18
EN

Stack Overflow用户

发布于 2020-11-13 17:54:51

您将创建IngressClass作为Installation with Manifests步骤的一部分(步骤3 这里)。这将创建一个IngressClass,其外观如下:

代码语言:javascript
复制
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,如这里所示,然后再粘贴到下面:

代码语言:javascript
复制
  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
  . . .
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64781320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档