Skip to content

Commit bb66f79

Browse files
joelanfordpedjak
authored andcommitted
docs: rewrite cluster-admin scope section in design decisions doc
Also updates go.mod/go.sum to fix k8s.io/client-go version.
1 parent c520a78 commit bb66f79

3 files changed

Lines changed: 26 additions & 51 deletions

File tree

docs/project/olmv1_design_decisions.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -178,15 +178,13 @@ However, it should be noted that the purpose of these primitives is not to enabl
178178

179179
### Secure access to ClusterExtensions through API access RBAC and ValidatingAdmissionPolicy
180180

181-
OLMv1 adopts cluster-admin scope directly. Previously, OLMv1 required cluster administrators to create ServiceAccounts and associated RBAC to enable the installation of ClusterExtensions. The current approach provides the following benefits:
181+
OLMv1 is a single-tenant system that treats installed extensions as trusted cluster components, consistent with the Kubernetes design assumption that [CRDs and their controllers are trusted cluster extensions](#watched-namespaces-cannot-be-configured-in-a-first-class-api). The operator-controller uses its own cluster-admin service account for all operations.
182182

183-
- Eliminates the complexity of difficult-to-determine permissions
184-
- Removes the UX burden of requiring users to manage ServiceAccounts
185-
- Enables simpler internal operations for namespace management and content lifecycle
183+
Because creating or modifying a `ClusterExtension` triggers cluster-admin-level operations, cluster administrators should treat write access to the `ClusterExtension` API as equivalent to granting cluster-admin privileges. To restrict which users may trigger installations, use Kubernetes RBAC on the `ClusterExtension` API; for finer-grained constraints such as limiting which packages, catalogs, namespaces, or upgrade policies a user may specify, pair RBAC with a `ValidatingAdmissionPolicy`. For concrete examples of both approaches, see [Protecting OLMv1 API Access](../howto/how-to-protect-olmv1-api-access.md).
186184

187-
> **Note:** The `spec.serviceAccount` field is deprecated and will be removed in a future release. The field is retained in the API for backwards compatibility. The API server still accepts the field, but its value is silently ignored.
188-
189-
Because the operator-controller uses its own cluster-admin service account for all operations, cluster administrators should treat the ability to create or modify `ClusterExtension` resources as equivalent to granting cluster-admin privileges, and guard that access accordingly. To restrict which users may trigger installations, use Kubernetes RBAC on the `ClusterExtension` API; for finer-grained constraints such as limiting which packages, catalogs, namespaces, or upgrade policies a user may specify, pair RBAC with a `ValidatingAdmissionPolicy`. For concrete examples of both approaches, see [Protecting OLMv1 API Access](../howto/how-to-protect-olmv1-api-access.md).
185+
> **Deprecation note:** The `spec.serviceAccount` field is deprecated and will be removed in a future release. The field is retained in the API for backwards compatibility, but its value is silently ignored.
186+
>
187+
> Previously, OLMv1 required cluster administrators to bind ServiceAccounts with associated RBAC to scope the permissions available to each ClusterExtension. In practice, this did not provide meaningful security: any user with write access to the ClusterExtension API could reference any existing ServiceAccount in any namespace, including highly-privileged ones. The permission model added UX friction without delivering the isolation and policy guarantees it implied.
190188
191189
OLM v1 also uses secure communication protocols between all internal components and between itself and its clients.
192190

go.mod

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ require (
4343
k8s.io/apimachinery v0.36.2
4444
k8s.io/apiserver v0.36.2
4545
k8s.io/cli-runtime v0.36.2
46-
k8s.io/client-go v1.5.2
46+
k8s.io/client-go v0.36.2
4747
k8s.io/component-base v0.36.2
4848
k8s.io/klog/v2 v2.140.0
4949
k8s.io/utils v0.0.0-20260319190234-28399d86e0b5
@@ -55,8 +55,6 @@ require (
5555
sigs.k8s.io/yaml v1.6.0
5656
)
5757

58-
require k8s.io/kube-openapi v0.0.0-20260520065146-aa012df4f4af // indirect
59-
6058
require (
6159
cel.dev/expr v0.25.2 // indirect
6260
dario.cat/mergo v1.0.2 // indirect
@@ -245,8 +243,9 @@ require (
245243
gopkg.in/warnings.v0 v0.1.2 // indirect
246244
gopkg.in/yaml.v2 v2.4.0 // indirect
247245
gopkg.in/yaml.v3 v3.0.1 // indirect
246+
k8s.io/kube-openapi v0.0.0-20260520065146-aa012df4f4af // indirect
248247
k8s.io/kubectl v0.36.2 // indirect
249-
k8s.io/streaming v0.36.1 // indirect
248+
k8s.io/streaming v0.36.2 // indirect
250249
oras.land/oras-go/v2 v2.6.1 // indirect
251250
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.34.0 // indirect
252251
sigs.k8s.io/gateway-api v1.5.0 // indirect
@@ -257,25 +256,3 @@ require (
257256
)
258257

259258
retract v1.5.0 // contains filename with ':' which causes failure creating module zip file
260-
261-
replace k8s.io/api => k8s.io/api v0.36.1
262-
263-
replace k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.36.1
264-
265-
replace k8s.io/apimachinery => k8s.io/apimachinery v0.36.1
266-
267-
replace k8s.io/apiserver => k8s.io/apiserver v0.36.1
268-
269-
replace k8s.io/cli-runtime => k8s.io/cli-runtime v0.36.1
270-
271-
replace k8s.io/client-go => k8s.io/client-go v0.36.1
272-
273-
replace k8s.io/component-base => k8s.io/component-base v0.36.1
274-
275-
replace k8s.io/component-helpers => k8s.io/component-helpers v0.36.1
276-
277-
replace k8s.io/controller-manager => k8s.io/controller-manager v0.36.1
278-
279-
replace k8s.io/kubectl => k8s.io/kubectl v0.36.1
280-
281-
replace k8s.io/streaming => k8s.io/streaming v0.36.1

go.sum

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -773,28 +773,28 @@ helm.sh/helm/v3 v3.21.2 h1:O8ktw30zQZm4tNRavKRN44rotcHICdbSU3e6gS7CCbQ=
773773
helm.sh/helm/v3 v3.21.2/go.mod h1:Da+9m67Mzg42rQNrWAj0RvUd4tDT4dL8mrxUwvRgYWo=
774774
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
775775
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
776-
k8s.io/api v0.36.1 h1:XbL/EMj8K2aJpJtePmqUyQMsM0D4QI2pvl7YKJ20FTY=
777-
k8s.io/api v0.36.1/go.mod h1:KOWo4ey3TINlXjeHVuwB3i+tXXnu+UcwFBHlI/9dvEo=
778-
k8s.io/apiextensions-apiserver v0.36.1 h1:6JfYmPUsuUIHuN+3QxutXYWj492RqF5fBSx67GYK5Ks=
779-
k8s.io/apiextensions-apiserver v0.36.1/go.mod h1:pLzZin90riwisdzKwv/GoTwENooytoIx5zWJb4Hkby8=
780-
k8s.io/apimachinery v0.36.1 h1:G63Gjx2W+q0YD+72Vo8oY0nDnePVwnuzTmmy5ENrVSA=
781-
k8s.io/apimachinery v0.36.1/go.mod h1:ibYOR00vW/I1kzvi5SF0dRuJ52BvKtfvRdOn35GPQ+8=
782-
k8s.io/apiserver v0.36.1 h1:iMS5V+rPUertv5P9RaqJgmHHTuh4quWpoxchvMUY+JY=
783-
k8s.io/apiserver v0.36.1/go.mod h1:Cby1PbLWztu0GDOxoO6iFOyyqIsziHNEW+w9zVQ22Kw=
784-
k8s.io/cli-runtime v0.36.1 h1:yuC/BGnnj1YYPh6D1P+pZnzinCs6DvMq86yAeNqoqzM=
785-
k8s.io/cli-runtime v0.36.1/go.mod h1:ZQWHGt8xAF7KnviB79vX0lYNyUUqKIpU+LQg7exuFAw=
786-
k8s.io/client-go v0.36.1 h1:FN/K8QIT2CEDt+2WB2HnWrUANZ50AP5GII43/SP2JR0=
787-
k8s.io/client-go v0.36.1/go.mod h1:s6rAnCtTGYDQnpNjEhSaISV+2O8jwruZ6m3QOYBFbtU=
788-
k8s.io/component-base v0.36.1 h1:iG6GsELftXqTNG9HG6kiVjatSgAw1sf5pJ6R5a6N0kA=
789-
k8s.io/component-base v0.36.1/go.mod h1:nf9XPlntRdqO6WMeEWAA5F93Y4ICZQdeT9GeqLDB3JI=
776+
k8s.io/api v0.36.2 h1:TF6YDLIzKfccK7cq9YpTcGX8TJmEkHVRv78DM51fRYY=
777+
k8s.io/api v0.36.2/go.mod h1:F4LbMO4brjZYh7yFkXWhynSvtB7YauxV4c+HHkNRGNg=
778+
k8s.io/apiextensions-apiserver v0.36.2 h1:3O5gqOj/dt2XWWbpMe+TXWpE9yU6pjM/tXxtHHJT/K4=
779+
k8s.io/apiextensions-apiserver v0.36.2/go.mod h1:cL1tBWe8XSaP1H30iWKGo7hf6iAUUUJPEU70dskmAnA=
780+
k8s.io/apimachinery v0.36.2 h1:0PE/W/WNy1UX61NLbXY5TMbJ6UwLL6E6lAPkYrKFxbQ=
781+
k8s.io/apimachinery v0.36.2/go.mod h1:fvf/HOLXq9RId0rnDIbN1OEBvHXdQbLMM8nu0LcBUf4=
782+
k8s.io/apiserver v0.36.2 h1:6vMnkmHZPeBloNkHUhmZYq7Ylv8WIB8xjyEl+eSt26E=
783+
k8s.io/apiserver v0.36.2/go.mod h1:9PoQ2ikCytrZyZg11mGhLEF5m8Rgsb5FJmYJ4Wvnl1k=
784+
k8s.io/cli-runtime v0.36.2 h1:CconTvEeV4DJs4ZX3HQKCFbFRGsm6OtuBM9yjmMP2VM=
785+
k8s.io/cli-runtime v0.36.2/go.mod h1:LddcjiMf4YlnHO7c1Y7rEtDqL84FyiYVLco7V679GUU=
786+
k8s.io/client-go v0.36.2 h1:bfgxmFKc9CgqsgX4xKLAAdmTQlWee7Ob/HlDOrJ5TBI=
787+
k8s.io/client-go v0.36.2/go.mod h1:1vgO4OAlfPnoLcb+Rze2GF5rAr14w8qjrYMoyXJzQj0=
788+
k8s.io/component-base v0.36.2 h1:Z0VH80O7Ng0HDZnZj3WRR3urEGa0kTwmO8CwEwjVK1w=
789+
k8s.io/component-base v0.36.2/go.mod h1:mGfFOA7Gwpdm1VW2cwSQYbiDIlz8GD2WGwH88QSeCyA=
790790
k8s.io/klog/v2 v2.140.0 h1:Tf+J3AH7xnUzZyVVXhTgGhEKnFqye14aadWv7bzXdzc=
791791
k8s.io/klog/v2 v2.140.0/go.mod h1:o+/RWfJ6PwpnFn7OyAG3QnO47BFsymfEfrz6XyYSSp0=
792792
k8s.io/kube-openapi v0.0.0-20260520065146-aa012df4f4af h1:zLXA2Irn14q2/06WMkxViyr7YCPUO2lJ0QYE9Juy5vA=
793793
k8s.io/kube-openapi v0.0.0-20260520065146-aa012df4f4af/go.mod h1:V/QaCUYDa+0QpcHhVVc5l99Uz56wEMEXBSj9oCDkNDY=
794-
k8s.io/kubectl v0.36.1 h1:96HqS9twIdHM0MlJLTwbo14b9kUKPkOzZ4tlRDLv4qI=
795-
k8s.io/kubectl v0.36.1/go.mod h1:/DGPAIewKsFWF9VFgGvkPhao2Ev4SNuE3BioZo8yPbk=
796-
k8s.io/streaming v0.36.1 h1:L+K68n4Gg940BGNNYtUBvL1WTLL0YnKT3s+P1MNAmR4=
797-
k8s.io/streaming v0.36.1/go.mod h1:z6fV3D+NVkoeqRMtWwlUZK6U17SY/LqNzOxWL6GyR/s=
794+
k8s.io/kubectl v0.36.2 h1:rpUGGpeL09XVOLep2yle5jrtk//JA1L6ZHfkQQtVEwk=
795+
k8s.io/kubectl v0.36.2/go.mod h1:gVbQ3B/yb4bSR2ggQ7rd0W6icUSWs7sduH4e16Vii+0=
796+
k8s.io/streaming v0.36.2 h1:NSKthPPg9UFSKsRauVJUVGH2Dvn8fhKmY4qrMkw/p98=
797+
k8s.io/streaming v0.36.2/go.mod h1:z6fV3D+NVkoeqRMtWwlUZK6U17SY/LqNzOxWL6GyR/s=
798798
k8s.io/utils v0.0.0-20260319190234-28399d86e0b5 h1:kBawHLSnx/mYHmRnNUf9d4CpjREbeZuxoSGOX/J+aYM=
799799
k8s.io/utils v0.0.0-20260319190234-28399d86e0b5/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
800800
oras.land/oras-go/v2 v2.6.1 h1:bonOEkjLfp8tt6qXWRRWP6p1F+9octchOf2EqnWB4Zs=

0 commit comments

Comments
 (0)