【发布时间】:2023-02-25 03:49:58
【问题描述】:
我正在尝试部署一个配置了启动和活动探测的 Django 应用程序。因为它是一个 Django 应用程序,所以我需要探针上的 Host 标头来匹配我的 ALLOWED_HOSTS 中允许的内容。由于我的探测都是 httpGet 检查,最简单的解决方案似乎是将 httpHeaders 字段用作 suggested in the kubernetes docs。
这似乎适用于 startupProbe,但不适用于 livenessProbe。
我的探针的净化版本:
livenessProbe:
httpGet:
httpHeaders:
- name: Host
value: k8s-probes
path: /health/liveness
port: http
scheme: HTTP
startupProbe:
httpGet:
httpHeaders:
- name: Host
value: k8s-probes
path: /health/
port: http
scheme: HTTP
当 pod 启动时,我看到 200 个对初始启动探测的响应,然后一旦 liveness 探测启动,我得到 400 个响应,错误是 pod IP 地址不在 ALLOWED_HOSTS 中,表明 k8s 没有设置主机头我已经为 liveness probe 定义了。
【问题讨论】:
-
变量
k8s-probes的值是多少? -
实际值是服务的内部集群主机名,
pod-name.namespace。两个探头之间是相同的,我已经非常仔细地检查过了。 -
您可以在设置此
liveness端点的位置显示您的 Django 应用程序代码吗? -
我不能,这也不相关。 Django 拒绝基于主机不在 ALLOWED_HOSTS 中的请求。在 livenessProbe 的情况下,它永远不会到达我的健康代码,而在 startupProbe 的情况下,Host 标头设置为 httpHeaders 字段中定义的,并且一切正常运行。特别是在 livenessProbe 拒绝时,Django 记录主机标头被设置为 pod 的 IP。
-
@Endophage:启用探测前后是否使用相同的 HTTP 请求?你能提供你正在使用的请求吗?
标签: django kubernetes