*: add a new option --enable-grpc-gateway for enabling/disabling grpc gateway

This commit is contained in:
Hitoshi Mitake
2018-12-31 19:33:37 +09:00
parent ea0cf681c7
commit 72dd4a18c5
5 changed files with 38 additions and 23 deletions

View File

@@ -318,6 +318,9 @@ type Config struct {
loggerCore zapcore.Core loggerCore zapcore.Core
loggerWriteSyncer zapcore.WriteSyncer loggerWriteSyncer zapcore.WriteSyncer
// EnableGRPCGateway is false to disable grpc gateway.
EnableGRPCGateway bool `json:"enable-grpc-gateway"`
// TO BE DEPRECATED // TO BE DEPRECATED
// LogPkgLevels is being deprecated in v3.5. // LogPkgLevels is being deprecated in v3.5.

View File

@@ -200,6 +200,7 @@ func StartEtcd(inCfg *Config) (e *Etcd, err error) {
LoggerWriteSyncer: cfg.loggerWriteSyncer, LoggerWriteSyncer: cfg.loggerWriteSyncer,
Debug: cfg.Debug, Debug: cfg.Debug,
ForceNewCluster: cfg.ForceNewCluster, ForceNewCluster: cfg.ForceNewCluster,
EnableGRPCGateway: cfg.EnableGRPCGateway,
} }
print(e.cfg.logger, *cfg, srvcfg, memberInitialized) print(e.cfg.logger, *cfg, srvcfg, memberInitialized)
if e.Server, err = etcdserver.NewServer(srvcfg); err != nil { if e.Server, err = etcdserver.NewServer(srvcfg); err != nil {

View File

@@ -118,10 +118,12 @@ func (sctx *serveCtx) serve(
go func() { errHandler(gs.Serve(grpcl)) }() go func() { errHandler(gs.Serve(grpcl)) }()
var gwmux *gw.ServeMux var gwmux *gw.ServeMux
if s.Cfg.EnableGRPCGateway {
gwmux, err = sctx.registerGateway([]grpc.DialOption{grpc.WithInsecure()}) gwmux, err = sctx.registerGateway([]grpc.DialOption{grpc.WithInsecure()})
if err != nil { if err != nil {
return err return err
} }
}
httpmux := sctx.createMux(gwmux, handler) httpmux := sctx.createMux(gwmux, handler)
@@ -156,16 +158,18 @@ func (sctx *serveCtx) serve(
} }
handler = grpcHandlerFunc(gs, handler) handler = grpcHandlerFunc(gs, handler)
var gwmux *gw.ServeMux
if s.Cfg.EnableGRPCGateway {
dtls := tlscfg.Clone() dtls := tlscfg.Clone()
// trust local server // trust local server
dtls.InsecureSkipVerify = true dtls.InsecureSkipVerify = true
creds := credentials.NewTLS(dtls) creds := credentials.NewTLS(dtls)
opts := []grpc.DialOption{grpc.WithTransportCredentials(creds)} opts := []grpc.DialOption{grpc.WithTransportCredentials(creds)}
var gwmux *gw.ServeMux
gwmux, err = sctx.registerGateway(opts) gwmux, err = sctx.registerGateway(opts)
if err != nil { if err != nil {
return err return err
} }
}
var tlsl net.Listener var tlsl net.Listener
tlsl, err = transport.NewTLSListener(m.Match(cmux.Any()), tlsinfo) tlsl, err = transport.NewTLSListener(m.Match(cmux.Any()), tlsinfo)
@@ -270,6 +274,7 @@ func (sctx *serveCtx) createMux(gwmux *gw.ServeMux, handler http.Handler) *http.
httpmux.Handle(path, h) httpmux.Handle(path, h)
} }
if gwmux != nil {
httpmux.Handle( httpmux.Handle(
"/v3/", "/v3/",
wsproxy.WebsocketProxy( wsproxy.WebsocketProxy(
@@ -283,6 +288,7 @@ func (sctx *serveCtx) createMux(gwmux *gw.ServeMux, handler http.Handler) *http.
), ),
), ),
) )
}
if handler != nil { if handler != nil {
httpmux.Handle("/", handler) httpmux.Handle("/", handler)
} }

View File

@@ -241,6 +241,9 @@ func newConfig() *config {
fs.StringVar(&cfg.ec.AuthToken, "auth-token", cfg.ec.AuthToken, "Specify auth token specific options.") fs.StringVar(&cfg.ec.AuthToken, "auth-token", cfg.ec.AuthToken, "Specify auth token specific options.")
fs.UintVar(&cfg.ec.BcryptCost, "bcrypt-cost", cfg.ec.BcryptCost, "Specify bcrypt algorithm cost factor for auth password hashing.") fs.UintVar(&cfg.ec.BcryptCost, "bcrypt-cost", cfg.ec.BcryptCost, "Specify bcrypt algorithm cost factor for auth password hashing.")
// gateway
fs.BoolVar(&cfg.ec.EnableGRPCGateway, "enable-grpc-gateway", true, "Enable GRPC gateway.")
// experimental // experimental
fs.BoolVar(&cfg.ec.ExperimentalInitialCorruptCheck, "experimental-initial-corrupt-check", cfg.ec.ExperimentalInitialCorruptCheck, "Enable to check data corruption before serving any client/peer traffic.") fs.BoolVar(&cfg.ec.ExperimentalInitialCorruptCheck, "experimental-initial-corrupt-check", cfg.ec.ExperimentalInitialCorruptCheck, "Enable to check data corruption before serving any client/peer traffic.")
fs.DurationVar(&cfg.ec.ExperimentalCorruptCheckTime, "experimental-corrupt-check-time", cfg.ec.ExperimentalCorruptCheckTime, "Duration of time between cluster corruption check passes.") fs.DurationVar(&cfg.ec.ExperimentalCorruptCheckTime, "experimental-corrupt-check-time", cfg.ec.ExperimentalCorruptCheckTime, "Duration of time between cluster corruption check passes.")

View File

@@ -148,6 +148,8 @@ type ServerConfig struct {
// LeaseCheckpointInterval time.Duration is the wait duration between lease checkpoints. // LeaseCheckpointInterval time.Duration is the wait duration between lease checkpoints.
LeaseCheckpointInterval time.Duration LeaseCheckpointInterval time.Duration
EnableGRPCGateway bool
} }
// VerifyBootstrap sanity-checks the initial config for bootstrap case // VerifyBootstrap sanity-checks the initial config for bootstrap case