mirror of
https://github.com/cozystack/cozystack.git
synced 2026-11-13 08:05:19 +09:00
The vm-disk pvc-resize, cozystack-api, seaweedfs and vm-instance update hooks (whose alpine/k8s image this PR refreshes) ran as root with no securityContext. Add a pod-level runAsNonRoot + runAsUser 65534 + seccompProfile RuntimeDefault and a container-level allowPrivilegeEscalation: false + capabilities drop ALL, mirroring the dashboard adopt hook. kubectl needs no root, so this is behavior-neutral. Each hook is lookup-gated; pin the securityContext in a per-chart helm-unittest that mocks the gating object (DaemonSet / PVC / Service) via kubernetesProvider so the guard renders without a cluster. vm-disk and vm-instance had no Makefile test target, so add 'test: helm unittest .' to both so CI runs the new suites. Scope note: other kubectl hooks on clastix/kubectl (mariadb, keycloak, kubernetes, tenant) are untouched here — they are not part of this alpine/k8s refresh and belong to a separate hardening pass. Also fix the vm-disk resize hook's backoffLimit: it was nested under the pod spec (silently ignored, leaving the Job at the default 6 retries) instead of Job.spec. Move it to Job.spec and pin it in the test. Assisted-By: Claude <noreply@anthropic.com> Signed-off-by: Aleksei Sviridkin <f@lex.la>
86 lines
2.1 KiB
YAML
86 lines
2.1 KiB
YAML
{{- $previous := lookup "apps/v1" "DaemonSet" .Release.Namespace "cozystack-api" }}
|
|
{{- if $previous }}
|
|
---
|
|
apiVersion: batch/v1
|
|
kind: Job
|
|
metadata:
|
|
name: "cozystack-api-hook"
|
|
annotations:
|
|
helm.sh/hook: post-upgrade
|
|
helm.sh/hook-weight: "1"
|
|
helm.sh/hook-delete-policy: hook-succeeded,before-hook-creation
|
|
spec:
|
|
template:
|
|
metadata:
|
|
labels:
|
|
policy.cozystack.io/allow-to-apiserver: "true"
|
|
spec:
|
|
serviceAccountName: "cozystack-api-hook"
|
|
securityContext:
|
|
runAsNonRoot: true
|
|
runAsUser: 65534
|
|
seccompProfile:
|
|
type: RuntimeDefault
|
|
containers:
|
|
- name: kubectl
|
|
image: docker.io/alpine/k8s:1.36.2
|
|
securityContext:
|
|
allowPrivilegeEscalation: false
|
|
capabilities:
|
|
drop: ["ALL"]
|
|
command:
|
|
- sh
|
|
args:
|
|
- -exc
|
|
- |-
|
|
kubectl --namespace={{ .Release.Namespace }} delete --ignore-not-found \
|
|
daemonsets.apps cozystack-api
|
|
restartPolicy: Never
|
|
---
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
kind: Role
|
|
metadata:
|
|
annotations:
|
|
helm.sh/hook: post-upgrade
|
|
helm.sh/hook-weight: "1"
|
|
helm.sh/hook-delete-policy: hook-succeeded,before-hook-creation
|
|
name: "cozystack-api-hook"
|
|
rules:
|
|
- apiGroups:
|
|
- "apps"
|
|
resources:
|
|
- "daemonsets"
|
|
verbs:
|
|
- get
|
|
- delete
|
|
resourceNames:
|
|
- "cozystack-api"
|
|
---
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
kind: RoleBinding
|
|
metadata:
|
|
name: "cozystack-api-hook"
|
|
annotations:
|
|
helm.sh/hook: post-upgrade
|
|
helm.sh/hook-weight: "1"
|
|
helm.sh/hook-delete-policy: hook-succeeded,before-hook-creation
|
|
roleRef:
|
|
apiGroup: rbac.authorization.k8s.io
|
|
kind: Role
|
|
name: "cozystack-api-hook"
|
|
subjects:
|
|
- kind: ServiceAccount
|
|
name: "cozystack-api-hook"
|
|
namespace: "{{ .Release.Namespace }}"
|
|
---
|
|
apiVersion: v1
|
|
kind: ServiceAccount
|
|
metadata:
|
|
name: "cozystack-api-hook"
|
|
annotations:
|
|
helm.sh/hook: post-upgrade
|
|
helm.sh/hook-weight: "1"
|
|
helm.sh/hook-delete-policy: hook-succeeded,before-hook-creation
|
|
{{- end }}
|
|
|