Merge pull request #2437 from Abirdcfly/master

support kubectl get --raw /api/v1/nodes/{node}/proxy/metrics
This commit is contained in:
KubeEdge Bot 2021-01-05 19:51:44 +08:00 committed by GitHub
commit c875d3ed2e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 1 deletions

View File

@ -30,6 +30,7 @@ import (
"k8s.io/klog/v2"
"github.com/kubeedge/kubeedge/cloud/pkg/cloudstream/config"
"github.com/kubeedge/kubeedge/common/constants"
"github.com/kubeedge/kubeedge/pkg/stream/flushwriter"
)
@ -157,6 +158,14 @@ func (s *StreamServer) getMetrics(r *restful.Request, w *restful.Response) {
}()
sessionKey := strings.Split(r.Request.Host, ":")[0]
if forwardedURI := r.Request.Header.Get("X-Forwarded-Uri"); forwardedURI != "" {
if t := strings.Split(forwardedURI, "/"); strings.HasPrefix(forwardedURI, "/api/v1/nodes/") && len(t) > 6 {
sessionKey = t[4]
if ip, ok := s.tunnel.getNodeIP(sessionKey); ok {
r.Request.Host = fmt.Sprintf("%s:%d", ip, constants.ServerPort)
}
}
}
session, ok := s.tunnel.getSession(sessionKey)
if !ok {
err = fmt.Errorf("Can not find %v session ", sessionKey)

View File

@ -39,7 +39,8 @@ type TunnelServer struct {
container *restful.Container
upgrader websocket.Upgrader
sync.Mutex
sessions map[string]*Session
sessions map[string]*Session
nodeNameIP sync.Map
}
func newTunnelServer() *TunnelServer {
@ -79,6 +80,18 @@ func (s *TunnelServer) getSession(id string) (*Session, bool) {
return sess, ok
}
func (s *TunnelServer) addNodeIP(node, ip string) {
s.nodeNameIP.Store(node, ip)
}
func (s *TunnelServer) getNodeIP(node string) (string, bool) {
ip, ok := s.nodeNameIP.Load(node)
if !ok {
return "", ok
}
return ip.(string), ok
}
func (s *TunnelServer) connect(r *restful.Request, w *restful.Response) {
hostNameOverride := r.HeaderParameter(stream.SessionKeyHostNameOveride)
interalIP := r.HeaderParameter(stream.SessionKeyInternalIP)
@ -100,6 +113,7 @@ func (s *TunnelServer) connect(r *restful.Request, w *restful.Response) {
s.addSession(hostNameOverride, session)
s.addSession(interalIP, session)
s.addNodeIP(hostNameOverride, interalIP)
session.Serve()
}