我正在设置入口控制器、入口类和入口,以公开集群之外的服务。这是新的集群设置。
我已经安装了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。
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**?**的名字的?
发布于 2020-11-19 13:12:39
我已经使用IngressClass、Ingress和Nginx Ingress Controller运行了多个场景。
场景1
--ingress-class值为nginx的Nginx侵入控制器产出:答复404
场景2
ingress-class入口的Nginx入侵控制器-测试产出:答复404
场景3
test--ingress-class的Nginx入侵控制器testtest在ingressClassName中的应用产出:适当反应
Senario 4
nginx--ingress-class的Nginx入侵控制器nginxnginx在ingressClassName中的应用产出:适当反应
结论
首先,请记住有3种类型的Nginx。Open 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。
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
name: nginx
spec:
controller: nginx.org/ingress-controller在部署Nginx Ingress Controller之后,控制器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"只有当IngressClass 名称设置为 nginx**.**时,才能工作。
我认为nginx.org/ingress-controller代表Nginx Incorporated,k8s.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对象,则会出现如下错误:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
ingressClassName: nginxThe 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 (如特雷菲克或安巴沙多 )一起使用,您将检查它们的发行说明。
发布于 2020-11-13 17:54:51
您将创建IngressClass作为Installation with Manifests步骤的一部分(步骤3 这里)。这将创建一个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使用,只需在Ingress规范中指定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
. . .https://stackoverflow.com/questions/64781320
复制相似问题