-
Notifications
You must be signed in to change notification settings - Fork 400
/
kubelet.go
36 lines (31 loc) · 1.05 KB
/
kubelet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package filters
import (
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
"k8s.io/client-go/rest"
"net/http"
"sigs.k8s.io/controller-runtime/pkg/client"
)
func WithFakeKubelet(h http.Handler, localConfig *rest.Config, cachedVirtualClient client.Client, targetNamespace string) http.Handler {
s := serializer.NewCodecFactory(cachedVirtualClient.Scheme())
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
nodeName, found := NodeNameFrom(req.Context())
if found {
// make sure there is a leading slash
if req.URL.Path[0] != '/' {
req.URL.Path = "/" + req.URL.Path
}
// construct the actual path
req.URL.Path = "/api/v1/nodes/" + nodeName + "/proxy" + req.URL.Path
// execute the request
_, err := handleNodeRequest(localConfig, cachedVirtualClient, targetNamespace, w, req)
if err != nil {
responsewriters.ErrorNegotiated(err, s, corev1.SchemeGroupVersion, w, req)
return
}
return
}
h.ServeHTTP(w, req)
})
}