Ingress给出502错误

Ian*_*Ian 11 redirect google-cloud-platform kubernetes

如果我运行http负载均衡器示例,它在我的谷歌容器引擎项目中工作正常.当我运行"kubectl describe ing"时,后端是"健康".如果我然后将svc更改为指向我的应用程序的svc,如下所示:

apiVersion: v1
kind: Service
metadata:
  name: app
  labels:
    name: app
spec:
  ports:
  - port: 8000
    name: http
    targetPort: 8000
  selector:
    name: app
  type: NodePort
Run Code Online (Sandbox Code Playgroud)

我正在运行的应用程序是在gunicorn背后的django,并且工作只是发现我是否使用负载平衡器而不是NodePort.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: main-ingress
spec:
  backend:
    serviceName: app
    servicePort: 8000
Run Code Online (Sandbox Code Playgroud)

现在当我运行"kubectl describe ing"时,后端被列为"不健康",并且对入口IP的所有请求都给出了502.

  1. 502是不良健康检查的症状吗?
  2. 我需要做些什么来使健康检查通过?我很确定运行我的应用程序的容器实际上是健康的.我从来没有设置健康检查,所以我假设我必须配置一些未配置的东西,但我的谷歌搜索没有让我到任何地方.

Ian*_*Ian 28

经过大量的挖掘后,我找到了答案:根据这里的要求:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/cluster-loadbalancing/glbc#prerequisites应用程序必须返回200状态代码在'/'.因为我的应用程序返回302(重定向到登录),所以运行状况检查失败.当健康检查失败时,入口资源返回502.

  • URL不必为/,可以在pod上使用readinessProbe和livenessProbe选项进行配置。但是,必须在创建入口之前对其进行配置。 (3认同)

dav*_*wil 9

我只是想用更具体的解释来补充已接受的答案,说明为什么需要进行健康检查/,即使livenessProbe并且readinessProbe可能已设置并处理 pod 中的容器。

我原本以为它们是一回事,但事实并非如此。

kubernetes 引擎使用探针来管理服务中的各个容器。而健康检查/是在服务级别进行的,并且是 GCP负载均衡器合同的一部分。它与 kubernetes 或容器本身无关。

GKE 需要它的原因是 GCP 负载均衡器是默认的入口控制器。如文档中所述,默认情况下,GCP 负载均衡器需要支持服务返回一个200on/以检查它们是否处于活动状态,以便它可以管理要路由到哪些服务。

如果要配置此运行状况检查端点:

  1. 从 GKE 集群版本1.17.6-gke.11目前处于测试阶段),您可以在 GCP 负载均衡器上配置它。请参阅此处的文档
  2. 下面1.17.6-gke.11,您不能在 GCP 负载均衡器上配置它。它必须是 200 上/。配置它的唯一选择是使用不同的、更可配置的入口控制器,如 nginx 控制器。我自己没有使用过这个,所以不能指出任何细节。