在 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”的主要内容,如果未能解决你的问题,请参考以下文章

在tomcat7中找不到Websocket端点路径

Apollo - 在根项目中找不到端点 http

在 WCF 的添加服务引用中找不到 net.tcp 端点?

在 wcf 客户端 app.config 错误(自主机)中找不到端点元素

在 Laravel 5 单元测试中找不到特征

在 Rest API 中找不到处理资源