Change:
Grabbed tcpdump of a readiness probe - the src ip was the bridge address (10.244.1.1), but apart from this, there is no identifying information in the HTTP request that this is a Kubernetes daemon requesting readiness checks - this might help QoS/priority assignment by the container application.
IIUC, you mean we should add a better when kubernetes daemon request a readiness check to identify this request comes from kubernetes daemon?
Yes, we should override the default net/http user-agent with our own. Better usability for users and we have no future upgrade hazards if users start hardcoding and expecting this default User-Agent string in their analytic tools.
Any news about this one? It would be nice! I've this little hack in my nginx configuration (in order to not be spamed by health check in logs) :)
This can probably be closed now that probes have support.

Discussion:
tags = ["automanaged"], deps = [ "//pkg/probe:go_default_library", <ins> "//pkg/version:go_default_library", </ins> "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/net:go_default_library", ],

utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/kubernetes/pkg/probe" <ins> "k8s.io/kubernetes/pkg/version" </ins> "github.com/golang/glog" )

// Convert errors into failures to catch timeouts. return probe.Failure, err.Error(), nil } <ins> if _, ok := headers["User-Agent"]; !ok { if headers == nil { headers = http.Header{} } // explicitly set User-Agent so it's not set to default Go value v := version.Get() headers.Set("User-Agent", fmt.Sprintf("kube-probe/%s.%s", v.Major, v.Minor)) } </ins> req.Header = headers if headers.Get("Host") != "" { req.Host = headers.Get("Host")

} } <ins> // Echo handler that returns the contents of request headers in the body headerEchoHandler := func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(200) output := "" for k, arr := range r.Header { for _, v := range arr { output += fmt.Sprintf("%s: %sn", k, v) } } w.Write([]byte(output)) } </ins> prober := New() testCases := []struct { handler    func(w http.ResponseWriter, r *http.Request) reqHeaders http.Header health     probe.Result accBody    string <ins> notBody    string </ins> }{ // The probe will be filled in below.  This is primarily testing that an HTTP GET happens. {

accBody: "ok body", }, { <del> // Echo handler that returns the contents of request headers in the body handler: func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(200) output := "" for k, arr := range r.Header { for _, v := range arr { output += fmt.Sprintf("%s: %sn", k, v) } } w.Write([]byte(output)) }, </del> <ins> handler: headerEchoHandler, </ins> reqHeaders: http.Header{ "X-Muffins-Or-Cupcakes": {"muffins"}, },

accBody: "X-Muffins-Or-Cupcakes: muffins", }, { <ins> handler: headerEchoHandler, reqHeaders: http.Header{ "User-Agent": {"foo/1.0"}, }, health:  probe.Success, accBody: "User-Agent: foo/1.0", }, { handler: headerEchoHandler, reqHeaders: http.Header{ "User-Agent": {""}, }, health:  probe.Success, notBody: "User-Agent", }, { handler:    headerEchoHandler, reqHeaders: http.Header{}, health:     probe.Success, accBody:    "User-Agent: kube-probe/", }, { </ins> // Echo handler that returns the contents of Host in the body handler: func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(200)

if !strings.Contains(output, test.accBody) { t.Errorf("Expected response body to contain %v, got %v", test.accBody, output) } <ins> if test.notBody != "" && strings.Contains(output, test.notBody) { t.Errorf("Expected response not to contain %v, got %v", test.notBody, output) } </ins> } }() }