我正在设置我的入口控制器,入口类和入口,以在集群外部公开服务。这是全新的群集设置。
我已经使用设置了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
的名称?
答案 0 :(得分:2)
我使用IngressClass
,Ingress
和Nginx Ingress Controller
运行了多种方案。
场景1
--ingress-class
值为nginx
输出:响应404
场景2
ingress-class
入口测试的Nginx入口控制器输出:响应404
场景3
test
的IngressClass --ingress-class
的值为test
test
进入输出:正确的响应
Senario 4
nginx
的IngressClass --ingress-class
的值为nginx
nginx
进入输出:正确的响应
结论
首先,请记住,Nginx
有3种类型。 Open Source Nginx Ingress Controller
,您可能正在使用它。 Nginx Incorporaton
(nginx inc)和Nginx Incorporaton Plus
。
在一种情况下,当我将spec.controller: nginx.org/ingress-controller
和Nginx 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-controller
,Nginx 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
与其他Traefik或Ambasador之类的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
. . .