Skip to content

Commit 6272754

Browse files
committed
targetconfigcontroller: make sure extension-apiserver-authentication has necessary annotations
configmap kube-system/extension-apiserver-authentication is created by kube-apiserver, but it doesn't have ownership metadata. This commit updates target config controller to set necessary metadata (ownership and description)
1 parent 0bec046 commit 6272754

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# NOTE: This asset defines the required annotations for the live
2+
# kube-system/extension-apiserver-authentication ConfigMap. It is not
3+
# applied directly; the operator reads these annotations and reconciles
4+
# them on the existing ConfigMap created by kube-apiserver.
5+
apiVersion: v1
6+
kind: ConfigMap
7+
metadata:
8+
name: extension-apiserver-authentication
9+
namespace: kube-system
10+
annotations:
11+
"openshift.io/owning-component": "kube-apiserver"
12+
"openshift.io/description": "CA holding the root certificate bundle used to verify client certificates on incoming requests"

pkg/operator/targetconfigcontroller/targetconfigcontroller.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"context"
66
"encoding/json"
77
"fmt"
8+
"reflect"
89
"sort"
910
"strconv"
1011
"strings"
@@ -237,6 +238,11 @@ func createTargetConfig(ctx context.Context, c TargetConfigController, recorder
237238
errors = append(errors, fmt.Errorf("%q: %v", "configmap/trusted-ca-bundle", err))
238239
}
239240

241+
err = ensureKubeAPIServerExtensionAuthenticationCA(ctx, c.kubeClient.CoreV1(), recorder)
242+
if err != nil {
243+
errors = append(errors, fmt.Errorf("%q: %v", "configmap/extension-apiserver-authentication", err))
244+
}
245+
240246
err = ensureLocalhostRecoverySAToken(ctx, c.kubeClient.CoreV1(), recorder)
241247
if err != nil {
242248
errors = append(errors, fmt.Errorf("%q: %v", "serviceaccount/localhost-recovery-client", err))
@@ -507,6 +513,30 @@ func ensureKubeAPIServerTrustedCA(ctx context.Context, client coreclientv1.CoreV
507513
return err
508514
}
509515

516+
func ensureKubeAPIServerExtensionAuthenticationCA(ctx context.Context, client coreclientv1.CoreV1Interface, recorder events.Recorder) error {
517+
required := resourceread.ReadConfigMapV1OrDie(bindata.MustAsset("assets/kube-apiserver/extension-apiserver-authentication-cm.yaml"))
518+
cmCLient := client.ConfigMaps("kube-system")
519+
520+
cm, err := cmCLient.Get(ctx, "extension-apiserver-authentication", metav1.GetOptions{})
521+
if err != nil {
522+
// kube-apiserver creates this CM; don't degrade while waiting.
523+
if apierrors.IsNotFound(err) {
524+
return nil
525+
}
526+
return err
527+
}
528+
529+
// update if annotations modified by the user
530+
if !reflect.DeepEqual(cm.Annotations, required.Annotations) {
531+
cm.Annotations = required.Annotations
532+
updatedCM, err := cmCLient.Update(ctx, cm, metav1.UpdateOptions{})
533+
resourcehelper.ReportUpdateEvent(recorder, updatedCM, err)
534+
return err
535+
}
536+
537+
return err
538+
}
539+
510540
func ensureLocalhostRecoverySAToken(ctx context.Context, client coreclientv1.CoreV1Interface, recorder events.Recorder) error {
511541
requiredSA := resourceread.ReadServiceAccountV1OrDie(bindata.MustAsset("assets/kube-apiserver/localhost-recovery-sa.yaml"))
512542
requiredToken := resourceread.ReadSecretV1OrDie(bindata.MustAsset("assets/kube-apiserver/localhost-recovery-token.yaml"))

0 commit comments

Comments
 (0)