带有查询字符串参数的 Kubernetes 活性探测

Kubernetes liveness probes with query string parameters

我查看了文档并浏览了源代码,但我似乎无法弄清楚如何执行此操作。在实现 Kubernetes 活性探测时,有什么方法可以将查询字符串参数与路径一起发送吗?

我发送的字符串,看起来像这样:

/api/v1?q=...

变成 URL 编码并命中服务器:

/api/v1%3fq=...

因为我在这个特定的 API 上没有这样的路由,我得到一个 404,并且 Kube 在分配的超时后获得 pods。

有没有什么方法可以为活性探测定义查询字符串参数and/or 欺骗 URI 编码器以允许查询字符串参数?

编辑:这现在应该在 Kubernetes 1.3 中得到修复。感谢 Rudi C 指出这一点。

Kubernetes v1.2 中的活动探测不支持传递查询参数。

Deis Controller repo 中的

This Issue 有很好的解释。要点是 LivenessProbe.HttpGet.Path 被视为真正的 URL 路径(需要将“?”转义为“%3f”)。

我已经针对 Kubernetes 打开了 feature request Issue 来讨论添加查询参数。

作为解决方法,您可以使用包含查询参数的 exec livenessProbe(只要您的容器包含 wget 或 curl 之类的东西):

livenessProbe:
  exec:
    command:
    - wget
    - /api/v1?q=...

你是哪个版本运行?转义是一个应该在 1.3 中修复的错误:

https://github.com/kubernetes/kubernetes/pull/25064

不完美,但不需要 YAML 中的额外 API 字段。

如果你有某种令牌授权(通过 get 参数)并且你对根进行健康检查(service-name/),你应该省略斜线,例如:

readinessProbe:
  httpGet:
    path: ?token=${TOKEN}
    port: 80
    scheme: HTTP

我不得不翻阅 PR changes 以找到指定它的方法