@@ -65,6 +65,20 @@ func versionHasAdvertisedEndpoint(v driver.Version) bool {
6565 return v .CompareTo ("3.4.0" ) >= 0
6666}
6767
68+ // versionHasJWTSecretKeyfile derives from the version number of arangod has
69+ // the option --auth.jwt-secret-keyfile which can take the JWT secret from
70+ // a file in the file system.
71+ func versionHasJWTSecretKeyfile (v driver.Version ) bool {
72+ if v .CompareTo ("3.3.22" ) >= 0 && v .CompareTo ("3.4.0" ) < 0 {
73+ return true
74+ }
75+ if v .CompareTo ("3.4.2" ) >= 0 {
76+ return true
77+ }
78+
79+ return false
80+ }
81+
6882// createArangodArgs creates command line arguments for an arangod server in the given group.
6983func createArangodArgs (apiObject metav1.Object , deplSpec api.DeploymentSpec , group api.ServerGroup ,
7084 agents api.MemberStatusList , id string , version driver.Version , autoUpgrade bool ) []string {
@@ -85,8 +99,17 @@ func createArangodArgs(apiObject metav1.Object, deplSpec api.DeploymentSpec, gro
8599 // With authentication
86100 options = append (options ,
87101 optionPair {"--server.authentication" , "true" },
88- optionPair {"--server.jwt-secret" , "$(" + constants .EnvArangodJWTSecret + ")" },
89102 )
103+ if versionHasJWTSecretKeyfile (version ) {
104+ keyPath := filepath .Join (k8sutil .ClusterJWTSecretVolumeMountDir , constants .SecretKeyToken )
105+ options = append (options ,
106+ optionPair {"--server.jwt-secret-keyfile" , keyPath },
107+ )
108+ } else {
109+ options = append (options ,
110+ optionPair {"--server.jwt-secret" , "$(" + constants .EnvArangodJWTSecret + ")" },
111+ )
112+ }
90113 } else {
91114 // Without authentication
92115 options = append (options ,
@@ -499,17 +522,18 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string,
499522 // Create pod
500523 if group .IsArangod () {
501524 // Prepare arguments
525+ version := imageInfo .ArangoDBVersion
502526 autoUpgrade := m .Conditions .IsTrue (api .ConditionTypeAutoUpgrade )
503527 if autoUpgrade {
504528 newPhase = api .MemberPhaseUpgrading
505529 }
506- args := createArangodArgs (apiObject , spec , group , status .Members .Agents , m .ID , imageInfo . ArangoDBVersion , autoUpgrade )
530+ args := createArangodArgs (apiObject , spec , group , status .Members .Agents , m .ID , version , autoUpgrade )
507531 env := make (map [string ]k8sutil.EnvValue )
508532 livenessProbe , err := r .createLivenessProbe (spec , group )
509533 if err != nil {
510534 return maskAny (err )
511535 }
512- readinessProbe , err := r .createReadinessProbe (spec , group , imageInfo . ArangoDBVersion )
536+ readinessProbe , err := r .createReadinessProbe (spec , group , version )
513537 if err != nil {
514538 return maskAny (err )
515539 }
@@ -535,11 +559,21 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string,
535559 return maskAny (errors .Wrapf (err , "RocksDB encryption key secret validation failed" ))
536560 }
537561 }
562+ // Check cluster JWT secret
563+ var clusterJWTSecretName string
538564 if spec .IsAuthenticated () {
539- env [constants .EnvArangodJWTSecret ] = k8sutil.EnvValue {
540- SecretName : spec .Authentication .GetJWTSecretName (),
541- SecretKey : constants .SecretKeyToken ,
565+ if versionHasJWTSecretKeyfile (version ) {
566+ clusterJWTSecretName = spec .Authentication .GetJWTSecretName ()
567+ if err := k8sutil .ValidateTokenSecret (secrets , clusterJWTSecretName ); err != nil {
568+ return maskAny (errors .Wrapf (err , "Cluster JWT secret validation failed" ))
569+ }
570+ } else {
571+ env [constants .EnvArangodJWTSecret ] = k8sutil.EnvValue {
572+ SecretName : spec .Authentication .GetJWTSecretName (),
573+ SecretKey : constants .SecretKeyToken ,
574+ }
542575 }
576+
543577 }
544578
545579 if spec .License .HasSecretName () {
@@ -554,7 +588,7 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string,
554588 finalizers := r .createPodFinalizers (group )
555589 if err := k8sutil .CreateArangodPod (kubecli , spec .IsDevelopment (), apiObject , role , m .ID , m .PodName , m .PersistentVolumeClaimName , imageInfo .ImageID , lifecycleImage , alpineImage , spec .GetImagePullPolicy (),
556590 engine , requireUUID , terminationGracePeriod , args , env , finalizers , livenessProbe , readinessProbe , tolerations , serviceAccountName , tlsKeyfileSecretName , rocksdbEncryptionSecretName ,
557- groupSpec .GetNodeSelector ()); err != nil {
591+ clusterJWTSecretName , groupSpec .GetNodeSelector ()); err != nil {
558592 return maskAny (err )
559593 }
560594 log .Debug ().Str ("pod-name" , m .PodName ).Msg ("Created pod" )
0 commit comments