Skip to content
Draft
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
5 changes: 3 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,10 @@ generate: $(HELM) $(YQ)
format: $(GOIMPORTS) $(GOIMPORTSREVISER)
@bash $(GARDENER_HACK_DIR)/format.sh ./cmd ./pkg

.PHONY: test
.PHONY: test
test: DIRS ?= "./cmd/... ./pkg/..."
test: $(REPORT_COLLECTOR) $(SETUP_ENVTEST)
@./hack/test.sh ./cmd/... ./pkg/...
@./hack/test.sh $(DIRS)

.PHONY: test-cov
test-cov:
Expand Down
33 changes: 30 additions & 3 deletions charts/gardener-extension-acl/templates/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,10 @@ spec:
labels:
networking.gardener.cloud/to-dns: allowed
networking.gardener.cloud/to-runtime-apiserver: allowed
networking.resources.gardener.cloud/to-garden-virtual-garden-kube-apiserver-tcp-443: allowed
{{ include "labels" . | indent 8 }}
spec:
priorityClassName: gardener-system-900
priorityClassName: {{ default "gardener-system-900" .Values.gardener.runtimeCluster.priorityClassName }}
serviceAccountName: {{ include "name" . }}
containers:
- name: {{ include "name" . }}
Expand All @@ -43,7 +44,16 @@ spec:
{{- if .Values.gardener.version }}
- --gardener-version={{ .Values.gardener.version }}
{{- end }}
{{- if .Values.gardener.runtimeCluster.enabled }}
- --extension-classes=garden
{{- else }}
- --extension-classes=shoot
{{- end }}
env:
{{- if .Values.gardener.runtimeCluster.enabled }}
- name: GARDEN_KUBECONFIG
value: /var/run/secrets/gardener.cloud/garden/generic-kubeconfig/kubeconfig
{{- end }}
- name: LEADER_ELECTION_NAMESPACE
valueFrom:
fieldRef:
Expand All @@ -65,16 +75,33 @@ spec:
runAsGroup: 65532
seccompProfile:
type: RuntimeDefault
{{- if .Values.imageVectorOverwrite }}
volumeMounts:
{{- if .Values.gardener.runtimeCluster.enabled }}
- name: kubeconfig
mountPath: /var/run/secrets/gardener.cloud/garden/generic-kubeconfig
readOnly: true
{{- end }}
{{- if .Values.imageVectorOverwrite }}
- name: extension-imagevector-overwrite
mountPath: /charts_overwrite/
readOnly: true
{{- end }}
{{- if .Values.imageVectorOverwrite }}
volumes:
{{- if .Values.imageVectorOverwrite }}
- name: extension-imagevector-overwrite
configMap:
name: {{ include "name" . }}-imagevector-overwrite
defaultMode: 420
{{- end }}
{{- if .Values.gardener.runtimeCluster.enabled }}
- name: kubeconfig
projected:
defaultMode: 420
sources:
- secret:
items:
- key: kubeconfig
path: kubeconfig
name: garden-kubeconfig
optional: false
{{- end }}
32 changes: 32 additions & 0 deletions charts/gardener-extension-acl/templates/rbac-garden.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{{- if .Values.gardener.runtimeCluster.enabled }}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ include "name" . }}:garden
labels:
{{ include "labels" . | indent 4 }}
rules:
- apiGroups:
- operator.gardener.cloud
resources:
- gardens
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ include "name" . }}:garden
labels:
{{ include "labels" . | indent 4 }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ include "name" . }}:garden
subjects:
- kind: ServiceAccount
name: {{ include "name" . }}
namespace: {{ .Release.Namespace }}
{{- end }}
42 changes: 42 additions & 0 deletions charts/gardener-extension-acl/templates/rbac-shoot.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{{- if not .Values.gardener.runtimeCluster.enabled }}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ include "name" . }}:shoot
labels:
{{ include "labels" . | indent 4 }}
rules:
- apiGroups:
- extensions.gardener.cloud
resources:
- clusters
- dnsrecords
- infrastructures
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- services
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ include "name" . }}:shoot
labels:
{{ include "labels" . | indent 4 }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ include "name" . }}:shoot
subjects:
- kind: ServiceAccount
name: {{ include "name" . }}
namespace: {{ .Release.Namespace }}
{{- end }}
42 changes: 1 addition & 41 deletions charts/gardener-extension-acl/templates/rbac.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,24 +18,6 @@ rules:
- delete
resources:
- envoyfilters
- apiGroups:
- ""
resources:
- services
verbs:
- get
- list
- watch
- apiGroups:
- extensions.gardener.cloud
resources:
- clusters
- dnsrecords
- infrastructures
verbs:
- get
- list
- watch
- apiGroups:
- extensions.gardener.cloud
resources:
Expand Down Expand Up @@ -67,28 +49,6 @@ rules:
- get
- list
- watch
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- get
- create
- update
- patch
- apiGroups:
- rbac.authorization.k8s.io
resources:
- clusterroles
- clusterrolebindings
- roles
- rolebindings
verbs:
- get
- create
- update
- patch
- delete
- apiGroups:
- ""
resources:
Expand Down Expand Up @@ -197,4 +157,4 @@ roleRef:
subjects:
- kind: ServiceAccount
name: {{ include "name" . }}
namespace: {{ .Release.Namespace }}
namespace: {{ .Release.Namespace }}
30 changes: 30 additions & 0 deletions charts/gardener-extension-acl/templates/secret.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
apiVersion: v1
kind: Secret
type: Opaque
metadata:
annotations:
serviceaccount.resources.gardener.cloud/name: extension-acl
serviceaccount.resources.gardener.cloud/inject-ca-bundle: "true"
serviceaccount.resources.gardener.cloud/labels: '{"extension": "acl"}'
labels:
resources.gardener.cloud/class: garden
resources.gardener.cloud/purpose: token-requestor
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume that you're creating this "by hand" because gardener-operator doesn't create this by default. Should we add this feature, similarly to https://github.com/gardener/gardener/blob/master/docs/extensions/garden-api-access.md?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would love to see this available in g/g. However as of the time creating this PR it was not possible to do

