let*_*ive 5 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
Run Code Online (Sandbox Code Playgroud)
他们是如何得到控制器的名字的example.com/ingress-controller?
我已经使用IngressClass,Ingress和运行了多个场景Nginx Ingress Controller。
场景一
--ingress-class值是nginx输出:响应 404
场景二
ingress-class入口测试的Nginx 入口控制器输出:响应 404
场景3
test名称的IngressClass--ingress-class具有价值的Nginx 入口控制器testtest在 ingressClassName 中使用输出:正确响应
场景 4
nginx名称的IngressClass--ingress-class具有价值的Nginx 入口控制器nginxnginx在 ingressClassName 中使用输出:正确响应
结论
首先,请记住,有 3 种类型的Nginx. Open Source Nginx Ingress Controller,您可能正在使用它。Nginx Incorporaton(nginx 公司)和Nginx Incorporaton Plus.
在其中一种场景中,当我使用spec.controller: nginx.org/ingress-controllerwithNginx Ingress Controller参数时--ingress-class=nginx,在Nginx Ingress Controllerpod 中您将看到指向k8s.io/ingress-nginx.
要重现此行为,您需要IngressClass使用特定控制器进行部署,然后再部署 nginx。
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
name: nginx
spec:
controller: nginx.org/ingress-controller
Run Code Online (Sandbox Code Playgroud)
部署后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"
Run Code Online (Sandbox Code Playgroud)
仅当IngressClassname 设置为时才有效nginx。
我会说这nginx.org/ingress-controller是为了Nginx Incorporated和k8s.io/ingress-nginx为了Open Source Nginx Ingress。
如果自定义值用于 中的--ingress-class参数,则同名对象的controller Deployment manifest存在与否IngressClass不会对集群的工作方式产生任何影响,前提spec.ingressClass是您将 Ingress值与控制器参数保持相同。此外,如果它存在,IngressClassspec.controller可以具有与所需模式“类似域”相匹配的任何值,并且根本不会影响Ingress我的集群上的工作流行为。
此外,Ingress工作正常,如果我把的正确值ingress-class要么spec.ingressClass财产或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
Run Code Online (Sandbox Code Playgroud)
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进行了测试。如果您想使用IngressClass其他Ingress Controllers类似Traefik或Ambasador酒店,你会检查他们的发行说明。
您将创建IngressClass作为步骤的一部分Installation with Manifests(此处为步骤 2,第 3 部分)。这将创建一个IngressClass看起来像这样的:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: nginx
# annotations:
# ingressclass.kubernetes.io/is-default-class: "true"
spec:
controller: nginx.org/ingress-controller
Run Code Online (Sandbox Code Playgroud)
然后,要配置Ingress要由 消耗的资源,只需在规范中nginx指定,如下所示,并在下面再次粘贴:ingressClassName: nginxIngress
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
. . .
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5101 次 |
| 最近记录: |