Skip to content

Commit 647439d

Browse files
authored
fix(rbac)!: nodes API permissions for Traefik v3.1+
1 parent d9b856a commit 647439d

File tree

4 files changed

+85
-14
lines changed

4 files changed

+85
-14
lines changed

traefik/templates/rbac/clusterrole.yaml

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
{{- if and .Values.rbac.enabled (or .Values.providers.kubernetesIngress.enabled (not .Values.rbac.namespaced)) }}
2-
{{- if not (and .Values.rbac.namespaced .Values.providers.kubernetesIngress.disableIngressClassLookup) }}
1+
{{- if .Values.rbac.enabled }}
2+
{{- if or
3+
(semverCompare ">=v3.1.0-0" (.Values.image.tag | default .Chart.AppVersion))
4+
(not .Values.rbac.namespaced)
5+
(and .Values.rbac.namespaced .Values.providers.kubernetesIngress.enabled (not .Values.providers.kubernetesIngress.disableIngressClassLookup))
6+
}}
37
---
48
kind: ClusterRole
59
apiVersion: rbac.authorization.k8s.io/v1
@@ -11,6 +15,16 @@ metadata:
1115
rbac.authorization.k8s.io/aggregate-to-{{ . }}: "true"
1216
{{- end }}
1317
rules:
18+
{{- if semverCompare ">=v3.1.0-0" (.Values.image.tag | default .Chart.AppVersion) }}
19+
- apiGroups:
20+
- ""
21+
resources:
22+
- nodes
23+
verbs:
24+
- get
25+
- list
26+
- watch
27+
{{- end }}
1428
- apiGroups:
1529
- extensions
1630
- networking.k8s.io

traefik/templates/rbac/clusterrolebinding.yaml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
{{- if and .Values.rbac.enabled (or .Values.providers.kubernetesIngress.enabled (not .Values.rbac.namespaced)) -}}
2-
{{- if or (not .Values.rbac.namespaced) (not .Values.providers.kubernetesIngress.disableIngressClassLookup) -}}
1+
{{- if .Values.rbac.enabled }}
2+
{{- if or
3+
(semverCompare ">=v3.1.0-0" (.Values.image.tag | default .Chart.AppVersion))
4+
(not .Values.rbac.namespaced)
5+
(and .Values.rbac.namespaced .Values.providers.kubernetesIngress.enabled (not .Values.providers.kubernetesIngress.disableIngressClassLookup))
6+
}}
37
---
48
kind: ClusterRoleBinding
59
apiVersion: rbac.authorization.k8s.io/v1

traefik/templates/rbac/role.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ rules:
2727
- apiGroups:
2828
- ""
2929
resources:
30-
- nodes
3130
- services
3231
verbs:
3332
- get
@@ -164,7 +163,6 @@ rules:
164163
resources:
165164
- namespaces
166165
- pods
167-
- nodes
168166
verbs:
169167
- get
170168
- list

traefik/tests/rbac-config_test.yaml

Lines changed: 63 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,10 @@ tests:
8989
path: metadata.name
9090
pattern: ^.*-NAMESPACE$
9191
template: rbac/clusterrolebinding.yaml
92-
- it: should not create cluster scoped RBAC related objects when namespaced and not using ingressclass
92+
- it: should not create cluster scoped RBAC related objects when namespaced and not using ingressclass and version <3.1
9393
set:
94+
image:
95+
tag: v3.0.0
9496
rbac:
9597
namespaced: true
9698
providers:
@@ -492,15 +494,15 @@ tests:
492494
- get
493495
- list
494496
- watch
495-
- it: cluster rbac should not be created when rbac is namespaced, disableIngressClassLookup is true and version is v3
497+
- it: cluster rbac should not be created when rbac is namespaced, disableIngressClassLookup is true and version is < v3.1
496498
set:
499+
image:
500+
tag: v3.0.0-beta3
497501
rbac:
498502
namespaced: true
499503
providers:
500504
kubernetesIngress:
501505
disableIngressClassLookup: true
502-
image:
503-
tag: v3.0.0-beta3
504506
asserts:
505507
- isKind:
506508
of: Role
@@ -514,7 +516,29 @@ tests:
514516
- hasDocuments:
515517
count: 0
516518
template: rbac/clusterrolebinding.yaml
517-
- it: both cluster and namespace rbac should be created when rbac is namespaced, kubernetesIngress is enabled and version is v2
519+
- it: cluster rbac should be created when rbac is namespaced, disableIngressClassLookup is true and version is >= v3.1
520+
set:
521+
image:
522+
tag: v3.1.0-rc2
523+
rbac:
524+
namespaced: true
525+
providers:
526+
kubernetesIngress:
527+
disableIngressClassLookup: true
528+
asserts:
529+
- isKind:
530+
of: Role
531+
template: rbac/role.yaml
532+
- isKind:
533+
of: RoleBinding
534+
template: rbac/rolebinding.yaml
535+
- isKind:
536+
of: ClusterRole
537+
template: rbac/clusterrole.yaml
538+
- isKind:
539+
of: ClusterRoleBinding
540+
template: rbac/clusterrolebinding.yaml
541+
- it: both cluster and namespace rbac should be created when rbac is namespaced, kubernetesIngress is enabled
518542
set:
519543
rbac:
520544
namespaced: true
@@ -796,7 +820,6 @@ tests:
796820
apiGroups:
797821
- ""
798822
resources:
799-
- nodes
800823
- services
801824
verbs:
802825
- get
@@ -1000,7 +1023,6 @@ tests:
10001023
resources:
10011024
- namespaces
10021025
- pods
1003-
- nodes
10041026
verbs:
10051027
- get
10061028
- list
@@ -1147,4 +1169,37 @@ tests:
11471169
- list
11481170
- get
11491171
- watch
1150-
1172+
- it: should not provide nodes RBACS for version < v3.1 if rbac are namespaced
1173+
set:
1174+
image:
1175+
tag: v3.0.1
1176+
rbac:
1177+
enabled: true
1178+
namespaced: true
1179+
providers:
1180+
kubernetesIngress:
1181+
disableIngressClassLookup: true
1182+
asserts:
1183+
- template: rbac/clusterrole.yaml
1184+
hasDocuments:
1185+
count: 0
1186+
- it: should provide nodes RBACS for version >= v3.1 even if rbac are namespaced
1187+
set:
1188+
image:
1189+
tag: v3.1.0
1190+
rbac:
1191+
enabled: true
1192+
namespaced: true
1193+
asserts:
1194+
- template: rbac/clusterrole.yaml
1195+
contains:
1196+
path: rules
1197+
content:
1198+
apiGroups:
1199+
- ""
1200+
resources:
1201+
- nodes
1202+
verbs:
1203+
- get
1204+
- list
1205+
- watch

0 commit comments

Comments
 (0)