#!/bin/bash set -e usage() { cat <> "${tmpdir}"/csr.conf [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 = ${service} DNS.2 = ${service}.${namespace} DNS.3 = ${service}.${namespace}.svc EOF openssl genrsa -out "${tmpdir}"/server-key.pem 2048 openssl req -new -key "${tmpdir}"/server-key.pem -subj "/CN=${service}.${namespace}.svc" -out "${tmpdir}"/server.csr -config "${tmpdir}"/csr.conf # clean-up any previously created CSR for our service. Ignore errors if not present. kubectl delete csr ${csrName} 2>/dev/null || true # create server cert/key CSR and send to k8s API cat <&2 exit 1 fi echo "${serverCert}" | openssl base64 -d -A -out "${tmpdir}"/server-cert.pem # create the secret with CA cert and server cert/key kubectl create secret generic ${secret} \ --from-file=key.pem="${tmpdir}"/server-key.pem \ --from-file=cert.pem="${tmpdir}"/server-cert.pem \ --dry-run -o yaml | kubectl -n ${namespace} apply -f -