Skip to content

Commit 8c848f2

Browse files
authored
fix tigera-operator permission error for egressgateway (#3865)
1 parent fc3689f commit 8c848f2

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

pkg/render/egressgateway/egressgateway.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2023-2024 Tigera, Inc. All rights reserved.
1+
// Copyright (c) 2023-2025 Tigera, Inc. All rights reserved.
22

33
// Licensed under the Apache License, Version 2.0 (the "License");
44
// you may not use this file except in compliance with the License.
@@ -100,10 +100,11 @@ func (c *component) SupportedOSType() rmeta.OSType {
100100
}
101101

102102
func (c *component) Objects() ([]client.Object, []client.Object) {
103-
objectsToCreate := append(
104-
secret.ToRuntimeObjects(c.egwPullSecrets()...),
105-
c.egwServiceAccount(),
106-
)
103+
104+
var objectsToCreate []client.Object
105+
objectsToCreate = append(objectsToCreate, c.egwOperatorSecretsRoleBinding())
106+
objectsToCreate = append(objectsToCreate, secret.ToRuntimeObjects(c.egwPullSecrets()...)...)
107+
objectsToCreate = append(objectsToCreate, c.egwServiceAccount())
107108

108109
var objectsToDelete []client.Object
109110
if c.config.OpenShift {
@@ -122,6 +123,16 @@ func (c *component) Objects() ([]client.Object, []client.Object) {
122123
return objectsToCreate, objectsToDelete
123124
}
124125

126+
func (c *component) egwOperatorSecretsRoleBinding() *rbacv1.RoleBinding {
127+
operatorSecretRB := render.CreateOperatorSecretsRoleBinding(c.config.EgressGW.Namespace)
128+
operatorSecretRB.ObjectMeta.Labels = common.MapExistsOrInitialize(operatorSecretRB.ObjectMeta.Labels)
129+
// The tigera-operator-secrets RoleBinding is shared across all EGW CRs in this namespace.
130+
// As such, we mark it as having multiple owners so that we maintain multiple owner references
131+
// when creating the rolebinding so that it will only be GC'd when all of its owners have been deleted.
132+
operatorSecretRB.ObjectMeta.Labels[common.MultipleOwnersLabel] = "true"
133+
return operatorSecretRB
134+
}
135+
125136
func (c *component) Ready() bool {
126137
return true
127138
}

pkg/render/egressgateway/egressgateway_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ var _ = Describe("Egress Gateway rendering tests", func() {
115115
version string
116116
kind string
117117
}{
118+
{"tigera-operator-secrets", "test-ns", "rbac.authorization.k8s.io", "v1", "RoleBinding"},
118119
{"test-secret", "test-ns", "", "v1", "Secret"},
119120
{"egress-test", "test-ns", "", "v1", "ServiceAccount"},
120121
{"egress-test", "test-ns", "apps", "v1", "Deployment"},
@@ -273,7 +274,7 @@ var _ = Describe("Egress Gateway rendering tests", func() {
273274
VXLANPort: 4790,
274275
})
275276
resources, _ := component.Objects()
276-
Expect(resources).To(HaveLen(2))
277+
Expect(resources).To(HaveLen(3))
277278
dep := rtest.GetResource(resources, "egress-test", "test-ns", "apps", "v1", "Deployment").(*appsv1.Deployment)
278279
Expect(dep.Spec.Template.Spec.Containers[0].Resources).To(Equal(expectedResource))
279280
elasticIPAnnotation := dep.Spec.Template.ObjectMeta.Annotations["cni.projectcalico.org/awsElasticIPs"]
@@ -288,6 +289,7 @@ var _ = Describe("Egress Gateway rendering tests", func() {
288289
version string
289290
kind string
290291
}{
292+
{"tigera-operator-secrets", "test-ns", "rbac.authorization.k8s.io", "v1", "RoleBinding"},
291293
{"egress-test", "test-ns", "", "v1", "ServiceAccount"},
292294
{"egress-test", "test-ns", rbac, "v1", "Role"},
293295
{"egress-test", "test-ns", rbac, "v1", "RoleBinding"},

0 commit comments

Comments
 (0)