Skip to content

Commit 3f8f86f

Browse files
committed
recheck cert-manager RBAC on each reconciliation to handle late-added permissions
Signed-off-by: Praful Khanduri <holiodin@gmail.com>
1 parent ce8e658 commit 3f8f86f

22 files changed

Lines changed: 243 additions & 26 deletions

apis/v1beta1/opentelemetrycollector_types.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,11 @@ type TargetAllocatorMTLS struct {
247247
// Enabled indicates whether to enable mTLS between the target allocator and the collector.
248248
// +optional
249249
Enabled bool `json:"enabled,omitempty"`
250+
// UseCertManager defines whether cert-manager should be used to provision certificates for mTLS.
251+
// Defaults to true.
252+
// +optional
253+
// +kubebuilder:default:=true
254+
UseCertManager *bool `json:"useCertManager,omitempty"`
250255
}
251256

252257
// Probe defines the OpenTelemetry's pod probe config.

apis/v1beta1/zz_generated.deepcopy.go

Lines changed: 6 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bundle/community/manifests/opentelemetry-operator.clusterserviceversion.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,20 @@ spec:
521521
- patch
522522
- update
523523
- watch
524+
- apiGroups:
525+
- cert-manager.io
526+
resources:
527+
- issuers
528+
- certificaterequests
529+
- certificates
530+
verbs:
531+
- create
532+
- get
533+
- list
534+
- watch
535+
- update
536+
- patch
537+
- delete
524538
- apiGroups:
525539
- authentication.k8s.io
526540
resources:

bundle/community/manifests/opentelemetry.io_opentelemetrycollectors.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8190,6 +8190,9 @@ spec:
81908190
properties:
81918191
enabled:
81928192
type: boolean
8193+
useCertManager:
8194+
default: true
8195+
type: boolean
81938196
type: object
81948197
nodeSelector:
81958198
additionalProperties:

bundle/openshift/manifests/opentelemetry-operator.clusterserviceversion.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,20 @@ spec:
521521
- patch
522522
- update
523523
- watch
524+
- apiGroups:
525+
- cert-manager.io
526+
resources:
527+
- issuers
528+
- certificaterequests
529+
- certificates
530+
verbs:
531+
- create
532+
- get
533+
- list
534+
- watch
535+
- update
536+
- patch
537+
- delete
524538
- apiGroups:
525539
- authentication.k8s.io
526540
resources:

bundle/openshift/manifests/opentelemetry.io_opentelemetrycollectors.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8189,6 +8189,9 @@ spec:
81898189
properties:
81908190
enabled:
81918191
type: boolean
8192+
useCertManager:
8193+
default: true
8194+
type: boolean
81928195
type: object
81938196
nodeSelector:
81948197
additionalProperties:

config/crd/bases/opentelemetry.io_opentelemetrycollectors.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8176,6 +8176,9 @@ spec:
81768176
properties:
81778177
enabled:
81788178
type: boolean
8179+
useCertManager:
8180+
default: true
8181+
type: boolean
81798182
type: object
81808183
nodeSelector:
81818184
additionalProperties:

docs/api/opentelemetrycollectors.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34336,6 +34336,16 @@ Mtls defines the mTLS configuration for the target allocator. If enabled, the ta
3433634336
Enabled indicates whether to enable mTLS between the target allocator and the collector.<br/>
3433734337
</td>
3433834338
<td>false</td>
34339+
</tr><tr>
34340+
<td><b>useCertManager</b></td>
34341+
<td>boolean</td>
34342+
<td>
34343+
UseCertManager defines whether cert-manager should be used to provision certificates for mTLS.
34344+
Defaults to true.<br/>
34345+
<br/>
34346+
<i>Default</i>: true<br/>
34347+
</td>
34348+
<td>false</td>
3433934349
</tr></tbody>
3434034350
</table>
3434134351

internal/controllers/opentelemetrycollector_controller.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333

