@@ -13,7 +13,6 @@ import (
13
13
14
14
"github.com/ghodss/yaml"
15
15
16
- "github.com/openshift/api/annotations"
17
16
kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1"
18
17
operatorv1 "github.com/openshift/api/operator/v1"
19
18
"github.com/openshift/cluster-kube-apiserver-operator/bindata"
@@ -24,6 +23,7 @@ import (
24
23
"github.com/openshift/library-go/pkg/operator/certrotation"
25
24
"github.com/openshift/library-go/pkg/operator/events"
26
25
"github.com/openshift/library-go/pkg/operator/resource/resourceapply"
26
+ "github.com/openshift/library-go/pkg/operator/resource/resourcehelper"
27
27
"github.com/openshift/library-go/pkg/operator/resource/resourcemerge"
28
28
"github.com/openshift/library-go/pkg/operator/resource/resourceread"
29
29
"github.com/openshift/library-go/pkg/operator/resourcesynccontroller"
@@ -38,6 +38,7 @@ import (
38
38
"k8s.io/client-go/kubernetes"
39
39
coreclientv1 "k8s.io/client-go/kubernetes/typed/core/v1"
40
40
corev1listers "k8s.io/client-go/listers/core/v1"
41
+ "k8s.io/klog/v2"
41
42
)
42
43
43
44
const (
@@ -347,12 +348,26 @@ func generateOptionalStartupMonitorPod(isStartupMonitorEnabledFn func() (bool, e
347
348
}
348
349
349
350
func ManageClientCABundle (ctx context.Context , lister corev1listers.ConfigMapLister , client coreclientv1.ConfigMapsGetter , recorder events.Recorder ) (* corev1.ConfigMap , bool , error ) {
350
- requiredConfigMap , err := resourcesynccontroller .CombineCABundleConfigMaps (
351
- resourcesynccontroller.ResourceLocation {Namespace : operatorclient .TargetNamespace , Name : "client-ca" },
351
+
352
+ additionalAnnotations := certrotation.AdditionalAnnotations {
353
+ JiraComponent : "kube-apiserver" ,
354
+ }
355
+
356
+ caBundleConfigMap , err := lister .ConfigMaps (operatorclient .TargetNamespace ).Get ("client-ca" )
357
+ if err != nil && ! apierrors .IsNotFound (err ) {
358
+ return nil , false , err
359
+ }
360
+
361
+ creationRequired := false
362
+ updateRequired := false
363
+ if apierrors .IsNotFound (err ) {
364
+ creationRequired = true
365
+ }
366
+
367
+ requiredConfigMap , updateRequired , err := resourcesynccontroller .CombineCABundleConfigMaps (
368
+ caBundleConfigMap ,
352
369
lister ,
353
- certrotation.AdditionalAnnotations {
354
- JiraComponent : "kube-apiserver" ,
355
- },
370
+ additionalAnnotations ,
356
371
// this is from the installer and contains the value to verify the admin.kubeconfig user
357
372
resourcesynccontroller.ResourceLocation {Namespace : operatorclient .GlobalUserSpecifiedConfigNamespace , Name : "admin-kubeconfig-client-ca" },
358
373
// this is from the installer and contains the value to verify the node bootstrapping cert that is baked into images
@@ -372,21 +387,49 @@ func ManageClientCABundle(ctx context.Context, lister corev1listers.ConfigMapLis
372
387
if err != nil {
373
388
return nil , false , err
374
389
}
375
- if requiredConfigMap .Annotations == nil {
376
- requiredConfigMap .Annotations = map [string ]string {}
390
+
391
+ if creationRequired {
392
+ caBundleConfigMap , err := client .ConfigMaps (operatorclient .TargetNamespace ).Create (ctx , requiredConfigMap , metav1.CreateOptions {})
393
+ resourcehelper .ReportCreateEvent (recorder , caBundleConfigMap , err )
394
+ if err != nil {
395
+ return nil , false , err
396
+ }
397
+ klog .V (2 ).Infof ("Created client CA bundle configmap %s/%s" , caBundleConfigMap .Namespace , caBundleConfigMap .Name )
398
+ return caBundleConfigMap , true , nil
399
+ } else if updateRequired {
400
+ caBundleConfigMap , err := client .ConfigMaps (operatorclient .TargetNamespace ).Update (ctx , requiredConfigMap , metav1.UpdateOptions {})
401
+ resourcehelper .ReportUpdateEvent (recorder , caBundleConfigMap , err )
402
+ if err != nil {
403
+ return nil , false , err
404
+ }
405
+ klog .V (2 ).Infof ("Updated client CA bundle configmap %s/%s" , caBundleConfigMap .Namespace , caBundleConfigMap .Name )
406
+ return caBundleConfigMap , true , nil
377
407
}
378
- requiredConfigMap .Annotations [annotations .OpenShiftComponent ] = "kube-apiserver"
379
408
380
- return resourceapply . ApplyConfigMap ( ctx , client , recorder , requiredConfigMap )
409
+ return caBundleConfigMap , false , nil
381
410
}
382
411
383
412
func manageKubeAPIServerCABundle (ctx context.Context , lister corev1listers.ConfigMapLister , client coreclientv1.ConfigMapsGetter , recorder events.Recorder ) (* corev1.ConfigMap , bool , error ) {
384
- requiredConfigMap , err := resourcesynccontroller .CombineCABundleConfigMaps (
385
- resourcesynccontroller.ResourceLocation {Namespace : operatorclient .TargetNamespace , Name : "kube-apiserver-server-ca" },
413
+
414
+ additionalAnnotations := certrotation.AdditionalAnnotations {
415
+ JiraComponent : "kube-apiserver" ,
416
+ }
417
+
418
+ caBundleConfigMap , err := lister .ConfigMaps (operatorclient .TargetNamespace ).Get ("client-ca" )
419
+ if err != nil && ! apierrors .IsNotFound (err ) {
420
+ return nil , false , err
421
+ }
422
+
423
+ creationRequired := false
424
+ updateRequired := false
425
+ if apierrors .IsNotFound (err ) {
426
+ creationRequired = true
427
+ }
428
+
429
+ requiredConfigMap , updateRequired , err := resourcesynccontroller .CombineCABundleConfigMaps (
430
+ caBundleConfigMap ,
386
431
lister ,
387
- certrotation.AdditionalAnnotations {
388
- JiraComponent : "kube-apiserver" ,
389
- },
432
+ additionalAnnotations ,
390
433
// this bundle is what this operator uses to mint loadbalancers certs
391
434
resourcesynccontroller.ResourceLocation {Namespace : operatorclient .OperatorNamespace , Name : "loadbalancer-serving-ca" },
392
435
// this bundle is what this operator uses to mint localhost certs
@@ -399,12 +442,26 @@ func manageKubeAPIServerCABundle(ctx context.Context, lister corev1listers.Confi
399
442
if err != nil {
400
443
return nil , false , err
401
444
}
402
- if requiredConfigMap .Annotations == nil {
403
- requiredConfigMap .Annotations = map [string ]string {}
445
+
446
+ if creationRequired {
447
+ caBundleConfigMap , err := client .ConfigMaps (operatorclient .TargetNamespace ).Create (ctx , requiredConfigMap , metav1.CreateOptions {})
448
+ resourcehelper .ReportCreateEvent (recorder , caBundleConfigMap , err )
449
+ if err != nil {
450
+ return nil , false , err
451
+ }
452
+ klog .V (2 ).Infof ("Created kube apiserver CA bundle configmap %s/%s" , caBundleConfigMap .Namespace , caBundleConfigMap .Name )
453
+ return caBundleConfigMap , true , nil
454
+ } else if updateRequired {
455
+ caBundleConfigMap , err := client .ConfigMaps (operatorclient .TargetNamespace ).Update (ctx , requiredConfigMap , metav1.UpdateOptions {})
456
+ resourcehelper .ReportUpdateEvent (recorder , caBundleConfigMap , err )
457
+ if err != nil {
458
+ return nil , false , err
459
+ }
460
+ klog .V (2 ).Infof ("Updated kube apiserver CA bundle configmap %s/%s" , caBundleConfigMap .Namespace , caBundleConfigMap .Name )
461
+ return caBundleConfigMap , true , nil
404
462
}
405
- requiredConfigMap .Annotations [annotations .OpenShiftComponent ] = "kube-apiserver"
406
463
407
- return resourceapply . ApplyConfigMap ( ctx , client , recorder , requiredConfigMap )
464
+ return caBundleConfigMap , false , nil
408
465
}
409
466
410
467
func ensureKubeAPIServerTrustedCA (ctx context.Context , client coreclientv1.CoreV1Interface , recorder events.Recorder ) error {
0 commit comments