I've looked over the documentation and browsed the source, but I can't seem to figure out how to do this. Is there any way to send query string parameters along with the path when implementing a Kubernetes liveness probe?
The string I am sending, which looks something like this:
/api/v1?q=...
becomes URL-encoded and hits the server as:
/api/v1%3fq=...
As I have no such route on this particular API, I get a 404, and Kube reaps the pods after the allotted timeout.
Is there any way to define query string parameters to liveness probes and/or trick the URI encoder to allow query string parameters?
EDIT: This should now be fixed in Kubernetes 1.3. Thanks to Rudi C for pointing that out.
Liveness probes in Kubernetes v1.2 don't support passing query parameters.
This Issue in the Deis Controller repo has a good explanation. The gist is that the LivenessProbe.HttpGet.Path is treated as a true URL path (which needs the "?" to be escaped as "%3f").
I've opened a feature request Issue against Kubernetes to discuss adding query parameter(s).
As a workaround, you could use an exec livenessProbe that included the query parameters (as long as your container includes something like wget or curl):
livenessProbe:
exec:
command:
- wget
- /api/v1?q=...
Which version are you running? The escaping is a bug that was supposed to be fixed in 1.3:
https://github.com/kubernetes/kubernetes/pull/25064
Not perfect, but it doesn't require additional API fields in the YAML.
If you have some kind of token authorization (via get parameter) and you have health check on root (service-name/
), you should omit the slash, for example:
readinessProbe:
httpGet:
path: ?token=${TOKEN}
port: 80
scheme: HTTP
I had to look through PR changes to find the way to specify it
来源:https://stackoverflow.com/questions/38532286/kubernetes-liveness-probes-with-query-string-parameters