Kubernetes liveness probes with query string parameters

7/22/2016

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?

-- Josh
kubernetes
kubernetes-health-check

3 Answers

3/12/2018

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

-- Andrii Abramov
Source: StackOverflow

7/22/2016

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=...
-- CJ Cullen
Source: StackOverflow

7/22/2016

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.

-- Rudi C
Source: StackOverflow