3434
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
3535
"github.com/open-telemetry/opentelemetry-operator/apis/v1beta1"
36+
internalCertmanager "github.com/open-telemetry/opentelemetry-operator/internal/autodetect/certmanager"
3637
"github.com/open-telemetry/opentelemetry-operator/internal/autodetect/gatewayapi"
3738
"github.com/open-telemetry/opentelemetry-operator/internal/autodetect/openshift"
3839
"github.com/open-telemetry/opentelemetry-operator/internal/autodetect/prometheus"
@@ -156,8 +157,18 @@ func getCollectorConfigMapsToKeep(configVersionsToKeep int, configMaps []*corev1
156157
}
157158

158159
func (r *OpenTelemetryCollectorReconciler) GetParams(ctx context.Context, instance v1beta1.OpenTelemetryCollector) (manifests.Params, error) {
160+
// Recheck cert-manager RBAC on each reconciliation to handle late-added permissions.
161+
// Only attempt to upgrade from NotAvailable → Available
162+
if r.reviewer != nil && r.config.CertManagerAvailability != internalCertmanager.Available {
163+
if warnings, err := internalCertmanager.CheckCertManagerPermissions(ctx, r.reviewer); err == nil && warnings == nil {
164+
r.log.V(2).Info("cert-manager permissions detected during reconciliation, upgrading availability")
165+
r.config.CertManagerAvailability = internalCertmanager.Available
166+
}
167+
}
168+
cfg := r.config
169+
159170
p := manifests.Params{
160-
Config: r.config,
171+
Config: cfg,
161172
Client: r.Client,
162173
OtelCol: instance,
163174
Log: r.log,

internal/controllers/targetallocator_controller.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"github.com/open-telemetry/opentelemetry-operator/internal/autodetect/prometheus"
3434
"github.com/open-telemetry/opentelemetry-operator/internal/config"
3535
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/targetallocator"
36+
"github.com/open-telemetry/opentelemetry-operator/internal/rbac"
3637
taStatus "github.com/open-telemetry/opentelemetry-operator/internal/status/targetallocator"
3738
"github.com/open-telemetry/opentelemetry-operator/pkg/constants"
3839
)
@@ -44,6 +45,7 @@ type TargetAllocatorReconciler struct {
4445
scheme *runtime.Scheme
4546
log logr.Logger
4647
config config.Config
48+
reviewer *rbac.Reviewer
4749
}
4850

4951
// TargetAllocatorReconcilerParams is the set of options to build a new TargetAllocatorReconciler.
@@ -60,8 +62,18 @@ func (r *TargetAllocatorReconciler) getParams(ctx context.Context, instance v1al
6062
if err != nil {
6163
return targetallocator.Params{}, err
6264
}
65+
66+
// Recheck cert-manager RBAC on each reconciliation to handle late-added permissions.
67+
// Only attempt to upgrade from NotAvailable → Available
68+
if r.reviewer != nil && r.config.CertManagerAvailability != certmanager.Available {
69+
if warnings, err := certmanager.CheckCertManagerPermissions(ctx, r.reviewer); err == nil && warnings == nil {
70+
r.log.V(2).Info("cert-manager permissions detected during reconciliation, upgrading availability")
71+
r.config.CertManagerAvailability = certmanager.Available
72+
}
73+
}
74+
cfg := r.config
6375
p := targetallocator.Params{
64-
Config: r.config,
76+
Config: cfg,
6577
Client: r.Client,
6678
Log: r.log,
6779
Scheme: r.scheme,
@@ -124,13 +136,15 @@ func NewTargetAllocatorReconciler(
124136
recorder events.EventRecorder,
125137
config config.Config,
126138
logger logr.Logger,
139+
reviewer *rbac.Reviewer,
127140
) *TargetAllocatorReconciler {
128141
return &TargetAllocatorReconciler{
129142
Client: client,
130143
log: logger,
131144
scheme: scheme,
132145
config: config,
133146
recorder: recorder,
147+
reviewer: reviewer,
134148
}
135149
}
136150

0 commit comments

Comments
 (0)