diff --git a/app/cmd/start.go b/app/cmd/start.go index 9c86adb06..f3d10fed7 100644 --- a/app/cmd/start.go +++ b/app/cmd/start.go @@ -11,7 +11,9 @@ import ( "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/urfave/cli" + "google.golang.org/grpc" healthpb "google.golang.org/grpc/health/grpc_health_v1" + "google.golang.org/grpc/keepalive" "google.golang.org/grpc/reflection" "github.com/longhorn/longhorn-instance-manager/pkg/health" @@ -111,7 +113,12 @@ func start(c *cli.Context) error { logrus.Info("creating grpc server with no auth") } - rpcService, listenAt, err := util.NewServer("tcp://"+listen, tlsConfig) + rpcService, listenAt, err := util.NewServer("tcp://"+listen, tlsConfig, + grpc.KeepaliveEnforcementPolicy(keepalive.EnforcementPolicy{ + MinTime: 10 * time.Second, + PermitWithoutStream: true, + }), + ) if err != nil { return errors.Wrap(err, "failed to setup grpc server") } diff --git a/pkg/util/grpcutil.go b/pkg/util/grpcutil.go index f2cd50ee6..50e3c7015 100644 --- a/pkg/util/grpcutil.go +++ b/pkg/util/grpcutil.go @@ -43,7 +43,7 @@ func Connect(endpoint string, tlsConfig *tls.Config, dialOptions ...grpc.DialOpt // when using Unix domain sockets. It ensures that gRPC detects a dead connection // in a timely manner. // Code lifted from https://github.com/kubernetes-csi/csi-test/commit/6b8830bf5959a1c51c6e98fe514b22818b51eeeb - dialOptions = append(dialOptions, grpc.WithKeepaliveParams(keepalive.ClientParameters{PermitWithoutStream: true})) + dialOptions = append(dialOptions, grpc.WithKeepaliveParams(keepalive.ClientParameters{Time: 30 * time.Second, PermitWithoutStream: true})) return grpc.Dial(address, dialOptions...) }