mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-17 07:03:31 +00:00
Merge pull request #2005 from erictune/master_integ_test
Move handler setup: cmd/apiserver -> pkg/master
This commit is contained in:
@@ -24,14 +24,10 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/auth/authenticator/bearertoken"
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/auth/authenticator/tokenfile"
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/auth/handlers"
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/capabilities"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/capabilities"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider"
|
||||||
@@ -188,7 +184,7 @@ func main() {
|
|||||||
|
|
||||||
n := net.IPNet(portalNet)
|
n := net.IPNet(portalNet)
|
||||||
mux := http.NewServeMux()
|
mux := http.NewServeMux()
|
||||||
master.New(&master.Config{
|
m := master.New(&master.Config{
|
||||||
Client: client,
|
Client: client,
|
||||||
Cloud: cloud,
|
Cloud: cloud,
|
||||||
EtcdHelper: helper,
|
EtcdHelper: helper,
|
||||||
@@ -204,38 +200,21 @@ func main() {
|
|||||||
resources.Memory: util.NewIntOrStringFromInt(*nodeMemory),
|
resources.Memory: util.NewIntOrStringFromInt(*nodeMemory),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
PortalNet: &n,
|
PortalNet: &n,
|
||||||
Mux: mux,
|
Mux: mux,
|
||||||
EnableLogsSupport: *enableLogsSupport,
|
EnableLogsSupport: *enableLogsSupport,
|
||||||
EnableUISupport: true,
|
EnableUISupport: true,
|
||||||
APIPrefix: *apiPrefix,
|
APIPrefix: *apiPrefix,
|
||||||
|
CorsAllowedOriginList: corsAllowedOriginList,
|
||||||
|
TokenAuthFile: *tokenAuthFile,
|
||||||
})
|
})
|
||||||
|
|
||||||
handler := http.Handler(mux)
|
|
||||||
|
|
||||||
if len(corsAllowedOriginList) > 0 {
|
|
||||||
allowedOriginRegexps, err := util.CompileRegexps(corsAllowedOriginList)
|
|
||||||
if err != nil {
|
|
||||||
glog.Fatalf("Invalid CORS allowed origin, --cors_allowed_origins flag was set to %v - %v", strings.Join(corsAllowedOriginList, ","), err)
|
|
||||||
}
|
|
||||||
handler = apiserver.CORS(handler, allowedOriginRegexps, nil, nil, "true")
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(*tokenAuthFile) != 0 {
|
|
||||||
auth, err := tokenfile.New(*tokenAuthFile)
|
|
||||||
if err != nil {
|
|
||||||
glog.Fatalf("Unable to load the token authentication file '%s': %v", *tokenAuthFile, err)
|
|
||||||
}
|
|
||||||
userContexts := handlers.NewUserRequestContext()
|
|
||||||
handler = handlers.NewRequestAuthenticator(userContexts, bearertoken.New(auth), handlers.Unauthorized, handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
if *readOnlyPort != 0 {
|
if *readOnlyPort != 0 {
|
||||||
// Allow 1 read-only request per second, allow up to 20 in a burst before enforcing.
|
// Allow 1 read-only request per second, allow up to 20 in a burst before enforcing.
|
||||||
rl := util.NewTokenBucketRateLimiter(1.0, 20)
|
rl := util.NewTokenBucketRateLimiter(1.0, 20)
|
||||||
readOnlyServer := &http.Server{
|
readOnlyServer := &http.Server{
|
||||||
Addr: net.JoinHostPort(address.String(), strconv.Itoa(int(*readOnlyPort))),
|
Addr: net.JoinHostPort(address.String(), strconv.Itoa(int(*readOnlyPort))),
|
||||||
Handler: apiserver.RecoverPanics(apiserver.ReadOnly(apiserver.RateLimit(rl, handler))),
|
Handler: apiserver.RecoverPanics(apiserver.ReadOnly(apiserver.RateLimit(rl, m.Handler))),
|
||||||
ReadTimeout: 5 * time.Minute,
|
ReadTimeout: 5 * time.Minute,
|
||||||
WriteTimeout: 5 * time.Minute,
|
WriteTimeout: 5 * time.Minute,
|
||||||
MaxHeaderBytes: 1 << 20,
|
MaxHeaderBytes: 1 << 20,
|
||||||
@@ -248,7 +227,7 @@ func main() {
|
|||||||
|
|
||||||
s := &http.Server{
|
s := &http.Server{
|
||||||
Addr: net.JoinHostPort(address.String(), strconv.Itoa(int(*port))),
|
Addr: net.JoinHostPort(address.String(), strconv.Itoa(int(*port))),
|
||||||
Handler: apiserver.RecoverPanics(handler),
|
Handler: apiserver.RecoverPanics(m.Handler),
|
||||||
ReadTimeout: 5 * time.Minute,
|
ReadTimeout: 5 * time.Minute,
|
||||||
WriteTimeout: 5 * time.Minute,
|
WriteTimeout: 5 * time.Minute,
|
||||||
MaxHeaderBytes: 1 << 20,
|
MaxHeaderBytes: 1 << 20,
|
||||||
|
@@ -18,6 +18,8 @@ package master
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"net"
|
"net"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
@@ -25,6 +27,9 @@ import (
|
|||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/v1beta1"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/v1beta1"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/v1beta2"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/v1beta2"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/auth/authenticator/bearertoken"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/auth/authenticator/tokenfile"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/auth/handlers"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider"
|
||||||
cloudcontroller "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/controller"
|
cloudcontroller "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/controller"
|
||||||
@@ -41,43 +46,52 @@ import (
|
|||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/ui"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/ui"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
||||||
|
|
||||||
|
"github.com/golang/glog"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Config is a structure used to configure a Master.
|
// Config is a structure used to configure a Master.
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Client *client.Client
|
Client *client.Client
|
||||||
Cloud cloudprovider.Interface
|
Cloud cloudprovider.Interface
|
||||||
EtcdHelper tools.EtcdHelper
|
EtcdHelper tools.EtcdHelper
|
||||||
HealthCheckMinions bool
|
HealthCheckMinions bool
|
||||||
Minions []string
|
Minions []string
|
||||||
MinionCacheTTL time.Duration
|
MinionCacheTTL time.Duration
|
||||||
EventTTL time.Duration
|
EventTTL time.Duration
|
||||||
MinionRegexp string
|
MinionRegexp string
|
||||||
KubeletClient client.KubeletClient
|
KubeletClient client.KubeletClient
|
||||||
NodeResources api.NodeResources
|
NodeResources api.NodeResources
|
||||||
PortalNet *net.IPNet
|
PortalNet *net.IPNet
|
||||||
Mux apiserver.Mux
|
Mux apiserver.Mux
|
||||||
EnableLogsSupport bool
|
EnableLogsSupport bool
|
||||||
EnableUISupport bool
|
EnableUISupport bool
|
||||||
APIPrefix string
|
APIPrefix string
|
||||||
|
CorsAllowedOriginList util.StringList
|
||||||
|
TokenAuthFile string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Master contains state for a Kubernetes cluster master/api server.
|
// Master contains state for a Kubernetes cluster master/api server.
|
||||||
type Master struct {
|
type Master struct {
|
||||||
podRegistry pod.Registry
|
// "Inputs", Copied from Config
|
||||||
controllerRegistry controller.Registry
|
podRegistry pod.Registry
|
||||||
serviceRegistry service.Registry
|
controllerRegistry controller.Registry
|
||||||
endpointRegistry endpoint.Registry
|
serviceRegistry service.Registry
|
||||||
minionRegistry minion.Registry
|
endpointRegistry endpoint.Registry
|
||||||
bindingRegistry binding.Registry
|
minionRegistry minion.Registry
|
||||||
eventRegistry generic.Registry
|
bindingRegistry binding.Registry
|
||||||
storage map[string]apiserver.RESTStorage
|
eventRegistry generic.Registry
|
||||||
client *client.Client
|
storage map[string]apiserver.RESTStorage
|
||||||
portalNet *net.IPNet
|
client *client.Client
|
||||||
mux apiserver.Mux
|
portalNet *net.IPNet
|
||||||
enableLogsSupport bool
|
mux apiserver.Mux
|
||||||
enableUISupport bool
|
enableLogsSupport bool
|
||||||
apiPrefix string
|
enableUISupport bool
|
||||||
|
apiPrefix string
|
||||||
|
corsAllowedOriginList util.StringList
|
||||||
|
tokenAuthFile string
|
||||||
|
// "Outputs"
|
||||||
|
Handler http.Handler
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewEtcdHelper returns an EtcdHelper for the provided arguments or an error if the version
|
// NewEtcdHelper returns an EtcdHelper for the provided arguments or an error if the version
|
||||||
@@ -101,19 +115,21 @@ func New(c *Config) *Master {
|
|||||||
ServiceRegistry: serviceRegistry,
|
ServiceRegistry: serviceRegistry,
|
||||||
}
|
}
|
||||||
m := &Master{
|
m := &Master{
|
||||||
podRegistry: etcd.NewRegistry(c.EtcdHelper, boundPodFactory),
|
podRegistry: etcd.NewRegistry(c.EtcdHelper, boundPodFactory),
|
||||||
controllerRegistry: etcd.NewRegistry(c.EtcdHelper, nil),
|
controllerRegistry: etcd.NewRegistry(c.EtcdHelper, nil),
|
||||||
serviceRegistry: serviceRegistry,
|
serviceRegistry: serviceRegistry,
|
||||||
endpointRegistry: etcd.NewRegistry(c.EtcdHelper, nil),
|
endpointRegistry: etcd.NewRegistry(c.EtcdHelper, nil),
|
||||||
bindingRegistry: etcd.NewRegistry(c.EtcdHelper, boundPodFactory),
|
bindingRegistry: etcd.NewRegistry(c.EtcdHelper, boundPodFactory),
|
||||||
eventRegistry: event.NewEtcdRegistry(c.EtcdHelper, uint64(c.EventTTL.Seconds())),
|
eventRegistry: event.NewEtcdRegistry(c.EtcdHelper, uint64(c.EventTTL.Seconds())),
|
||||||
minionRegistry: minionRegistry,
|
minionRegistry: minionRegistry,
|
||||||
client: c.Client,
|
client: c.Client,
|
||||||
portalNet: c.PortalNet,
|
portalNet: c.PortalNet,
|
||||||
mux: c.Mux,
|
mux: c.Mux,
|
||||||
enableLogsSupport: c.EnableLogsSupport,
|
enableLogsSupport: c.EnableLogsSupport,
|
||||||
enableUISupport: c.EnableUISupport,
|
enableUISupport: c.EnableUISupport,
|
||||||
apiPrefix: c.APIPrefix,
|
apiPrefix: c.APIPrefix,
|
||||||
|
corsAllowedOriginList: c.CorsAllowedOriginList,
|
||||||
|
tokenAuthFile: c.TokenAuthFile,
|
||||||
}
|
}
|
||||||
m.init(c)
|
m.init(c)
|
||||||
return m
|
return m
|
||||||
@@ -170,6 +186,26 @@ func (m *Master) init(c *Config) {
|
|||||||
if c.EnableUISupport {
|
if c.EnableUISupport {
|
||||||
ui.InstallSupport(m.mux)
|
ui.InstallSupport(m.mux)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handler := http.Handler(m.mux.(*http.ServeMux))
|
||||||
|
|
||||||
|
if len(c.CorsAllowedOriginList) > 0 {
|
||||||
|
allowedOriginRegexps, err := util.CompileRegexps(c.CorsAllowedOriginList)
|
||||||
|
if err != nil {
|
||||||
|
glog.Fatalf("Invalid CORS allowed origin, --cors_allowed_origins flag was set to %v - %v", strings.Join(c.CorsAllowedOriginList, ","), err)
|
||||||
|
}
|
||||||
|
handler = apiserver.CORS(handler, allowedOriginRegexps, nil, nil, "true")
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(c.TokenAuthFile) != 0 {
|
||||||
|
auth, err := tokenfile.New(c.TokenAuthFile)
|
||||||
|
if err != nil {
|
||||||
|
glog.Fatalf("Unable to load the token authentication file '%s': %v", c.TokenAuthFile, err)
|
||||||
|
}
|
||||||
|
userContexts := handlers.NewUserRequestContext()
|
||||||
|
handler = handlers.NewRequestAuthenticator(userContexts, bearertoken.New(auth), handlers.Unauthorized, handler)
|
||||||
|
}
|
||||||
|
m.Handler = handler
|
||||||
}
|
}
|
||||||
|
|
||||||
// API_v1beta1 returns the resources and codec for API version v1beta1.
|
// API_v1beta1 returns the resources and codec for API version v1beta1.
|
||||||
|
Reference in New Issue
Block a user