当前位置: 首页 > 知识库问答 >
问题:

Kubernetes不健康的入口后端

咸琪
2023-03-14

我遵循了负载均衡器教程:https://cloud.google.com/container-engine/docs/tutorials/http-balancer当我使用Nginx映像时工作正常,当我尝试使用我自己的应用程序映像时,尽管后端切换到不健康。

我的应用程序重定向到/(返回302),但我在pod定义中添加了一个livenessProbe:

    livenessProbe:
      httpGet:
        path: /ping
        port: 4001
        httpHeaders:
          - name: X-health-check
            value: kubernetes-healthcheck
          - name: X-Forwarded-Proto
            value: https
          - name: Host
            value: foo.bar.com

我的入口看起来像:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: foo
spec:
  backend:
    serviceName: foo
    servicePort: 80
  rules:
  - host: foo.bar.com

服务配置为:

kind: Service
apiVersion: v1
metadata:
  name: foo
spec:
  type: NodePort
  selector:
    app: foo
  ports:
    - port: 80 
      targetPort: 4001

入口中的后端运行状况描述如下:

backends:       {"k8s-be-32180--5117658971cfc555":"UNHEALTHY"}

入口规则如下:

Rules:
  Host  Path    Backends
  ----  ----    --------
  * *   foo:80 (10.0.0.7:4001,10.0.1.6:4001)

任何建议都很受欢迎,我已经努力了几个小时,但没有成功。

使现代化

我已将readinessProbe添加到我的部署中,但似乎仍然有东西命中/并且入口仍然不健康。我的探针看起来像:

    readinessProbe:
      httpGet:
        path: /ping
        port: 4001
        httpHeaders:
          - name: X-health-check
            value: kubernetes-healthcheck
          - name: X-Forwarded-Proto
            value: https
          - name: Host
            value: foo.com

我将我的服务更改为:

kind: Service
apiVersion: v1
metadata:
  name: foo
spec:
  type: NodePort
  selector:
    app: foo
  ports:
    - port: 4001
      targetPort: 4001

更新2

在我从readinessProbe中删除自定义标题后,它开始工作了!非常感谢。

共有3个答案

司寇琨
2023-03-14

我也有同样的问题。遵循Tex的提示,但继续看到该消息。原来我必须在入口前等待几分钟才能验证服务运行状况。如果有人正在经历同样的情况并完成了所有步骤,例如readinessProbelInvenessProbe,只需确保您的入口指向的服务要么是NodePort,然后等待几分钟,直到黄色警告图标变成绿色图标。此外,检查StackDriver上的日志以更好地了解正在发生的事情。

江渊
2023-03-14

我认为值得注意的是,这是留档中一个非常重要的限制:

Pod readinessProbe的更改不会影响创建后的入口。

添加我的readinessProbe后,我基本上删除了我的入口(kubectl删除入口

傅丁雷
2023-03-14

您需要添加一个readinessProbe(只需复制您的livenessProbe)。

GCE L7入口文档对此进行了解释。

健康检查

目前,所有服务后端必须满足以下任一要求才能通过GCE loadbalancer发送给它的HTTP运行状况检查:1。用“/”上的200进行响应。内容无关紧要。2、在支持服务的POD上公开任意url作为就绪探测。

还要确保readinessProbe指向您暴露于入口的同一端口。在您的情况下,这很好,因为您只有一个端口,如果您添加另一个端口,您可能会遇到麻烦。

 类似资料:
  • 问题内容: 我遵循了负载均衡器教程:https : //cloud.google.com/container- engine/docs/tutorials/http-balancer 在使用Nginx映像时,当尝试使用自己的应用程序映像时,它工作正常后端切换为不正常。 我的应用程序重定向到/(返回302),但在pod定义中添加了一个: 我的入口看起来像: 服务配置为: 后端健康状况如下: 入口的规

  • 我正在学习如何使用入口在谷歌Kubernetes引擎上公开我的应用程序。我学习了几本教程,大致了解了需要什么。然而,我不知道为什么我的服务被标记为不健康,尽管它们可以从我直接定义的NodePort服务访问。 这是我的部署文件:(我删除了一些数据,但大部分保持不变) 在阅读时,我需要一个ReadinessProbe和LivinessProbe,以便GKE在我定义的路径上运行健康检查,并且通过使用我自

  • 我试图通过GKE部署应用程序。到目前为止,我为应用程序的前端和后端创建了两个服务和两个部署。我使用“gce”控制器创建了一个ingress ressource,并映射了服务,如图所示 它几乎工作得很好(不是所有映射正确的根,但它工作得很好)。我在代码上添加了修改(只有应用程序的代码),我重建了图像并重新创建了服务,但入口似乎对我添加的修改和 我所有的服务都处于不健康状态 这是前台服务 当我描述时,

  • 我正在学习如何使用入口来公开我的应用程序GKE v1.19。我按照GKE docs for Service、Ingress和BackendConfig的教程进行了以下设置。然而,一段时间后,我的后端服务仍然变得不健康。我的目标是覆盖入口控制器的默认“/”健康检查路径。 我在部署中定义了相同的运行状况检查。livenessProbe和readinessProbe下的yaml文件,它们似乎工作正常,因

  • 我已经在端口80上配置了一个通过apache公开的web应用程序pod。我无法配置从internet访问的服务入口。问题是后端服务总是报告为不健康。 Pod配置: 服务配置: 入口配置: 这会导致后端服务报告为不健康。 健康检查设置:

  • 我正在将包含divolte的库伯内特斯集群从一个GCP(Google Cloud Platform)项目复制到另一个项目。我在已经运行的项目中的配置与目标项目完全相同。在我的新项目中,我没有通过正确的健康检查运行负载均衡器,当我尝试从负载均衡器连接到te静态IP时,我收到502服务器错误。 我遵循了与原始项目相同的步骤: 在GCP上创建群集 部署文件: 服务文件: 入口文件: 我预计负载平衡器会像