Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
f3333d2
feat(imagevector): add stackit-pod-identity-webhook image
jastBytes Mar 23, 2026
1c3d5d7
feat(charts): add stackit-pod-identity-webhook charts
jastBytes Mar 23, 2026
0f65310
feat(controlplane): implement STACKIT pod identity webhook deployment
jastBytes Mar 23, 2026
5d86145
test(controlplane): add tests for STACKIT pod identity webhook
jastBytes Mar 23, 2026
c9b9220
feat(review): apply post review suggestions
jastBytes Mar 25, 2026
261f36a
feat(controlplane): hide pod identity webhook through a new feature g…
jastBytes Apr 7, 2026
77d4080
feat(controlplane): update pod identity webhook image to use GHCR and…
jastBytes Apr 8, 2026
cfbe8a2
fix(naming): fix naming to match references
jastBytes Apr 8, 2026
df413aa
revert(chart): revert change of values
jastBytes Apr 9, 2026
ed52f33
refactor(webhook): remove topology spread constraints from deployment…
jastBytes Apr 10, 2026
196dbac
Update charts/internal/seed-controlplane/charts/stackit-pod-identity-…
jastBytes Apr 10, 2026
e5b72c2
refactor(pod-identity-webhook): Updates the deployment and associated…
jastBytes Apr 10, 2026
243a224
feat(webhook): expose metrics endpoint for identity webhook via pod l…
jastBytes Apr 13, 2026
430c657
chore(config): disable pod identity webhook in component values
jastBytes Apr 14, 2026
d501b9a
refactor(webhook): apply resource limits and clean up prometheus anno…
jastBytes Apr 15, 2026
4f20cdf
feat(webhook): expose metrics endpoint for pod identity service
jastBytes Apr 15, 2026
dff1e35
fix: gomod
jastBytes Apr 15, 2026
043a9a8
refactor(webhook): correct service monitor endpoint definition
jastBytes Apr 15, 2026
7ed07e4
refactor(webhook): set static resource requests for webhook deploymen…
jastBytes Apr 15, 2026
b3d21f4
fix(chart): missing port delimiter
jastBytes Apr 15, 2026
8f1ec10
fix(chart): servicemonitor targeting wrong prometheus
jastBytes Apr 15, 2026
d876159
fix(chart): servicemonitor targeting wrong prometheus and netpol
jastBytes Apr 15, 2026
26e2699
fix port
jastBytes Apr 15, 2026
75f585d
Update charts/internal/seed-controlplane/charts/stackit-pod-identity-…
jastBytes Apr 16, 2026
096da44
feat(controlplane): Implement layered logic for pod identity webhook …
jastBytes Apr 17, 2026
848f21b
refactor(controlplane): update pointer initialization in tests
jastBytes Apr 17, 2026
40ef9f3
refactor(controlplane): simplify annotation check for pod identity we…
jastBytes Apr 17, 2026
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
apiVersion: v1
Comment thread
jastBytes marked this conversation as resolved.
name: stackit-pod-identity-webhook
version: 0.1.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: stackit-pod-identity-webhook
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: stackit-pod-identity-webhook
high-availability-config.resources.gardener.cloud/type: server
spec:
Comment thread
jastBytes marked this conversation as resolved.
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app.kubernetes.io/name: stackit-pod-identity-webhook
template:
metadata:
labels:
app.kubernetes.io/name: stackit-pod-identity-webhook
workload-identity.stackit.cloud/skip-pod-identity-webhook: "true"
gardener.cloud/role: controlplane
networking.gardener.cloud/to-dns: allowed
networking.resources.gardener.cloud/to-kube-apiserver-tcp-443: allowed
spec:
automountServiceAccountToken: false
podSecurityContext:
runAsNonRoot: true
runAsUser: 1239
runAsGroup: 1239
fsGroup: 1239
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
priorityClassName: gardener-system-200
containers:
- name: stackit-pod-identity-webhook
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
image: {{ index .Values.images "stackit-pod-identity-webhook" }}
Comment thread
jastBytes marked this conversation as resolved.
args:
- --cert-dir=/etc/webhook/certs
- --port={{ .Values.webhook.port }}
env:
- name: KUBECONFIG
value: /var/run/secrets/gardener.cloud/shoot/generic-kubeconfig/kubeconfig
ports:
- name: https
containerPort: {{ .Values.webhook.port }}
protocol: TCP
- name: metrics
Comment thread
jastBytes marked this conversation as resolved.
containerPort: 8080
protocol: TCP
- name: health
containerPort: 8081
protocol: TCP
livenessProbe:
httpGet:
path: /healthz
port: health
readinessProbe:
httpGet:
path: /readyz
port: health
resources:
limits:
memory: 128Mi
requests:
cpu: 50m
memory: 64Mi
volumeMounts:
- name: certs
mountPath: /etc/webhook/certs
readOnly: true
- mountPath: /var/run/secrets/gardener.cloud/shoot/generic-kubeconfig
name: kubeconfig
readOnly: true
volumes:
- name: certs
secret:
secretName: {{ .Values.webhook.tlsSecretName }}
- name: kubeconfig
projected:
defaultMode: 420
sources:
- secret:
items:
- key: kubeconfig
path: kubeconfig
name: {{ .Values.global.genericTokenKubeconfigSecretName }}
optional: false
- secret:
items:
- key: token
path: token
name: shoot-access-stackit-pod-identity-webhook
optional: false
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: stackit-pod-identity-webhook
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: stackit-pod-identity-webhook
spec:
maxUnavailable: 1
selector:
matchLabels:
app.kubernetes.io/name: stackit-pod-identity-webhook
unhealthyPodEvictionPolicy: AlwaysAllow
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
apiVersion: v1
kind: Service
Comment thread
jastBytes marked this conversation as resolved.
metadata:
name: stackit-pod-identity-webhook
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: stackit-pod-identity-webhook
endpoint-slice-hints.resources.gardener.cloud/consider: "true"
annotations:
networking.resources.gardener.cloud/from-all-webhook-targets-allowed-ports: '[{"protocol":"TCP","port":{{ .Values.webhook.port }}}]'
service.kubernetes.io/topology-mode: auto
spec:
type: ClusterIP
ports:
- port: 443
targetPort: {{ .Values.webhook.port }}
protocol: TCP
name: https
selector:
app.kubernetes.io/name: stackit-pod-identity-webhook
trafficDistribution: PreferClose
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: stackit-pod-identity-webhook
namespace: {{ .Release.Namespace }}
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: stackit-pod-identity-webhook
updatePolicy:
updateMode: Auto
Comment thread
jastBytes marked this conversation as resolved.
Outdated
resourcePolicy:
containerPolicies:
- containerName: stackit-pod-identity-webhook
minAllowed:
memory: 80M
Comment thread
jastBytes marked this conversation as resolved.
Outdated
maxAllowed:
cpu: {{ .Values.vpa.resourcePolicy.maxAllowed.cpu }}
memory: {{ .Values.vpa.resourcePolicy.maxAllowed.memory }}
controlledValues: RequestsOnly
Comment thread
jastBytes marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
replicaCount: 2

