1

我正在部署一个作为 GKE 容器后端的项目,前端有一个 Cloud Endpoints API。它通过一个 Ingress 和 NodePort 服务。我已经在 ESP 容器上声明了一个就绪探测:

        readinessProbe:
          httpGet:
            path: /ping
            port: 8080

但是我观察到 /ping 路径必须在没有任何安全性的情况下在 openapi.yaml 中声明,否则它返回 404,如果声明了一些安全性定义,则返回 401。

这是预期的吗?我在 Endpoints Samples 存储库中看不到任何相关内容:

https://github.com/GoogleCloudPlatform/endpoints-samples/tree/master/k8s

4

4 回答 4

0

我遇到了同样的问题,但似乎可以对 GCE 边车和最终的后端(例如您实际构建的 api)进行健康检查。

诀窍是,您的 api 的运行状况检查必须配置为云端点容器(而不是您的 api 容器)上的就绪探针。您检查的端点也必须没有针对它的安全性,因此它是可公开访问的(尽管您似乎也可以使用 api 密钥配置运行状况检查)。

我遵循了之前的建议,并将“healthz”参数添加到 esp 容器中。我的 API 在端口 80 上运行,其状态端点为未受保护/api/status

spec:
  containers:
  - name: esp
    image: gcr.io/endpoints-release/endpoints-runtime:1
    args: [
      "--http_port=8081",
      "--backend=127.0.0.1:80",
      "--service=MY SERVICE",
      "--rollout_strategy=managed",
      "-z", "healthz",
    ]
    ports:
    - containerPort: 8081
    readinessProbe:
      httpGet:
        path: /api/status/
        port: 8081
  - name: api
    image: MY IMAGE
    ports:
      - containerPort: 80

这行得通,因此检查现在正在验证两个容器都在运行一个readinessProbe. 有趣的是,当我检查 LoadBalancer 时,它还配置了一个反对/healthz. 这对于诊断端点容器正在工作的情况很有用,但该 api 不是

于 2020-03-13T12:00:48.930 回答
0

我假设术语“后端”是指集群的节点或 GKE 运行的 Pod。对于这两种情况,GKE 都是自我管理的,节点和 Pod 的健康状况由主节点监控,因此它们应该始终可用。有关这方面的更多信息,请参阅 Kubernetes 调度程序GKE 集群架构

在这种情况下,用于 GKE 入口的运行状况检查不会检查后端,而是检查集群中运行的服务。要检查这些服务是否正常,请按照本文中的说明使用就绪和活跃度探测。

于 2019-08-08T00:14:39.843 回答
0

如果要对后端进行健康检查,则需要在 openapi config 中列出健康检查路径,以便 ESP 转发。

于 2019-08-09T00:54:46.020 回答
0

在更仔细地检查文档和代码示例后,我发现 ESP 对此有一个healthz论据:

    spec:
      containers:
      - name: esp
        image: gcr.io/endpoints-release/endpoints-runtime:1
        args: [
          "-p", "8080",
          "-a", "127.0.0.1:8081",
          "-s", "SERVICE_NAME",
          "--rollout_strategy", "managed",
          "-z", "healthz",
        ]
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
        ports:
          - containerPort: 8080

https://github.com/GoogleCloudPlatform/endpoints-samples/blob/master/k8s/esp_echo_gke_ingress.yaml

当为 ESP 指定 healthz 参数时,它会将 nginx 配置为只为该路径返回 200:

% if healthz:
    location = /${healthz} {
      return 200;
      access_log off;
    }
% endif

https://github.com/cloudendpoints/esp/blob/5c9f586b14db58607d1780966cceac923809c150/start_esp/nginx-auto.conf.template#L123-L128

所以看起来谷歌希望你只对 ESP 容器进行健康检查,而不是你的后端。

这回答了我最初的问题,尽管它仍然引出了第二个问题,即:为什么不对后端进行健康检查?

于 2019-08-07T11:59:32.467 回答