@@ -10,6 +10,7 @@ import (
1010 apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
1111 apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
1212
13+ configclientset "github.com/openshift/client-go/config/clientset/versioned"
1314 configv1client "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1"
1415 "github.com/sirupsen/logrus"
1516 k8sscheme "k8s.io/client-go/kubernetes/scheme"
@@ -19,6 +20,8 @@ import (
1920 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/client"
2021 "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/catalog"
2122 "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/catalogtemplate"
23+ "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/apiserver"
24+ "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/openshiftconfig"
2225 "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient"
2326 "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorstatus"
2427 "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/server"
@@ -63,10 +66,53 @@ func (o *options) run(ctx context.Context, logger *logrus.Logger) error {
6366 return fmt .Errorf ("error configuring client: %s" , err .Error ())
6467 }
6568
69+ configClient , err := configv1client .NewForConfig (config )
70+ if err != nil {
71+ return fmt .Errorf ("error configuring client: %s" , err .Error ())
72+ }
73+ opClient := operatorclient .NewClientFromConfig (o .kubeconfig , logger )
74+ crClient , err := client .NewClient (o .kubeconfig )
75+ if err != nil {
76+ return fmt .Errorf ("error configuring client: %s" , err .Error ())
77+ }
78+
79+ // Setup APIServer TLS configuration for HTTPS servers
80+ discovery := opClient .KubernetesInterface ().Discovery ()
81+ openshiftConfigAPIExists , err := openshiftconfig .IsAPIAvailable (discovery )
82+ if err != nil {
83+ return fmt .Errorf ("error checking for OpenShift config API support: %w" , err )
84+ }
85+
86+ apiServerTLSQuerier := apiserver .NoopQuerier ()
87+ var apiServerFactory interface { Start (<- chan struct {}) }
88+ if openshiftConfigAPIExists {
89+ logger .Info ("OpenShift APIServer API available - setting up watch for APIServer TLS configuration" )
90+
91+ versionedConfigClient , err := configclientset .NewForConfig (config )
92+ if err != nil {
93+ return fmt .Errorf ("error configuring openshift config client: %w" , err )
94+ }
95+
96+ apiServerInformer , apiServerSyncer , querier , factory , err := apiserver .NewSyncer (logger , versionedConfigClient )
97+ if err != nil {
98+ return fmt .Errorf ("error initializing APIServer TLS syncer: %w" , err )
99+ }
100+
101+ logger .Info ("APIServer TLS configuration will be applied to HTTPS servers" )
102+ apiServerTLSQuerier = querier
103+
104+ // Register event handlers for APIServer resource changes
105+ apiserver .RegisterEventHandlers (apiServerInformer , apiServerSyncer )
106+
107+ apiServerFactory = factory
108+ }
109+
110+ // Setup metrics/health server with TLS configuration
66111 listenAndServe , err := server .GetListenAndServeFunc (
67112 server .WithLogger (logger ),
68113 server .WithTLS (& o .tlsCertPath , & o .tlsKeyPath , & o .clientCAPath ),
69114 server .WithKubeConfig (config ),
115+ server .WithAPIServerTLSQuerier (apiServerTLSQuerier ),
70116 server .WithDebug (o .debug ),
71117 )
72118 if err != nil {
@@ -79,16 +125,6 @@ func (o *options) run(ctx context.Context, logger *logrus.Logger) error {
79125 }
80126 }()
81127
82- configClient , err := configv1client .NewForConfig (config )
83- if err != nil {
84- return fmt .Errorf ("error configuring client: %s" , err .Error ())
85- }
86- opClient := operatorclient .NewClientFromConfig (o .kubeconfig , logger )
87- crClient , err := client .NewClient (o .kubeconfig )
88- if err != nil {
89- return fmt .Errorf ("error configuring client: %s" , err .Error ())
90- }
91-
92128 workloadUserID := int64 (- 1 )
93129 if o .setWorkloadUserID {
94130 workloadUserID = defaultWorkLoadUserID
@@ -139,6 +175,11 @@ func (o *options) run(ctx context.Context, logger *logrus.Logger) error {
139175 opCatalogTemplate .Run (ctx )
140176 <- opCatalogTemplate .Ready ()
141177
178+ // Start APIServer TLS informer factory if on OpenShift
179+ if apiServerFactory != nil {
180+ apiServerFactory .Start (ctx .Done ())
181+ }
182+
142183 if o .writeStatusName != "" {
143184 operatorstatus .MonitorClusterStatus (o .writeStatusName , op .AtLevel (), op .Done (), opClient , configClient , crClient , logger )
144185 }
0 commit comments