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.
Ian*_*Ian 28
经过大量的挖掘后,我找到了答案:根据这里的要求:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/cluster-loadbalancing/glbc#prerequisites应用程序必须返回200状态代码在'/'.因为我的应用程序返回302(重定向到登录),所以运行状况检查失败.当健康检查失败时,入口资源返回502.
我只是想用更具体的解释来补充已接受的答案,说明为什么需要进行健康检查/,即使livenessProbe并且readinessProbe可能已设置并处理 pod 中的容器。
我原本以为它们是一回事,但事实并非如此。
kubernetes 引擎使用探针来管理服务中的各个容器。而健康检查/是在服务级别进行的,并且是 GCP负载均衡器合同的一部分。它与 kubernetes 或容器本身无关。
GKE 需要它的原因是 GCP 负载均衡器是默认的入口控制器。如文档中所述,默认情况下,GCP 负载均衡器需要支持服务返回一个200on/以检查它们是否处于活动状态,以便它可以管理要路由到哪些服务。
如果要配置此运行状况检查端点:
1.17.6-gke.11(目前处于测试阶段),您可以在 GCP 负载均衡器上配置它。请参阅此处的文档。1.17.6-gke.11,您不能在 GCP 负载均衡器上配置它。它必须是 200 上/。配置它的唯一选择是使用不同的、更可配置的入口控制器,如 nginx 控制器。我自己没有使用过这个,所以不能指出任何细节。