小编典典

kubernetes不健康的入口后端

docker

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

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

    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

后端健康状况ingress describe ing如下:

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它开始工作!非常感谢。


阅读 245

收藏
2020-06-17

共1个答案

小编典典

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

GCE L7 Ingress Docs中对此进行了解释。

健康检查

当前,所有服务后端必须满足以下任一要求,才能通过GCE负载平衡器发送给它的HTTP运行状况检查:1.在“
/”上响应200。内容没关系。2.在支持服务的窗格上公开一个任意URL,作为准备情况调查。

还要确保readinessProbe指向您公开给Ingress的端口。在您的情况下,这很好,因为您只有一个端口,如果添加另一个端口,则可能会遇到麻烦。

2020-06-17