You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes存活探针直接执行curl失效,脚本执行正常的原因

问题:Kubernetes存活探针直接执行curl与脚本执行结果不一致

配置的存活探针直接执行curl命令时失败:

livenessProbe:
    exec:
        command:
            - curl
            - --fail
            - -X POST
            - http://localhost/test
            - '-d "data"'

执行kubectl describe pods/pod_name得到错误:

Liveness probe failed:   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100     7    0     0  100     7      0     62 --:--:-- --:--:-- --:--:--    63
curl: (22) The requested URL returned error: 400

但将相同命令写入脚本/tmp/a.sh:

curl --fail -X POST http://localhost/test -d "data"
exit $?

修改探针为执行脚本后正常:

livenessProbe:
    exec:
        command:
            - sh
            - /tmp/a.sh

手动进入容器执行curl命令也正常,为何两种执行方式结果不同?


原因分析

核心问题是Kubernetes exec探针的参数解析逻辑和shell脚本的解析逻辑不同:

  • 在探针直接执行curl的配置中,'-d "data"'会被作为一个完整的参数传递给curl,也就是说curl实际接收到的POST数据是带双引号的字符串"data",而不是预期的data。服务端可能因为接收到不符合格式的参数(包含多余引号),返回400错误。

  • 当把命令写入脚本通过sh执行时,shell会对参数进行解析:-d "data"中的双引号会被shell移除,curl实际收到的POST数据是data,和手动执行时的参数一致,所以请求能被服务端正常处理,探针通过。

如果要让探针直接执行curl就正常,需要去掉参数里的额外引号,修改配置为:

livenessProbe:
    exec:
        command:
            - curl
            - --fail
            - -X POST
            - http://localhost/test
            - -d
            - data

或者保留单引号但去掉内部的双引号:

livenessProbe:
    exec:
        command:
            - curl
            - --fail
            - -X POST
            - http://localhost/test
            - '-d data'

这样curl就能收到正确的POST数据,探针即可正常工作。


内容的提问来源于stack exchange,提问作者Log

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:34:54