From 8369eefa53620cb791cfc1bed9b5dc359f4b4e9a Mon Sep 17 00:00:00 2001 From: Kyle Allan Date: Thu, 3 Oct 2024 20:07:41 -0400 Subject: [PATCH] Add a flag to sdkserver to avoid a collision on port 8080 (#4010) * add a flag to avoid a collision on port 8080 * update NewSDKServer calls with new signature --- cmd/sdk-server/main.go | 13 ++++++++++--- pkg/sdkserver/sdkserver.go | 4 ++-- pkg/sdkserver/sdkserver_test.go | 8 ++++---- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/cmd/sdk-server/main.go b/cmd/sdk-server/main.go index fabf5e511c..237de42852 100644 --- a/cmd/sdk-server/main.go +++ b/cmd/sdk-server/main.go @@ -47,8 +47,9 @@ import ( ) const ( - defaultGRPCPort = 9357 - defaultHTTPPort = 9358 + defaultGRPCPort = 9357 + defaultHTTPPort = 9358 + defaultHealthPort = 8080 // Flags (that can also be env vars) gameServerNameFlag = "gameserver-name" @@ -64,6 +65,7 @@ const ( timeoutFlag = "timeout" grpcPortFlag = "grpc-port" httpPortFlag = "http-port" + healthPortFlag = "health-port" logLevelFlag = "log-level" ) @@ -147,7 +149,7 @@ func main() { var s *sdkserver.SDKServer s, err = sdkserver.NewSDKServer(ctlConf.GameServerName, ctlConf.PodNamespace, - kubeClient, agonesClient, logLevel) + kubeClient, agonesClient, logLevel, ctlConf.HealthPort) if err != nil { logger.WithError(err).Fatalf("Could not start sidecar") } @@ -287,6 +289,7 @@ func parseEnvFlags() config { viper.SetDefault(gracefulTerminationFlag, true) viper.SetDefault(grpcPortFlag, defaultGRPCPort) viper.SetDefault(httpPortFlag, defaultHTTPPort) + viper.SetDefault(healthPortFlag, defaultHealthPort) viper.SetDefault(logLevelFlag, "Info") pflag.String(gameServerNameFlag, viper.GetString(gameServerNameFlag), "Optional flag to set GameServer name. Overrides value given from `GAMESERVER_NAME` environment variable.") @@ -298,6 +301,7 @@ func parseEnvFlags() config { pflag.String(addressFlag, viper.GetString(addressFlag), "The Address to bind the server grpcPort to. Defaults to 'localhost'") pflag.Int(grpcPortFlag, viper.GetInt(grpcPortFlag), fmt.Sprintf("Port on which to bind the gRPC server. Defaults to %d", defaultGRPCPort)) pflag.Int(httpPortFlag, viper.GetInt(httpPortFlag), fmt.Sprintf("Port on which to bind the HTTP server. Defaults to %d", defaultHTTPPort)) + pflag.Int(healthPortFlag, viper.GetInt(healthPortFlag), fmt.Sprintf("Port on which to bind the healthcheck port on the HTTP server. Defaults to %d", defaultHealthPort)) pflag.Int(delayFlag, viper.GetInt(delayFlag), "Time to delay (in seconds) before starting to execute main. Useful for tests") pflag.Int(timeoutFlag, viper.GetInt(timeoutFlag), "Time of execution (in seconds) before close. Useful for tests") pflag.String(testFlag, viper.GetString(testFlag), "List functions which should be called during the SDK Conformance test run.") @@ -322,6 +326,7 @@ func parseEnvFlags() config { runtime.Must(viper.BindEnv(timeoutFlag)) runtime.Must(viper.BindEnv(grpcPortFlag)) runtime.Must(viper.BindEnv(httpPortFlag)) + runtime.Must(viper.BindEnv(healthPortFlag)) runtime.Must(viper.BindPFlags(pflag.CommandLine)) runtime.Must(viper.BindEnv(logLevelFlag)) runtime.Must(runtime.FeaturesBindEnv()) @@ -341,6 +346,7 @@ func parseEnvFlags() config { GracefulTermination: viper.GetBool(gracefulTerminationFlag), GRPCPort: viper.GetInt(grpcPortFlag), HTTPPort: viper.GetInt(httpPortFlag), + HealthPort: viper.GetInt(healthPortFlag), LogLevel: viper.GetString(logLevelFlag), } } @@ -360,6 +366,7 @@ type config struct { GracefulTermination bool GRPCPort int HTTPPort int + HealthPort int LogLevel string } diff --git a/pkg/sdkserver/sdkserver.go b/pkg/sdkserver/sdkserver.go index 9d72571037..149e7fab02 100644 --- a/pkg/sdkserver/sdkserver.go +++ b/pkg/sdkserver/sdkserver.go @@ -141,7 +141,7 @@ type SDKServer struct { // NewSDKServer creates a SDKServer that sets up an // InClusterConfig for Kubernetes func NewSDKServer(gameServerName, namespace string, kubeClient kubernetes.Interface, - agonesClient versioned.Interface, logLevel logrus.Level) (*SDKServer, error) { + agonesClient versioned.Interface, logLevel logrus.Level, healthPort int) (*SDKServer, error) { mux := http.NewServeMux() resync := 30 * time.Second if runtime.FeatureEnabled(runtime.FeatureDisableResyncOnSDKServer) { @@ -163,7 +163,7 @@ func NewSDKServer(gameServerName, namespace string, kubeClient kubernetes.Interf gameServerLister: gameServers.Lister(), gameServerSynced: gameServers.Informer().HasSynced, server: &http.Server{ - Addr: ":8080", + Addr: fmt.Sprintf(":%d", healthPort), Handler: mux, }, clock: clock.RealClock{}, diff --git a/pkg/sdkserver/sdkserver_test.go b/pkg/sdkserver/sdkserver_test.go index d3476e82a8..b8fdaa2ca5 100644 --- a/pkg/sdkserver/sdkserver_test.go +++ b/pkg/sdkserver/sdkserver_test.go @@ -205,7 +205,7 @@ func TestSidecarRun(t *testing.T) { return true, gsCopy, nil }) - sc, err := NewSDKServer("test", "default", m.KubeClient, m.AgonesClient, logrus.DebugLevel) + sc, err := NewSDKServer("test", "default", m.KubeClient, m.AgonesClient, logrus.DebugLevel, 8080) stop := make(chan struct{}) defer close(stop) ctx, cancel := context.WithCancel(context.Background()) @@ -462,7 +462,7 @@ func TestSidecarUnhealthyMessage(t *testing.T) { t.Parallel() m := agtesting.NewMocks() - sc, err := NewSDKServer("test", "default", m.KubeClient, m.AgonesClient, logrus.DebugLevel) + sc, err := NewSDKServer("test", "default", m.KubeClient, m.AgonesClient, logrus.DebugLevel, 8080) require.NoError(t, err) gs := agonesv1.GameServer{ @@ -613,7 +613,7 @@ func TestSidecarHealthy(t *testing.T) { func TestSidecarHTTPHealthCheck(t *testing.T) { m := agtesting.NewMocks() - sc, err := NewSDKServer("test", "default", m.KubeClient, m.AgonesClient, logrus.DebugLevel) + sc, err := NewSDKServer("test", "default", m.KubeClient, m.AgonesClient, logrus.DebugLevel, 8080) require.NoError(t, err) now := time.Now().Add(time.Hour).UTC() @@ -2388,7 +2388,7 @@ func TestSDKServerGracefulTerminationGameServerStateChannel(t *testing.T) { } func defaultSidecar(m agtesting.Mocks) (*SDKServer, error) { - server, err := NewSDKServer("test", "default", m.KubeClient, m.AgonesClient, logrus.DebugLevel) + server, err := NewSDKServer("test", "default", m.KubeClient, m.AgonesClient, logrus.DebugLevel, 8080) if err != nil { return server, err }