Sas*_*ota 9 networking kubernetes kubernetes-ingress microk8s
我有一个来自microk8s 的单节点 Kubernetes 实例。它安装在运行 Raspberry Pi 4 的 Ubuntu Server 20.20 上。
我正在尝试设置一个无法工作的入口资源。
当我运行时kubectl describe ingress my-ingress我得到这个输出
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Run Code Online (Sandbox Code Playgroud)
从我在互联网上找到的内容来看,default-http-backend默认情况下应该有一些东西,但是当我运行时kubectl get pods -n kube-system我看不到它。
问:如何default-http-backend在 mikrok8s 中启用?或者更一般地说,我如何使 Ingress 工作?
注意:Ingress 和 DNS 插件已启用。
Rob*_*ert 11
当入口控制器无法匹配任何规则时,默认后端是后备。
apiVersion: networking.k8s.io/v1spec:
defaultBackend:
service:
name: tea-svc
port:
number: 80
Run Code Online (Sandbox Code Playgroud)
这是一个完整的示例,使用v1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress
spec:
defaultBackend:
service:
name: tea-svc
port:
number: 80
rules:
- host: cafe.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
Run Code Online (Sandbox Code Playgroud)
apiVersion: networking.k8s.io/v1beta1根据apiVersionyaml 文件的不同,默认后端以不同的格式指定。看起来您正在使用测试版格式。
spec:
backend:
serviceName: tea-svc
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
NGINX Ingress Controller 抱怨v1beta1,到目前为止它可以在 kubernetes 1.21.2 中运行,但正如警告所示,它不会很快运行:
networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
Run Code Online (Sandbox Code Playgroud)
我已经在我的集群上测试了这种行为。当我尝试您提供的配置时,我得到以下信息Warning:
@microk8s:~$ microk8s kubectl get ing\nWarning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress\nRun Code Online (Sandbox Code Playgroud)\n另外,如果您描述它,您也会得到相同的结果Warning。
@microk8s:~$ kk describe ing\nWarning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress\nName: hello-ing\nNamespace: default\nAddress: \n Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)\nRules:\n Host Path Backends\n ---- ---- --------\n * \n /hello hello-svc:80 10.1.128.202:8080)\nRun Code Online (Sandbox Code Playgroud)\n关于此错误有类似的Github问题。
\n\n\n您看到的输出只是没有默认后端时的默认输出\n https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/kubectl/pkg/describe/describe.go #L2393
\n
不过,它工作正常。
\n$ curl 127.0.0.1/hello\nHello, world!\nVersion: 1.0.0\nHostname: hello-647c466dbc-99rml\nRun Code Online (Sandbox Code Playgroud)\n如果您添加默认后端,您将得到如下输出:
\nWarning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress\nName: ingress\nNamespace: default\nAddress: 127.0.0.1\nDefault backend: test2:80 10.1.128.205:80)\nRules:\n Host Path Backends\n ---- ---- --------\n * \n /hello hello-svc:80 10.1.128.204:8080)\nRun Code Online (Sandbox Code Playgroud)\n看起来Ingress像:
spec:\n backend:\n serviceName: test2\n servicePort: 80\n rules:\n - http:\n paths:\n - path: /hello\n backend:\n serviceName: hello-svc\n servicePort: 80\nRun Code Online (Sandbox Code Playgroud)\n虽然我不明白为什么半年前有效的东西现在不起作用了。
\n由于新apiVersion版本更改了一些语法,添加了一些功能、参数等,因此可能会出现更新/升级后某些资源无法再通过Kubernetes. 正如本文所述。
\n\nKubernetes 中的对象定义需要 apiVersion 字段。当 Kubernetes 有一个更新可供您使用的版本时\xe2\x80\x94更改其 API 中的某些内容\xe2\x80\x94,会创建新的 apiVersion。\n但是,官方 Kubernetes 文档几乎没有提供有关 apiVersion 的指导。本指南为您提供了有关使用哪个版本的备忘单,解释了每个版本,并提供了发布时间表。
\n
如果您只更改 YAML 中的 apiVersion,则会收到错误消息:
\nerror: error validating "ingress.yaml": error validating data: [ValidationError(Ingress.spec.rules[0].http.paths[0].backend): unknown field "serviceName" in io.k8s.api.networking.v1.IngressBackend, ValidationError(Ingress.spec.rules[0].http.paths[0].backend): unknown field "servicePort" in io.k8s.api.networking.v1.IngressBackend]; if you choose to ignore these errors, turn validation off with --validate=false\nRun Code Online (Sandbox Code Playgroud)\n总而言之,你得到这个<error: endpoints "default-http-backend" not found>是因为没有default backend配置。
有关更多详细信息,您可以查看Kubernetes Api 文档。
\n| 归档时间: |
|
| 查看次数: |
24063 次 |
| 最近记录: |