name: garden-kubeconfig
namespace: {{ .Release.Namespace }}
stringData:
kubeconfig: |
apiVersion: v1
clusters:
- cluster:
server: https://virtual-garden-kube-apiserver.garden.svc.cluster.local
name: default
contexts:
- context:
cluster: default
user: token
name: default
current-context: default
kind: Config
users:
- name: token
user: {}
3 changes: 3 additions & 0 deletions charts/gardener-extension-acl/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,6 @@ additionalAllowedCidrs: []

gardener:
version: ""
runtimeCluster:
enabled: false
priorityClassName: ""
2 changes: 1 addition & 1 deletion charts/seed/templates/envoyfilter/envoyfilter-api.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: acl-api-{{ .Values.shootName }}
name: acl-api-{{ .Values.suffix }}
namespace: {{ .Values.targetNamespace }}
labels:
{{- include "gardener-extension.labels" . | nindent 4 }}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
{{- if .Values.httpProxyEnvoyFilterSpec }}
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: acl-http-proxy-{{ .Values.shootName }}
name: acl-http-proxy-{{ .Values.suffix }}
namespace: {{ .Values.targetNamespace }}
labels:
{{- include "gardener-extension.labels" . | nindent 4 }}
spec: {{- .Values.httpProxyEnvoyFilterSpec | toYaml | nindent 2 }}
{{- end }}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: acl-ingress-{{ .Values.shootName }}
name: acl-ingress-{{ .Values.suffix }}
namespace: istio-ingress
labels:
{{- include "gardener-extension.labels" . | nindent 4 }}
Expand Down
4 changes: 3 additions & 1 deletion charts/seed/templates/envoyfilter/envoyfilter-vpn.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
{{- if .Values.vpnEnvoyFilterSpec }}
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: acl-vpn-{{ .Values.shootName }}
name: acl-vpn-{{ .Values.suffix }}
namespace: {{ .Values.targetNamespace }}
labels:
{{- include "gardener-extension.labels" . | nindent 4 }}
spec: {{- .Values.vpnEnvoyFilterSpec | toYaml | nindent 2 }}
{{- end }}
4 changes: 3 additions & 1 deletion charts/seed/values.yaml
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
# TODO
suffix: ""
targetNamespace: ""

9 changes: 9 additions & 0 deletions cmd/gardener-extension-acl/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller"
"github.com/gardener/gardener/extensions/pkg/util"
v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants"
operatorv1alpha1 "github.com/gardener/gardener/pkg/apis/operator/v1alpha1"
"github.com/spf13/cobra"
istionetworkv1alpha3 "istio.io/client-go/pkg/apis/networking/v1alpha3"
istionetworkv1beta1 "istio.io/client-go/pkg/apis/networking/v1beta1"
Expand Down Expand Up @@ -98,6 +99,10 @@ func (o *Options) run(ctx context.Context) error {
return fmt.Errorf("could not update manager scheme: %s", err)
}

if err := operatorv1alpha1.AddToScheme(mgr.GetScheme()); err != nil {
return fmt.Errorf("could not update manager scheme: %s", err)
}

if err := istionetworkv1alpha3.AddToScheme(mgr.GetScheme()); err != nil {
return fmt.Errorf("could not update manager scheme: %s", err)
}
Expand All @@ -112,6 +117,10 @@ func (o *Options) run(ctx context.Context) error {
o.controllerOptions.Completed().Apply(&controller.DefaultAddOptions.ControllerOptions)
o.healthOptions.Completed().Apply(&healthcheck.DefaultAddOptions.Controller)
o.reconcileOptions.Completed().Apply(&controller.DefaultAddOptions.IgnoreOperationAnnotation)
healthcheck.DefaultAddOptions.ExtensionClasses = o.generalOptions.Completed().ExtensionClasses

o.reconcileOptions.Completed().Apply(&controller.DefaultAddOptions.IgnoreOperationAnnotation)
controller.DefaultAddOptions.ExtensionClasses = o.generalOptions.Completed().ExtensionClasses

if err := o.controllerSwitches.Completed().AddToManager(ctx, mgr); err != nil {
return fmt.Errorf("could not add controllers to manager: %s", err)
Expand Down
4 changes: 4 additions & 0 deletions deploy/garden/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- rbac.yaml
26 changes: 26 additions & 0 deletions deploy/garden/rbac.yaml
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a simple kustomization.yaml?

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: extensions.gardener.cloud:acl:managedseeds
namespace: garden
annotations:
authorization.gardener.cloud/extensions-serviceaccount-selector: '{"matchLabels":{"extension":"acl"}}'
labels:
authorization.gardener.cloud/custom-extensions-permissions: "true"
rules:
- apiGroups:
- seedmanagement.gardener.cloud
resources:
- managedseeds
verbs:
- get
- list
- watch
- apiGroups:
- core.gardener.cloud
resources:
- shoots
verbs:
- get
- list
- watch
Loading
Loading