@@ -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"
@@ -23,6 +22,7 @@ import (
23
22
"github.com/openshift/library-go/pkg/operator/certrotation"
24
23
"github.com/openshift/library-go/pkg/operator/events"
25
24
"github.com/openshift/library-go/pkg/operator/resource/resourceapply"
25
+ "github.com/openshift/library-go/pkg/operator/resource/resourcehelper"
26
26
"github.com/openshift/library-go/pkg/operator/resource/resourcemerge"
27
27
"github.com/openshift/library-go/pkg/operator/resource/resourceread"
28
28
"github.com/openshift/library-go/pkg/operator/resourcesynccontroller"
@@ -37,6 +37,7 @@ import (
37
37
"k8s.io/client-go/kubernetes"
38
38
coreclientv1 "k8s.io/client-go/kubernetes/typed/core/v1"
39
39
corev1listers "k8s.io/client-go/listers/core/v1"
40
+ "k8s.io/klog/v2"
40
41
)
41
42
42
43
type TargetConfigController struct {
@@ -296,12 +297,26 @@ func generateOptionalStartupMonitorPod(isStartupMonitorEnabledFn func() (bool, e
296
297
}
297
298
298
299
func ManageClientCABundle (ctx context.Context , lister corev1listers.ConfigMapLister , client coreclientv1.ConfigMapsGetter , recorder events.Recorder ) (* corev1.ConfigMap , bool , error ) {
299
- requiredConfigMap , err := resourcesynccontroller .CombineCABundleConfigMaps (
300
- resourcesynccontroller.ResourceLocation {Namespace : operatorclient .TargetNamespace , Name : "client-ca" },
300
+
301
+ additionalAnnotations := certrotation.AdditionalAnnotations {
302
+ JiraComponent : "kube-apiserver" ,
303
+ }
304
+
305
+ caBundleConfigMap , err := lister .ConfigMaps (operatorclient .TargetNamespace ).Get ("client-ca" )
306
+ if err != nil && ! apierrors .IsNotFound (err ) {
307
+ return nil , false , err
308
+ }
309
+
310
+ creationRequired := false
311
+ updateRequired := false
312
+ if apierrors .IsNotFound (err ) {
313
+ creationRequired = true
314
+ }
315
+
316
+ requiredConfigMap , updateRequired , err := resourcesynccontroller .CombineCABundleConfigMaps (
317
+ caBundleConfigMap ,
301
318
lister ,
302
- certrotation.AdditionalAnnotations {
303
- JiraComponent : "kube-apiserver" ,
304
- },
319
+ additionalAnnotations ,
305
320
// this is from the installer and contains the value to verify the admin.kubeconfig user
306
321
resourcesynccontroller.ResourceLocation {Namespace : operatorclient .GlobalUserSpecifiedConfigNamespace , Name : "admin-kubeconfig-client-ca" },
307
322
// this is from the installer and contains the value to verify the node bootstrapping cert that is baked into images
@@ -321,21 +336,49 @@ func ManageClientCABundle(ctx context.Context, lister corev1listers.ConfigMapLis
321
336
if err != nil {
322
337
return nil , false , err
323
338
}
324
- if requiredConfigMap .Annotations == nil {
325
- requiredConfigMap .Annotations = map [string ]string {}
339
+
340
+ if creationRequired {
341
+ caBundleConfigMap , err := client .ConfigMaps (operatorclient .TargetNamespace ).Create (ctx , requiredConfigMap , metav1.CreateOptions {})
342
+ resourcehelper .ReportCreateEvent (recorder , caBundleConfigMap , err )
343
+ if err != nil {
344
+ return nil , false , err
345
+ }
346
+ klog .V (2 ).Infof ("Created client CA bundle configmap %s/%s" , caBundleConfigMap .Namespace , caBundleConfigMap .Name )
347
+ return caBundleConfigMap , true , nil
348
+ } else if updateRequired {
349
+ caBundleConfigMap , err := client .ConfigMaps (operatorclient .TargetNamespace ).Update (ctx , requiredConfigMap , metav1.UpdateOptions {})
350
+ resourcehelper .ReportUpdateEvent (recorder , caBundleConfigMap , err )
351
+ if err != nil {
352
+ return nil , false , err
353
+ }
354
+ klog .V (2 ).Infof ("Updated client CA bundle configmap %s/%s" , caBundleConfigMap .Namespace , caBundleConfigMap .Name )
355
+ return caBundleConfigMap , true , nil
326
356
}
327
- requiredConfigMap .Annotations [annotations .OpenShiftComponent ] = "kube-apiserver"
328
357
329
- return resourceapply . ApplyConfigMap ( ctx , client , recorder , requiredConfigMap )
358
+ return caBundleConfigMap , false , nil
330
359
}
331
360
332
361
func manageKubeAPIServerCABundle (ctx context.Context , lister corev1listers.ConfigMapLister , client coreclientv1.ConfigMapsGetter , recorder events.Recorder ) (* corev1.ConfigMap , bool , error ) {
333
- requiredConfigMap , err := resourcesynccontroller .CombineCABundleConfigMaps (
334
- resourcesynccontroller.ResourceLocation {Namespace : operatorclient .TargetNamespace , Name : "kube-apiserver-server-ca" },
362
+
363
+ additionalAnnotations := certrotation.AdditionalAnnotations {
364
+ JiraComponent : "kube-apiserver" ,
365
+ }
366
+
367
+ caBundleConfigMap , err := lister .ConfigMaps (operatorclient .TargetNamespace ).Get ("client-ca" )
368
+ if err != nil && ! apierrors .IsNotFound (err ) {
369
+ return nil , false , err
370
+ }
371
+
372
+ creationRequired := false
373
+ updateRequired := false
374
+ if apierrors .IsNotFound (err ) {
375
+ creationRequired = true
376
+ }
377
+
378
+ requiredConfigMap , updateRequired , err := resourcesynccontroller .CombineCABundleConfigMaps (
379
+ caBundleConfigMap ,
335
380
lister ,
336
- certrotation.AdditionalAnnotations {
337
- JiraComponent : "kube-apiserver" ,
338
- },
381
+ additionalAnnotations ,
339
382
// this bundle is what this operator uses to mint loadbalancers certs
340
383
resourcesynccontroller.ResourceLocation {Namespace : operatorclient .OperatorNamespace , Name : "loadbalancer-serving-ca" },
341
384
// this bundle is what this operator uses to mint localhost certs
@@ -348,12 +391,26 @@ func manageKubeAPIServerCABundle(ctx context.Context, lister corev1listers.Confi
348
391
if err != nil {
349
392
return nil , false , err
350
393
}
351
- if requiredConfigMap .Annotations == nil {
352
- requiredConfigMap .Annotations = map [string ]string {}
394
+
395
+ if creationRequired {
396
+ caBundleConfigMap , err := client .ConfigMaps (operatorclient .TargetNamespace ).Create (ctx , requiredConfigMap , metav1.CreateOptions {})
397
+ resourcehelper .ReportCreateEvent (recorder , caBundleConfigMap , err )
398
+ if err != nil {
399
+ return nil , false , err
400
+ }
401
+ klog .V (2 ).Infof ("Created kube apiserver CA bundle configmap %s/%s" , caBundleConfigMap .Namespace , caBundleConfigMap .Name )
402
+ return caBundleConfigMap , true , nil
403
+ } else if updateRequired {
404
+ caBundleConfigMap , err := client .ConfigMaps (operatorclient .TargetNamespace ).Update (ctx , requiredConfigMap , metav1.UpdateOptions {})
405
+ resourcehelper .ReportUpdateEvent (recorder , caBundleConfigMap , err )
406
+ if err != nil {
407
+ return nil , false , err
408
+ }
409
+ klog .V (2 ).Infof ("Updated kube apiserver CA bundle configmap %s/%s" , caBundleConfigMap .Namespace , caBundleConfigMap .Name )
410
+ return caBundleConfigMap , true , nil
353
411
}
354
- requiredConfigMap .Annotations [annotations .OpenShiftComponent ] = "kube-apiserver"
355
412
356
- return resourceapply . ApplyConfigMap ( ctx , client , recorder , requiredConfigMap )
413
+ return caBundleConfigMap , false , nil
357
414
}
358
415
359
416
func ensureKubeAPIServerTrustedCA (ctx context.Context , client coreclientv1.CoreV1Interface , recorder events.Recorder ) error {
0 commit comments