Skip to content

Commit 2295f46

Browse files
committed
SDK Service Account was Hardcoded
The value of agones.serviceaccount.sdk was not propagated down to the creation of the GameServer Pod, so there actually was no way to edit the service account information without Agones breaking. This is now fixed!
1 parent 5ce5c4a commit 2295f46

File tree

7 files changed

+22
-5
lines changed

7 files changed

+22
-5
lines changed

‎cmd/controller/main.go‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ const (
5959
sidecarImageFlag="sidecar-image"
6060
sidecarCPURequestFlag="sidecar-cpu-request"
6161
sidecarCPULimitFlag="sidecar-cpu-limit"
62+
sdkServerAccountFlag="sdk-service-account"
6263
pullSidecarFlag="always-pull-sidecar"
6364
minPortFlag="min-port"
6465
maxPortFlag="max-port"
@@ -188,7 +189,7 @@ func main(){
188189

189190
gsController:=gameservers.NewController(wh, health,
190191
ctlConf.MinPort, ctlConf.MaxPort, ctlConf.SidecarImage, ctlConf.AlwaysPullSidecar,
191-
ctlConf.SidecarCPURequest, ctlConf.SidecarCPULimit,
192+
ctlConf.SidecarCPURequest, ctlConf.SidecarCPULimit,ctlConf.SdkServiceAccount,
192193
kubeClient, kubeInformerFactory, extClient, agonesClient, agonesInformerFactory)
193194
gsSetController:=gameserversets.NewController(wh, health, gsCounter,
194195
kubeClient, extClient, agonesClient, agonesInformerFactory)
@@ -231,6 +232,7 @@ func parseEnvFlags() config{
231232
viper.SetDefault(sidecarCPURequestFlag, "0")
232233
viper.SetDefault(sidecarCPULimitFlag, "0")
233234
viper.SetDefault(pullSidecarFlag, false)
235+
viper.SetDefault(sdkServerAccountFlag, "agones-sdk")
234236
viper.SetDefault(certFileFlag, filepath.Join(base, "certs/server.crt"))
235237
viper.SetDefault(keyFileFlag, filepath.Join(base, "certs/server.key"))
236238
viper.SetDefault(enablePrometheusMetricsFlag, true)
@@ -246,6 +248,7 @@ func parseEnvFlags() config{
246248
pflag.String(sidecarCPULimitFlag, viper.GetString(sidecarCPULimitFlag), "Flag to overwrite the GameServer sidecar container's cpu limit. Can also use SIDECAR_CPU_LIMIT env variable")
247249
pflag.String(sidecarCPURequestFlag, viper.GetString(sidecarCPURequestFlag), "Flag to overwrite the GameServer sidecar container's cpu request. Can also use SIDECAR_CPU_REQUEST env variable")
248250
pflag.Bool(pullSidecarFlag, viper.GetBool(pullSidecarFlag), "For development purposes, set the sidecar image to have a ImagePullPolicy of Always. Can also use ALWAYS_PULL_SIDECAR env variable")
251+
pflag.String(sdkServerAccountFlag, viper.GetString(sdkServerAccountFlag), "Overwrite what service account default for GameServer Pods. Defaults to Can also use SDK_SERVICE_ACCOUNT")
249252
pflag.Int32(minPortFlag, 0, "Required. The minimum port that that a GameServer can be allocated to. Can also use MIN_PORT env variable.")
250253
pflag.Int32(maxPortFlag, 0, "Required. The maximum port that that a GameServer can be allocated to. Can also use MAX_PORT env variable")
251254
pflag.String(keyFileFlag, viper.GetString(keyFileFlag), "Optional. Path to the key file")
@@ -266,6 +269,7 @@ func parseEnvFlags() config{
266269
runtime.Must(viper.BindEnv(sidecarCPULimitFlag))
267270
runtime.Must(viper.BindEnv(sidecarCPURequestFlag))
268271
runtime.Must(viper.BindEnv(pullSidecarFlag))
272+
runtime.Must(viper.BindEnv(sdkServerAccountFlag))
269273
runtime.Must(viper.BindEnv(minPortFlag))
270274
runtime.Must(viper.BindEnv(maxPortFlag))
271275
runtime.Must(viper.BindEnv(keyFileFlag))
@@ -297,6 +301,7 @@ func parseEnvFlags() config{
297301
SidecarImage: viper.GetString(sidecarImageFlag),
298302
SidecarCPURequest: request,
299303
SidecarCPULimit: limit,
304+
SdkServiceAccount: viper.GetString(sdkServerAccountFlag),
300305
AlwaysPullSidecar: viper.GetBool(pullSidecarFlag),
301306
KeyFile: viper.GetString(keyFileFlag),
302307
CertFile: viper.GetString(certFileFlag),
@@ -319,6 +324,7 @@ type config struct{
319324
SidecarImagestring
320325
SidecarCPURequest resource.Quantity
321326
SidecarCPULimit resource.Quantity
327+
SdkServiceAccountstring
322328
AlwaysPullSidecarbool
323329
PrometheusMetricsbool
324330
Stackdriverbool

‎install/helm/agones/templates/controller.yaml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ spec:
8484
value: {{.Values.agones.image.sdk.alwaysPull | quote }}
8585
- name: SIDECAR_CPU_REQUEST
8686
value: {{.Values.agones.image.sdk.cpuRequest | quote }}
87+
- name: SDK_SERVICE_ACCOUNT
88+
value: {{.Values.agones.serviceaccount.sdk | quote }}
8789
- name: PROMETHEUS_EXPORTER
8890
value: {{.Values.agones.metrics.prometheusEnabled | quote }}
8991
- name: STACKDRIVER_EXPORTER

‎install/yaml/install.yaml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,6 +1139,8 @@ spec:
11391139
value: "false"
11401140
- name: SIDECAR_CPU_REQUEST
11411141
value: "30m"
1142+
- name: SDK_SERVICE_ACCOUNT
1143+
value: "agones-sdk"
11421144
- name: PROMETHEUS_EXPORTER
11431145
value: "true"
11441146
- name: STACKDRIVER_EXPORTER

‎pkg/apis/stable/v1alpha1/gameserver.go‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,6 @@ const (
7676
// GameServerContainerAnnotation is the annotation that stores
7777
// which container is the container that runs the dedicated game server
7878
GameServerContainerAnnotation=stable.GroupName+"/container"
79-
// SidecarServiceAccountName is the default service account for managing access to get/update GameServers
80-
SidecarServiceAccountName="agones-sdk"
8179
// DevAddressAnnotation is an annotation to indicate that a GameServer hosted outside of Agones.
8280
// A locally hosted GameServer is not managed by Agones it is just simply registered.
8381
DevAddressAnnotation="stable.agones.dev/dev-address"

‎pkg/apis/stable/v1alpha1/gameserver_test.go‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,6 @@ func TestGameServerPod(t *testing.T){
322322
assert.Equal(t, "gameserver", pod.ObjectMeta.Labels[stable.GroupName+"/role"])
323323
assert.Equal(t, fixture.ObjectMeta.Name, pod.ObjectMeta.Labels[GameServerPodLabel])
324324
assert.Equal(t, fixture.Spec.Container, pod.ObjectMeta.Annotations[GameServerContainerAnnotation])
325-
assert.Equal(t, "agones-sdk", pod.Spec.ServiceAccountName)
326325
assert.True(t, metav1.IsControlledBy(pod, fixture))
327326
assert.Equal(t, fixture.Spec.Ports[0].HostPort, pod.Spec.Containers[0].Ports[0].HostPort)
328327
assert.Equal(t, fixture.Spec.Ports[0].ContainerPort, pod.Spec.Containers[0].Ports[0].ContainerPort)

‎pkg/gameservers/controller.go‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ type Controller struct{
6565
alwaysPullSidecarImagebool
6666
sidecarCPURequest resource.Quantity
6767
sidecarCPULimit resource.Quantity
68+
sdkServiceAccountstring
6869
crdGetter v1beta1.CustomResourceDefinitionInterface
6970
podGetter typedcorev1.PodsGetter
7071
podLister corelisterv1.PodLister
@@ -92,6 +93,7 @@ func NewController(
9293
alwaysPullSidecarImagebool,
9394
sidecarCPURequest resource.Quantity,
9495
sidecarCPULimit resource.Quantity,
96+
sdkServiceAccountstring,
9597
kubeClient kubernetes.Interface,
9698
kubeInformerFactory informers.SharedInformerFactory,
9799
extClient extclientset.Interface,
@@ -107,6 +109,7 @@ func NewController(
107109
sidecarCPULimit: sidecarCPULimit,
108110
sidecarCPURequest: sidecarCPURequest,
109111
alwaysPullSidecarImage: alwaysPullSidecarImage,
112+
sdkServiceAccount: sdkServiceAccount,
110113
crdGetter: extClient.ApiextensionsV1beta1().CustomResourceDefinitions(),
111114
podGetter: kubeClient.CoreV1(),
112115
podLister: pods.Lister(),
@@ -525,6 +528,11 @@ func (c *Controller) createGameServerPod(gs *v1alpha1.GameServer) (*v1alpha1.Gam
525528
returngs, err
526529
}
527530

531+
// apply the sdk service account
532+
ifpod.Spec.ServiceAccountName==""{
533+
pod.Spec.ServiceAccountName=c.sdkServiceAccount
534+
}
535+
528536
c.addGameServerHealthCheck(gs, pod)
529537

530538
c.loggerForGameServer(gs).WithField("pod", pod).Info("creating Pod for GameServer")

‎pkg/gameservers/controller_test.go‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -776,6 +776,7 @@ func TestControllerCreateGameServerPod(t *testing.T){
776776

777777
assert.Equal(t, fixture.ObjectMeta.Name, pod.ObjectMeta.Name)
778778
assert.Equal(t, fixture.ObjectMeta.Namespace, pod.ObjectMeta.Namespace)
779+
assert.Equal(t, "sdk-service-account", pod.Spec.ServiceAccountName)
779780
assert.Equal(t, "gameserver", pod.ObjectMeta.Labels[stable.GroupName+"/role"])
780781
assert.Equal(t, fixture.ObjectMeta.Name, pod.ObjectMeta.Labels[v1alpha1.GameServerPodLabel])
781782
assert.True(t, metav1.IsControlledBy(pod, fixture))
@@ -1189,7 +1190,8 @@ func newFakeController() (*Controller, agtesting.Mocks){
11891190
wh:=webhooks.NewWebHook(http.NewServeMux())
11901191
c:=NewController(wh, healthcheck.NewHandler(),
11911192
10, 20, "sidecar:dev", false,
1192-
resource.MustParse("0.05"), resource.MustParse("0.1"), m.KubeClient, m.KubeInformerFactory, m.ExtClient, m.AgonesClient, m.AgonesInformerFactory)
1193+
resource.MustParse("0.05"), resource.MustParse("0.1"), "sdk-service-account",
1194+
m.KubeClient, m.KubeInformerFactory, m.ExtClient, m.AgonesClient, m.AgonesInformerFactory)
11931195
c.recorder=m.FakeRecorder
11941196
returnc, m
11951197
}

0 commit comments

Comments
(0)