apiVersion: v1 kind: ServiceAccount metadata: name: certs-creator --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: secret-creator rules: - apiGroups: [ "" ] resources: [ "secrets" ] verbs: [ "create", "patch" ] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: certs-creator subjects: - kind: ServiceAccount name: certs-creator roleRef: kind: Role name: secret-creator apiGroup: rbac.authorization.k8s.io --- apiVersion: batch/v1 kind: Job metadata: name: create-certs spec: template: spec: restartPolicy: OnFailure serviceAccountName: certs-creator containers: - command: - /usr/local/bin/bash - -ecx - | apk add openssl curl export APISERVER=https://kubernetes.default.svc SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount export NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace) TOKEN=$(cat ${SERVICEACCOUNT}/token) CACERT=${SERVICEACCOUNT}/ca.crt function createKey() { USER=$1 openssl genrsa -out ${USER}.key 2048 echo "created ${USER}.key" } function createSigningRequest() { USER=$1 openssl req -new -key ${USER}.key -extensions 'v3_req' -out ${USER}.csr -config <(generateServerConfig) echo "created ${USER}.csr" } function generateServerConfig() { cat<