Skip to content

Commit 7122a0e

Browse files
committed
fix: graceful psp handling
Signed-off-by: Peter Wilcsinszky <[email protected]>
1 parent b27bdb9 commit 7122a0e

File tree

5 files changed

+65
-15
lines changed

5 files changed

+65
-15
lines changed

main.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ import (
3232
"k8s.io/apimachinery/pkg/fields"
3333
"k8s.io/apimachinery/pkg/labels"
3434
"k8s.io/apimachinery/pkg/runtime"
35+
"k8s.io/client-go/discovery"
3536
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
3637
_ "k8s.io/client-go/plugin/pkg/client/auth"
38+
"k8s.io/client-go/rest"
3739
"k8s.io/klog/v2"
3840
ctrl "sigs.k8s.io/controller-runtime"
3941
"sigs.k8s.io/controller-runtime/pkg/cache"
@@ -43,6 +45,7 @@ import (
4345

4446
extensionsControllers "github.com/kube-logging/logging-operator/controllers/extensions"
4547
loggingControllers "github.com/kube-logging/logging-operator/controllers/logging"
48+
"github.com/kube-logging/logging-operator/pkg/resources"
4649
extensionsv1alpha1 "github.com/kube-logging/logging-operator/pkg/sdk/extensions/api/v1alpha1"
4750
config "github.com/kube-logging/logging-operator/pkg/sdk/extensions/extensionsconfig"
4851
loggingv1alpha1 "github.com/kube-logging/logging-operator/pkg/sdk/logging/api/v1alpha1"
@@ -166,6 +169,10 @@ func main() {
166169
os.Exit(1)
167170
}
168171

172+
if !PSPEnabled(mgr.GetConfig()) {
173+
setupLog.Info("WARNING PodSecurityPolicies are disabled. Can be enabled manually with PSP_ENABLED=1")
174+
}
175+
169176
loggingReconciler := loggingControllers.NewLoggingReconciler(mgr.GetClient(), ctrl.Log.WithName("logging"))
170177

171178
if err := (&extensionsControllers.EventTailerReconciler{
@@ -216,6 +223,27 @@ func main() {
216223
}
217224
}
218225

226+
func PSPEnabled(cfg *rest.Config) bool {
227+
pspenv := os.Getenv("PSP_ENABLED")
228+
if pspenv != "" {
229+
return cast.ToBool(pspenv)
230+
}
231+
dsc, err := discovery.NewDiscoveryClientForConfig(cfg)
232+
if err != nil {
233+
setupLog.Error(err, "discovery client creation")
234+
os.Exit(1)
235+
}
236+
serverVersion, err := dsc.ServerVersion()
237+
if err != nil {
238+
setupLog.Error(err, "server version")
239+
os.Exit(1)
240+
}
241+
if cast.ToInt(serverVersion.Major) == 1 && cast.ToInt(serverVersion.Minor) < 25 {
242+
resources.PSPEnabled = true
243+
}
244+
return resources.PSPEnabled
245+
}
246+
219247
func detectContainerRuntime(ctx context.Context, c client.Reader) error {
220248
var nodeList corev1.NodeList
221249
if err := c.List(ctx, &nodeList, client.Limit(1)); err != nil {

pkg/resources/features.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Copyright © 2023 Kube logging authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package resources
16+
17+
var PSPEnabled bool

pkg/resources/fluentbit/fluentbit.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,10 @@ func (r *Reconciler) Reconcile() (*reconcile.Result, error) {
117117
return nil, err
118118
}
119119

120-
for _, factory := range []resources.Resource{
120+
objects := []resources.Resource{
121121
r.serviceAccount,
122122
r.clusterRole,
123123
r.clusterRoleBinding,
124-
r.clusterPodSecurityPolicy,
125-
r.pspClusterRole,
126-
r.pspClusterRoleBinding,
127124
r.configSecret,
128125
r.daemonSet,
129126
r.serviceMetrics,
@@ -132,7 +129,11 @@ func (r *Reconciler) Reconcile() (*reconcile.Result, error) {
132129
r.monitorBufferServiceMetrics,
133130
r.prometheusRules,
134131
r.bufferVolumePrometheusRules,
135-
} {
132+
}
133+
if resources.PSPEnabled {
134+
objects = append(objects, r.clusterPodSecurityPolicy, r.pspClusterRole, r.pspClusterRoleBinding)
135+
}
136+
for _, factory := range objects {
136137
o, state, err := factory()
137138
if err != nil {
138139
return nil, errors.WrapIf(err, "failed to create desired object")

pkg/resources/fluentd/fluentd.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,19 @@ func (r *Reconciler) Reconcile() (*reconcile.Result, error) {
102102
ctx := context.Background()
103103
patchBase := client.MergeFrom(r.Logging.DeepCopy())
104104

105-
for _, res := range []resources.Resource{
105+
objects := []resources.Resource{
106106
r.serviceAccount,
107107
r.role,
108108
r.roleBinding,
109109
r.clusterRole,
110110
r.clusterRoleBinding,
111-
r.clusterPodSecurityPolicy,
112-
r.pspRole,
113-
r.pspRoleBinding,
114-
} {
111+
}
112+
113+
if resources.PSPEnabled {
114+
objects = append(objects, r.clusterPodSecurityPolicy, r.pspRole, r.pspRoleBinding)
115+
}
116+
117+
for _, res := range objects {
115118
o, state, err := res()
116119
if err != nil {
117120
return nil, errors.WrapIf(err, "failed to create desired object")

pkg/resources/nodeagent/nodeagent.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -343,18 +343,19 @@ func (r *Reconciler) processAgent(name string, userDefinedAgent v1beta1.NodeAgen
343343

344344
// Reconcile reconciles the nodeAgentInstance resource
345345
func (n *nodeAgentInstance) Reconcile() (*reconcile.Result, error) {
346-
for _, factory := range []resources.Resource{
346+
objects := []resources.Resource{
347347
n.serviceAccount,
348348
n.clusterRole,
349349
n.clusterRoleBinding,
350-
n.clusterPodSecurityPolicy,
351-
n.pspClusterRole,
352-
n.pspClusterRoleBinding,
353350
n.configSecret,
354351
n.daemonSet,
355352
n.serviceMetrics,
356353
n.monitorServiceMetrics,
357-
} {
354+
}
355+
if resources.PSPEnabled {
356+
objects = append(objects, n.clusterPodSecurityPolicy, n.pspClusterRole, n.pspClusterRoleBinding)
357+
}
358+
for _, factory := range objects {
358359
o, state, err := factory()
359360
if err != nil {
360361
return nil, errors.WrapIf(err, "failed to create desired object")

0 commit comments

Comments
 (0)