Merge pull request #2437 from Abirdcfly/master
support kubectl get --raw /api/v1/nodes/{node}/proxy/metrics
This commit is contained in:
commit
c875d3ed2e
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue