我正在部署的项目是GKE容器后端,前端具有Cloud Endpoints API。它通过Ingress和NodePort服务。我已经在ESP容器上声明了就绪探测器:
readinessProbe:
httpGet:
path: /ping
port: 8080
但是我观察到/ ping路径必须在openapi.yaml中声明而没有任何安全性,否则它将返回404,或者在声明了某些安全性定义后返回401。
这是预期的吗?我在“端点样本”回购中看不到有关此内容的任何信息:
https://github.com/GoogleCloudPlatform/endpoints-samples/tree/master/k8s
答案 0 :(得分: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
因此,看来Google希望您只对ESP容器而不是后端进行健康检查。
这回答了我最初的问题,尽管它仍然导致第二个问题,即:为什么不对后端进行健康检查?
答案 1 :(得分:0)
我假设术语“后端”是指集群的节点或GKE运行的Pod。对于这两种情况,GKE都是自我管理的,节点和Pod的运行状况由主节点监视,因此它们应始终可用。有关这方面的更多信息,请参见Kubernetes Scheduler和GKE Cluster Architecture。
在这种情况下,用于GKE入口的运行状况检查不检查后端,而是检查群集中运行的服务。要检查这些服务是否正常,请按照本article中的说明使用就绪和活跃性探针。
答案 2 :(得分:0)
如果您想对后端进行健康检查,则需要在openapi配置中列出健康检查路径,以使ESP进行转发。
答案 3 :(得分:0)
我遇到了同样的问题,但似乎可以对GCE边车和最终的后端(例如,您实际构建的api)进行健康检查。
诀窍是,必须在云端点容器(而不是api容器)上将api的运行状况检查配置为就绪探针。您检查的端点也没有针对它的安全性,因此它是可公开访问的(尽管似乎您也可以使用api密钥配置运行状况检查)。
我遵循了先前的建议,还向esp容器添加了“ healthz”参数。我的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无法工作