在 Ingress 资源中找不到端点“default-http-backend”
Posted
技术标签:
【中文标题】在 Ingress 资源中找不到端点“default-http-backend”【英文标题】:endpoints “default-http-backend” not found in Ingress resource 【发布时间】:2020-12-12 22:35:59 【问题描述】:当我尝试为我的 Kubernetes 集群创建入口资源时(入口控制器已创建),入口资源/规则正在创建,我可以在 kubectl get 中看到。 但是当我做 kubectl describe 时,我看到了一个错误:
默认后端:default-http-backend:80()
这是预期的吗?我什至无法使用我在 Ingress 资源中定义的 DNS 名称 (hotel.example.com
) 连接到我的应用程序。是因为这个http-backend错误吗?
如果没有,任何建议让应用程序连接!
[dockuser@hostname]$ kubectl describe ing hotel-ingress -n hotel
Name: hotel-ingress
Namespace: hotel
Address:
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
Host Path Backends
---- ---- --------
hotel.example.com
/ hotel-svc:80 (10.36.0.2:80,10.44.0.2:80)
Annotations:
Events:
部署文件: namespaces.yaml
apiVersion: v1
kind: Namespace
metadata:
name: hotel
ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hotel-ingress
namespace: hotel
spec:
rules:
- host: hotel.example.com
http:
paths:
- path: /
backend:
serviceName: hotel-svc
servicePort: 80
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hotel
namespace: hotel
spec:
replicas: 2
selector:
matchLabels:
app: hotel
template:
metadata:
labels:
app: hotel
spec:
containers:
- name: hotel
image: nginxdemos/hello:plain-text
ports:
- containerPort: 80
service.yaml
apiVersion: v1
kind: Service
metadata:
name: hotel-svc
namespace: hotel
spec:
selector:
app: hotel
ports:
- port: 80
targetPort: 80
【问题讨论】:
你能代替描述入口/部署等。单独粘贴这些文件 - 以 yaml 格式? 您好,问题已解决,我在 kube-system 命名空间中创建了一个 default-http-backend 服务,上面的错误消失了。 在这种情况下,您可以编辑问题,然后根据 *** 规则将解决方案粘贴为答案吗? 【参考方案1】:在kube-system
命名空间中创建default-http-backend
服务,错误就会消失。
查看更多:ngress-nginx-troubleshooting。
【讨论】:
这里也有实际的命令。 这是一个如何不回答问题的完美示例。事实上,这是一个没有答案的答案。不要依赖深奥的知识或指向可能移动或被删除的外部资源的链接。我完全不知道我应该在你分享的那个链接中寻找什么。【参考方案2】:我尝试按照此文档步骤进行操作,但效果很好: https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/
【讨论】:
【参考方案3】:如果您使用的是Minikube,可能是因为您没有启用入口。
请尝试以下命令:
minikube addons enable ingress
或
minikube addons enable ingress --alsologtostderr
【讨论】:
【参考方案4】:我意识到这已被回答(为后代添加),但就我而言,我已经跑了
minikube addons enable ingress
但系统仍然丢失default-http-backend
。
我怀疑当时存在对端口或类似端口的使用冲突,并且默认 http-backend 静默创建失败。
经过多次尝试纠正问题后,我终于发现执行以下命令为我解决了问题:
[2021-12-15 更新]
原始资源不再可用,抱歉
如果我今天必须再次这样做,我可能会尝试直接从 ingress-nginx project 应用部署:
kubectl apply -f https://github.com/kubernetes/ingress-nginx/tree/main/deploy/static/provider/baremetal/deploy.yaml
(未测试)
PS: 请注意,nginx-load-balancer-conf
已经存在配置映射,所以我没有添加这些。
PPS: 其次,这只是用于在本地笔记本电脑上进行教育,因此请对其可信度持保留态度。
【讨论】:
链接不再有效。 感谢@ArtemDumanov!我尽力用相关的东西代替。【参考方案5】:我认为可以忽略缺少的默认后端。至少对于在 k8s 下具有负载平衡工作的 Openshift 风格的路由来说,它不是必需的,如 this answer 中所述。
【讨论】:
【参考方案6】:您可能希望像这样将defaultBackend
添加为 Ingress 定义的一部分
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: default-backend-ingress-example
spec:
defaultBackend:
service:
name: hotel-svc
port:
number: 80
环境
minikube version: v1.21.0
kubectl version: v1.20.7
【讨论】:
【参考方案7】:在我的案例中找到了答案here,即需要在与其引用的服务规则相同的命名空间中创建入口规则。否则,正如在同一线程中所讨论的那样,必须找到一种方法将命名空间作为对该服务的引用的一部分。
与其在
ingress-nginx
命名空间中创建入口your-ingress-name
,不如在您拥有服务的命名空间中创建它...
如果您得到此结果,可能的解决方案:
kubectl describe ingress your-ingress-name
...
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
【讨论】:
如果我没有为我的服务指定任何命名空间,我如何让入口与我的服务在同一个命名空间中?我不在 minikube 上工作。我正在尝试在 Linode 云上实现它。 那么您的服务可能在默认命名空间default
中,但您可以通过检查您的服务来找出答案。您的 yaml 规范也可能指定了命名空间。查看所有命名空间kubectl get ns
。无论如何,一旦你找到命名空间,我认为在指定命名空间时重新创建你的入口,这可以在服务名称下方的 yaml 规范中完成,或者可能最简单的附加到入口创建命令—namespace YOURNS
(我认为)
是的。我已经能够在 metadata
的层次结构下为 Ingress yaml 添加 namespace: default
。谢谢。以上是关于在 Ingress 资源中找不到端点“default-http-backend”的主要内容,如果未能解决你的问题,请参考以下文章