package internal import ( "fmt" "log" "net" "time" "google.golang.org/grpc" "google.golang.org/grpc/keepalive" 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" "github.com/envoyproxy/go-control-plane/pkg/server/v3" ) const ( grpcKeepaliveTime = 30 * time.Second grpcKeepaliveTimeout = 5 * time.Second grpcKeepaliveMinTime = 30 * time.Second grpcMaxConcurrent = 1000000 ) // RunServer starts the xDS management server on the given port. func RunServer(srv server.Server, port uint) { var grpcOptions []grpc.ServerOption grpcOptions = append(grpcOptions, grpc.MaxConcurrentStreams(grpcMaxConcurrent), grpc.KeepaliveParams(keepalive.ServerParameters{ Time: grpcKeepaliveTime, Timeout: grpcKeepaliveTimeout, }), grpc.KeepaliveEnforcementPolicy(keepalive.EnforcementPolicy{ MinTime: grpcKeepaliveMinTime, PermitWithoutStream: true, }), ) grpcServer := grpc.NewServer(grpcOptions...) // Register all xDS services discoverygrpc.RegisterAggregatedDiscoveryServiceServer(grpcServer, srv) endpointservice.RegisterEndpointDiscoveryServiceServer(grpcServer, srv) clusterservice.RegisterClusterDiscoveryServiceServer(grpcServer, srv) routeservice.RegisterRouteDiscoveryServiceServer(grpcServer, srv) listenerservice.RegisterListenerDiscoveryServiceServer(grpcServer, srv) secretservice.RegisterSecretDiscoveryServiceServer(grpcServer, srv) runtimeservice.RegisterRuntimeDiscoveryServiceServer(grpcServer, srv) addr := fmt.Sprintf(":%d", port) lis, err := net.Listen("tcp", addr) if err != nil { log.Fatalf("failed to listen on %s: %v", addr, err) } log.Printf("management server listening on %s\n", addr) if err := grpcServer.Serve(lis); err != nil { log.Fatalf("gRPC server failed: %v", err) } }