images:
stackit-pod-identity-webhook: image-repository:image-tag

webhook:
port: 9443
# The secret name containing tls.crt and tls.key for the webhook server
tlsSecretName: "stackit-pod-identity-webhook-certs"

vpa:
resourcePolicy:
maxAllowed:
cpu: 1
memory: 512Mi
4 changes: 4 additions & 0 deletions charts/internal/seed-controlplane/requirements.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,7 @@ dependencies:
repository: http://localhost:10191
version: 0.1.0
condition: stackit-alb-controller-manager.enabled
- name: stackit-pod-identity-webhook
repository: http://localhost:10191
version: 0.1.0
condition: stackit-pod-identity-webhook.enabled
Comment thread
jastBytes marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
apiVersion: v1
Comment thread
jastBytes marked this conversation as resolved.
name: stackit-pod-identity-webhook
version: 0.1.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
name: stackit-pod-identity-webhook
labels:
app.kubernetes.io/name: stackit-pod-identity-webhook
webhooks:
- name: stackit-pod-identity-webhook.stackit.cloud
clientConfig:
url: {{ .Values.webhook.url | quote }}
Comment thread
jastBytes marked this conversation as resolved.
Outdated
Comment thread
jastBytes marked this conversation as resolved.
Outdated
caBundle: {{ .Values.webhook.caBundle | quote }}
rules:
- operations: ["CREATE"]
apiGroups: [""]
apiVersions: ["v1"]
resources: ["pods"]
admissionReviewVersions: ["v1"]
sideEffects: None
failurePolicy: Fail
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: NotIn
values: ["kube-system", "garden"]
Comment thread
jastBytes marked this conversation as resolved.
Outdated
- key: workload-identity.stackit.cloud/skip-pod-identity-webhook
operator: DoesNotExist
objectSelector:
matchExpressions:
- key: workload-identity.stackit.cloud/skip-pod-identity-webhook
operator: DoesNotExist
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: extensions.gardener.cloud:provider-stackit:stackit-pod-identity-webhook
rules:
- apiGroups: [""]
resources: ["serviceaccounts"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: extensions.gardener.cloud:provider-stackit:stackit-pod-identity-webhook
subjects:
- kind: ServiceAccount # from shoot access secret
name: stackit-pod-identity-webhook
namespace: kube-system
roleRef:
kind: ClusterRole
name: extensions.gardener.cloud:provider-stackit:stackit-pod-identity-webhook
apiGroup: rbac.authorization.k8s.io
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
webhook:
caBundle: "" # will be set by valuesprovider
controlPlaneNamespace: "" # will be set by valuesprovider
Comment thread
jastBytes marked this conversation as resolved.
Outdated
4 changes: 4 additions & 0 deletions charts/internal/shoot-system-components/requirements.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,7 @@ dependencies:
repository: http://localhost:10191
version: 0.1.0
condition: stackit-blockstorage-csi-driver.enabled
- name: stackit-pod-identity-webhook
repository: http://localhost:10191
version: 0.1.0
condition: stackit-pod-identity-webhook.enabled
Comment thread
jastBytes marked this conversation as resolved.
2 changes: 2 additions & 0 deletions imagevector/images.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions imagevector/images.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -135,3 +135,6 @@ images:
- name: stackit-alb-controller-manager
repository: reg3.infra.ske.eu01.stackit.cloud/temp/alb-controller-manager
tag: "1245"
- name: stackit-pod-identity-webhook
repository: ghcr.io/stackitcloud/stackit-pod-identity-webhook
Comment thread
jastBytes marked this conversation as resolved.
tag: "v0.1.0@sha256:5c124efb00b5b5e0fd64b635e1643cebbd407b4abafdb966e02639627f41631c"
Comment thread
jastBytes marked this conversation as resolved.
Outdated
Loading