package controlplane import ( "context" "fmt" "net" "time" clusterservice "github.com/envoyproxy/go-control-plane/envoy/service/cluster/v3" discoverygrpc "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v3" endpointservice "github.com/envoyproxy/go-control-plane/envoy/service/endpoint/v3" listenerservice "github.com/envoyproxy/go-control-plane/envoy/service/listener/v3" routeservice "github.com/envoyproxy/go-control-plane/envoy/service/route/v3" runtimeservice "github.com/envoyproxy/go-control-plane/envoy/service/runtime/v3" secretservice "github.com/envoyproxy/go-control-plane/envoy/service/secret/v3" serverv3 "github.com/envoyproxy/go-control-plane/pkg/server/v3" "google.golang.org/grpc" "google.golang.org/grpc/keepalive" plog "github.com/wencaiwulue/kubevpn/v2/pkg/log" ) const ( grpcMaxConcurrentStreams = 1000000 ) func RunServer(ctx context.Context, server serverv3.Server, port uint) error { grpcOpts := []grpc.ServerOption{ grpc.MaxConcurrentStreams(grpcMaxConcurrentStreams), grpc.KeepaliveParams(keepalive.ServerParameters{ Time: 15 * time.Second, Timeout: 5 * time.Second, }), grpc.KeepaliveEnforcementPolicy(keepalive.EnforcementPolicy{ MinTime: 15 * time.Second, PermitWithoutStream: true, })} grpcServer := grpc.NewServer(grpcOpts...) var lc net.ListenConfig listener, err := lc.Listen(ctx, "tcp", fmt.Sprintf(":%d", port)) if err != nil { return err } discoverygrpc.RegisterAggregatedDiscoveryServiceServer(grpcServer, server) endpointservice.RegisterEndpointDiscoveryServiceServer(grpcServer, server) clusterservice.RegisterClusterDiscoveryServiceServer(grpcServer, server) routeservice.RegisterRouteDiscoveryServiceServer(grpcServer, server) listenerservice.RegisterListenerDiscoveryServiceServer(grpcServer, server) secretservice.RegisterSecretDiscoveryServiceServer(grpcServer, server) runtimeservice.RegisterRuntimeDiscoveryServiceServer(grpcServer, server) plog.G(ctx).Infof("Management server listening on %d", port) return grpcServer.Serve(listener) }