Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reduce RBAC privileges for single namespace deployment #626

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,13 @@ jobs:
include:
- k3s-channel: v1.20
upgrade-from: "0.9.0"
dask-namespace: "default"
- k3s-channel: stable
dask-namespace: "default"
- k3s-channel: stable
dask-namespace: "additional"
- k3s-channel: latest
dask-namespace: "default"

steps:
- uses: actions/checkout@v3
Expand Down Expand Up @@ -172,6 +177,10 @@ jobs:
--include-crds \
--values=resources/helm/testing/chart-install-values.yaml

- if: matrix.dask-namespace == 'additional'
run: |
kubectl create namespace additional

- name: helm install previous version ${{ matrix.upgrade-from }}
if: matrix.upgrade-from != ''
run: |
Expand Down Expand Up @@ -209,6 +218,7 @@ jobs:
resources/helm/dask-gateway \
--install \
--values=resources/helm/testing/chart-install-values.yaml \
--set gateway.backend.namespace=${{ matrix.dask-namespace }} \
--wait \
--timeout 1m0s

Expand Down
51 changes: 49 additions & 2 deletions resources/helm/dask-gateway/templates/controller/rbac.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{{- if .Values.controller.enabled -}}
{{- if .Values.rbac.enabled -}}
{{- if not .Values.rbac.controller.serviceAccountName -}}
{{- $multiNamespace := default false (and .Values.gateway.backend.namespace (ne .Release.Namespace .Values.gateway.backend.namespace)) }}
apiVersion: v1
kind: ServiceAccount
metadata:
Expand All @@ -14,6 +15,49 @@ metadata:
name: {{ include "dask-gateway.controllerName" . }}
labels:
{{- include "dask-gateway.labels" . | nindent 4 }}
rules:
- apiGroups: ["gateway.dask.org"]
resources: ["daskclusters", "daskclusters/status"]
verbs: {{ ternary "[\"*\"]" "[\"get\", \"list\", \"watch\"]" $multiNamespace }}
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch" {{- if $multiNamespace }}, "create", "delete"{{ end -}} ]
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch"]
{{- if $multiNamespace }}
- apiGroups: [""]
resources: ["secrets", "services"]
verbs: ["create", "delete"]
- apiGroups: ["traefik.containo.us"]
resources: ["ingressroutes", "ingressroutetcps"]
verbs: ["get", "create", "delete"]
{{- end }}
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: {{ include "dask-gateway.controllerName" . }}
labels:
{{- include "dask-gateway.labels" . | nindent 4 }}
subjects:
- kind: ServiceAccount
name: {{ include "dask-gateway.controllerName" . }}
namespace: {{ .Release.Namespace }}
roleRef:
kind: ClusterRole
name: {{ include "dask-gateway.controllerName" . }}
apiGroup: rbac.authorization.k8s.io

---
{{- if not $multiNamespace }}
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: {{ include "dask-gateway.controllerName" . }}
namespace: {{ .Release.Namespace }}
labels:
{{- include "dask-gateway.labels" . | nindent 4 }}
rules:
- apiGroups: ["gateway.dask.org"]
resources: ["daskclusters", "daskclusters/status"]
Expand All @@ -31,20 +75,23 @@ rules:
resources: ["secrets", "services"]
verbs: ["create", "delete"]
---
kind: ClusterRoleBinding
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: {{ include "dask-gateway.controllerName" . }}
namespace: {{ .Release.Namespace }}
labels:
{{- include "dask-gateway.labels" . | nindent 4 }}
subjects:
- kind: ServiceAccount
name: {{ include "dask-gateway.controllerName" . }}
namespace: {{ .Release.Namespace }}
roleRef:
kind: ClusterRole
kind: Role
name: {{ include "dask-gateway.controllerName" . }}
apiGroup: rbac.authorization.k8s.io

{{- end }}
{{- end }}
{{- end }}
{{- end }}
35 changes: 34 additions & 1 deletion resources/helm/dask-gateway/templates/gateway/rbac.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{{- if .Values.rbac.enabled -}}
{{- if not .Values.rbac.gateway.serviceAccountName -}}
{{- $multiNamespace := default false (and .Values.gateway.backend.namespace (ne .Release.Namespace .Values.gateway.backend.namespace)) }}
apiVersion: v1
kind: ServiceAccount
metadata:
Expand All @@ -14,12 +15,14 @@ metadata:
labels:
{{- include "dask-gateway.labels" . | nindent 4 }}
rules:
{{- if $multiNamespace }}
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get"]
{{- end }}
- apiGroups: ["gateway.dask.org"]
resources: ["daskclusters"]
verbs: ["*"]
verbs: {{ ternary "[\"*\"]" "[\"get\", \"list\", \"watch\"]" $multiNamespace }}
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
Expand All @@ -35,5 +38,35 @@ roleRef:
kind: ClusterRole
name: {{ include "dask-gateway.apiName" . }}
apiGroup: rbac.authorization.k8s.io

{{- if not $multiNamespace }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: {{ include "dask-gateway.apiName" . }}
namespace: {{ .Release.Namespace }}
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get"]
- apiGroups: ["gateway.dask.org"]
resources: ["daskclusters"]
verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: {{ include "dask-gateway.apiName" . }}
namespace: {{ .Release.Namespace }}
subjects:
- kind: ServiceAccount
name: {{ include "dask-gateway.apiName" . }}
namespace: {{ .Release.Namespace }}
roleRef:
kind: Role
name: {{ include "dask-gateway.apiName" . }}
apiGroup: rbac.authorization.k8s.io
{{- end }}
{{- end }}
{{- end }}
4 changes: 4 additions & 0 deletions resources/helm/dask-gateway/templates/traefik/deployment.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{{- $multiNamespace := default false (and .Values.gateway.backend.namespace (ne .Release.Namespace .Values.gateway.backend.namespace)) }}
apiVersion: apps/v1
kind: Deployment
metadata:
Expand Down Expand Up @@ -61,6 +62,9 @@ spec:
- "--api.dashboard=true"
- "--api.insecure=true"
{{- end }}
{{- if not $multiNamespace }}
- "--providers.kubernetescrd.namespaces={{ .Release.Namespace }}"
{{- end }}
{{- range .Values.traefik.additionalArguments }}
- {{ . | quote }}
{{- end }}
Expand Down
7 changes: 4 additions & 3 deletions resources/helm/dask-gateway/templates/traefik/rbac.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
{{- if .Values.rbac.enabled -}}
{{- if not .Values.rbac.traefik.serviceAccountName -}}
{{- $multiNamespace := default false (and .Values.gateway.backend.namespace (ne .Release.Namespace .Values.gateway.backend.namespace)) }}
kind: ServiceAccount
apiVersion: v1
metadata:
name: {{ include "dask-gateway.traefikName" . }}
---
kind: ClusterRole
kind: {{ ternary "ClusterRole" "Role" $multiNamespace }}
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: {{ include "dask-gateway.traefikName" . }}
Expand Down Expand Up @@ -52,13 +53,13 @@ rules:
- list
- watch
---
kind: ClusterRoleBinding
kind: {{ ternary "ClusterRoleBinding" "RoleBinding" $multiNamespace }}
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: {{ include "dask-gateway.traefikName" . }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
kind: {{ ternary "ClusterRole" "Role" $multiNamespace }}
name: {{ include "dask-gateway.traefikName" . }}
subjects:
- kind: ServiceAccount
Expand Down