Add k8s proxy

This commit is contained in:
Darren Shepherd
2019-08-07 22:41:31 -07:00
parent 24e6192504
commit 71faff9d2a
4 changed files with 134 additions and 6 deletions

View File

@@ -6,6 +6,7 @@ import (
"github.com/gorilla/mux"
"github.com/rancher/naok/pkg/accesscontrol"
"github.com/rancher/naok/pkg/attributes"
k8sproxy "github.com/rancher/naok/pkg/proxy"
"github.com/rancher/naok/pkg/schemas"
"github.com/rancher/norman/pkg/api"
"github.com/rancher/norman/pkg/store/proxy"
@@ -13,9 +14,14 @@ import (
"github.com/rancher/norman/pkg/types"
"github.com/rancher/norman/pkg/urlbuilder"
"k8s.io/apiserver/pkg/authentication/user"
"k8s.io/client-go/rest"
)
func newAPIServer(cf proxy.ClientGetter, as *accesscontrol.AccessStore, sf schemas.SchemaFactory) http.Handler {
func newAPIServer(cfg *rest.Config, cf proxy.ClientGetter, as *accesscontrol.AccessStore, sf schemas.SchemaFactory) (http.Handler, error) {
var (
err error
)
a := &apiServer{
Router: mux.NewRouter(),
cf: cf,
@@ -23,10 +29,15 @@ func newAPIServer(cf proxy.ClientGetter, as *accesscontrol.AccessStore, sf schem
sf: sf,
server: api.NewAPIServer(),
}
a.Router.NotFoundHandler, err = k8sproxy.Handler("/", cfg)
if err != nil {
return nil, err
}
a.Router.StrictSlash(true)
a.server.AccessControl = accesscontrol.NewAccessControl()
a.routes()
return a
return a, a.routes()
}
type apiServer struct {

View File

@@ -3,16 +3,15 @@ package server
import (
"net/http"
"github.com/rancher/naok/pkg/attributes"
"github.com/gorilla/mux"
"github.com/rancher/naok/pkg/attributes"
"github.com/rancher/norman/pkg/types"
"k8s.io/apimachinery/pkg/runtime/schema"
)
type APIFunc func(*types.APIRequest)
func (a *apiServer) routes() {
func (a *apiServer) routes() error {
a.Path("/v1/{type:schemas}").Handler(a.handle(nil))
a.Path("/v1/{type:schemas}/{name}").Handler(a.handle(nil))
a.Path("/v1/{type:subscribe}").Handler(a.handle(nil))
@@ -23,6 +22,8 @@ func (a *apiServer) routes() {
a.Path("/v1/apis/{group}/{version}/{resource}").Handler(a.handle(a.k8sAPI))
a.Path("/v1/apis/{group}/{version}/{resource}/{nameorns}").Handler(a.handle(a.k8sAPI))
return nil
}
func (a *apiServer) handle(apiFunc APIFunc) http.Handler {