diff --git a/hooks/hook.env.example b/hooks/hook.env.example new file mode 100644 index 0000000000..396af2069f --- /dev/null +++ b/hooks/hook.env.example @@ -0,0 +1,9 @@ +K8S_USERNAME_PREFIX="" +NAMESPACE_PREFIX="" +NETWORK_POLICY_ALLOW_CIDR="127.0.0.1/32" +IDP_ISSUER_URL="https://idp.example.com/auth/realms/main/protocol/openid-connect/token" +CLIENT_ID="changeme" +CLIENT_SECRET="changeme" +# Set to empty string or remove if not using a private registry +IMAGE_PULL_SECRET=private-docker-registry +REGISTRY_DOCKER_CONFIG_JSON="/some/path/to/docker/config.json" \ No newline at end of file diff --git a/hooks/k8s-bootstrap-job-pod-reaper.sh b/hooks/k8s-bootstrap-job-pod-reaper.sh new file mode 100755 index 0000000000..577079d7cc --- /dev/null +++ b/hooks/k8s-bootstrap-job-pod-reaper.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +ONDEMAND_USERNAME="$1" +if [ "x${ONDEMAND_USERNAME}" = "x" ]; then + echo "Must specify username" + exit 1 +fi +HOOK_ENV="$2" +if [ "x${HOOK_ENV}" = "x" ]; then + echo "Must specify hook.env path" + exit 1 +fi + +set -e + +source $HOOK_ENV + +NAMESPACE="${NAMESPACE_PREFIX}${ONDEMAND_USERNAME}" + +TMPFILE=$(mktemp "/tmp/k8-bootstrap-job-pod-reaper-${ONDEMAND_USERNAME}.XXXXXX") +cat > "$TMPFILE" < "$NAMESPACE_TMPFILE" + +NETWORK_POLICY_TMPFILE=$(mktemp "/tmp/k8-bootstrap-network-policy-${ONDEMAND_USERNAME}.XXXXXX") +cat ${YAML_DIR}/network-policy.yaml | envsubst > "$NETWORK_POLICY_TMPFILE" + +ROLEBINDING_TMPFILE=$(mktemp "/tmp/k8-bootstrap-rolebinding-${ONDEMAND_USERNAME}.XXXXXX") +cat ${YAML_DIR}/rolebinding.yaml | envsubst > "$ROLEBINDING_TMPFILE" + +TMPFILE=$(mktemp "/tmp/k8-ondemand-bootstrap-${ONDEMAND_USERNAME}.XXXXXX") +cat "$NAMESPACE_TMPFILE" "$NETWORK_POLICY_TMPFILE" "$ROLEBINDING_TMPFILE" > "$TMPFILE" +kubectl apply -f "$TMPFILE" +rm -f "$NAMESPACE_TMPFILE" "$NETWORK_POLICY_TMPFILE" "$ROLEBINDING_TMPFILE" "$TMPFILE" + +if [ "x$IMAGE_PULL_SECRET" != "x" ]; then + kubectl create secret generic "$IMAGE_PULL_SECRET" --from-file=.dockerconfigjson="$REGISTRY_DOCKER_CONFIG_JSON" --type=kubernetes.io/dockerconfigjson -n "$NAMESPACE" + kubectl patch serviceaccount default -n "$NAMESPACE" -p "{\"imagePullSecrets\": [{\"name\": \"${IMAGE_PULL_SECRET}\"}]}" +fi diff --git a/hooks/k8s-bootstrap-pod-security-policy.sh b/hooks/k8s-bootstrap-pod-security-policy.sh new file mode 100755 index 0000000000..cc9281d879 --- /dev/null +++ b/hooks/k8s-bootstrap-pod-security-policy.sh @@ -0,0 +1,111 @@ +#!/bin/bash + +ONDEMAND_USERNAME="$1" +if [ "x${ONDEMAND_USERNAME}" = "x" ]; then + echo "Must specify username" + exit 1 +fi +HOOK_ENV="$2" +if [ "x${HOOK_ENV}" = "x" ]; then + echo "Must specify hook.env path" + exit 1 +fi + +set -e + +source $HOOK_ENV + +TMPFILE=$(mktemp "/tmp/k8-ondemand-bootstrap-${ONDEMAND_USERNAME}.XXXXXX") +PASSWD=$(getent passwd "$ONDEMAND_USERNAME") +if ! [[ "$PASSWD" =~ "${ONDEMAND_USERNAME}:"* ]]; then + echo "level=error msg=\"Unable to perform lookup of user\" user=$ONDEMAND_USERNAME" + exit 1 +fi +USER_UID=$(echo "$PASSWD" | cut -d':' -f3) +USER_GID=$(echo "$PASSWD" | cut -d':' -f4) +NAMESPACE="${NAMESPACE_PREFIX}${ONDEMAND_USERNAME}" + +cat > "$TMPFILE" <