@@ -65,6 +65,20 @@ func versionHasAdvertisedEndpoint(v driver.Version) bool {
65
65
return v .CompareTo ("3.4.0" ) >= 0
66
66
}
67
67
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
+
68
82
// createArangodArgs creates command line arguments for an arangod server in the given group.
69
83
func createArangodArgs (apiObject metav1.Object , deplSpec api.DeploymentSpec , group api.ServerGroup ,
70
84
agents api.MemberStatusList , id string , version driver.Version , autoUpgrade bool ) []string {
@@ -85,8 +99,17 @@ func createArangodArgs(apiObject metav1.Object, deplSpec api.DeploymentSpec, gro
85
99
// With authentication
86
100
options = append (options ,
87
101
optionPair {"--server.authentication" , "true" },
88
- optionPair {"--server.jwt-secret" , "$(" + constants .EnvArangodJWTSecret + ")" },
89
102
)
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
+ }
90
113
} else {
91
114
// Without authentication
92
115
options = append (options ,
@@ -499,17 +522,18 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string,
499
522
// Create pod
500
523
if group .IsArangod () {
501
524
// Prepare arguments
525
+ version := imageInfo .ArangoDBVersion
502
526
autoUpgrade := m .Conditions .IsTrue (api .ConditionTypeAutoUpgrade )
503
527
if autoUpgrade {
504
528
newPhase = api .MemberPhaseUpgrading
505
529
}
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 )
507
531
env := make (map [string ]k8sutil.EnvValue )
508
532
livenessProbe , err := r .createLivenessProbe (spec , group )
509
533
if err != nil {
510
534
return maskAny (err )
511
535
}
512
- readinessProbe , err := r .createReadinessProbe (spec , group , imageInfo . ArangoDBVersion )
536
+ readinessProbe , err := r .createReadinessProbe (spec , group , version )
513
537
if err != nil {
514
538
return maskAny (err )
515
539
}
@@ -535,11 +559,21 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string,
535
559
return maskAny (errors .Wrapf (err , "RocksDB encryption key secret validation failed" ))
536
560
}
537
561
}
562
+ // Check cluster JWT secret
563
+ var clusterJWTSecretName string
538
564
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
+ }
542
575
}
576
+
543
577
}
544
578
545
579
if spec .License .HasSecretName () {
@@ -554,7 +588,7 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string,
554
588
finalizers := r .createPodFinalizers (group )
555
589
if err := k8sutil .CreateArangodPod (kubecli , spec .IsDevelopment (), apiObject , role , m .ID , m .PodName , m .PersistentVolumeClaimName , imageInfo .ImageID , lifecycleImage , alpineImage , spec .GetImagePullPolicy (),
556
590
engine , requireUUID , terminationGracePeriod , args , env , finalizers , livenessProbe , readinessProbe , tolerations , serviceAccountName , tlsKeyfileSecretName , rocksdbEncryptionSecretName ,
557
- groupSpec .GetNodeSelector ()); err != nil {
591
+ clusterJWTSecretName , groupSpec .GetNodeSelector ()); err != nil {
558
592
return maskAny (err )
559
593
}
560
594
log .Debug ().Str ("pod-name" , m .PodName ).Msg ("Created pod" )
0 commit comments