Skip to content

Instantly share code, notes, and snippets.

@marunrun
Last active March 15, 2023 02:24
Show Gist options
  • Save marunrun/07f02134b2fc678901176d9e01145beb to your computer and use it in GitHub Desktop.
Save marunrun/07f02134b2fc678901176d9e01145beb to your computer and use it in GitHub Desktop.
k8s webhook tsl cert generate
#!/usr/bin/env bash
set -o errexit
export APP="${1:-xxl-agent-injector-webhook}"
export NAMESPACE="${2:-matrixio}"
export CSR_NAME="${APP}.${NAMESPACE}.svc"
echo "... creating ${app}.key"
openssl genrsa -out ${APP}.key 2048
echo "... creating ${app}.csr"
cat >csr.conf<<EOF
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = ${APP}
DNS.2 = ${APP}.${NAMESPACE}
DNS.3 = ${CSR_NAME}
DNS.4 = ${CSR_NAME}.cluster.local
IP.1 = 172.16.7.26
EOF
echo "openssl req -new -key ${APP}.key -subj \"/CN=${CSR_NAME}\" -out ${APP}.csr -config csr.conf"
openssl req -new -key ${APP}.key -subj "/CN=${CSR_NAME}" -out ${APP}.csr -config csr.conf
echo "... deleting existing csr, if any"
echo "kubectl delete csr ${CSR_NAME} || :"
kubectl delete csr ${CSR_NAME} || :
echo "... creating kubernetes CSR object"
echo "kubectl create -f -"
kubectl create -f - <<EOF
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
name: ${CSR_NAME}
spec:
groups:
- system:authenticated
request: $(cat ${APP}.csr | base64 | tr -d '\n')
usages:
- digital signature
- key encipherment
- server auth
EOF
SECONDS=0
while true; do
echo "... waiting for csr to be present in kubernetes"
echo "kubectl get csr ${CSR_NAME}"
kubectl get csr ${CSR_NAME} > /dev/null 2>&1
if [ "$?" -eq 0 ]; then
break
fi
if [[ $SECONDS -ge 60 ]]; then
echo "[!] timed out waiting for csr"
exit 1
fi
sleep 2
done
kubectl certificate approve ${CSR_NAME}
SECONDS=0
while true; do
echo "... waiting for serverCert to be present in kubernetes"
echo "kubectl get csr ${CSR_NAME} -o jsonpath='{.status.certificate}'"
serverCert=$(kubectl get csr ${CSR_NAME} -o jsonpath='{.status.certificate}')
if [[ $serverCert != "" ]]; then
break
fi
if [[ $SECONDS -ge 60 ]]; then
echo "[!] timed out waiting for serverCert"
exit 1
fi
sleep 2
done
echo "... creating ${app}.pem cert file"
echo "\$serverCert | openssl base64 -d -A -out ${APP}.pem"
echo ${serverCert} | openssl base64 -d -A -out ${APP}.pem
@marunrun
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment