|
2 | 2 | set -euo pipefail |
3 | 3 |
|
4 | 4 | # Always provision cert-manager TLS assets in a fresh environment. |
5 | | -# Installs cert-manager (v1.19.1), waits for webhook readiness, then creates: |
| 5 | +# Installs cert-manager, waits for webhook readiness, then creates: |
6 | 6 | # - Self-signed Issuer |
7 | 7 | # - CA Certificate (secret) |
8 | 8 | # - CA Issuer |
9 | 9 | # - Server & Search Certificates |
10 | 10 | # - CA ConfigMap (optional consumer) |
11 | 11 |
|
| 12 | +: "${CERT_MANAGER_NAMESPACE:=cert-manager}" |
| 13 | + |
12 | 14 | required=(K8S_CTX MDB_NS MDB_RESOURCE_NAME MDB_TLS_CA_SECRET_NAME MDB_TLS_SERVER_CERT_SECRET_NAME MDB_SEARCH_TLS_SECRET_NAME MDB_TLS_CA_CONFIGMAP_NAME) |
13 | 15 | missing=() |
14 | 16 | for v in "${required[@]}"; do [[ -z "${!v:-}" ]] && missing+=("$v"); done |
15 | 17 | if (( ${#missing[@]} )); then |
16 | 18 | echo "Missing required env vars: ${missing[*]}" >&2; exit 1; fi |
17 | 19 |
|
18 | | -CERT_MANAGER_VERSION="${CERT_MANAGER_VERSION:-v1.19.1}" |
19 | | - |
20 | 20 | install_cert_manager() { |
21 | | - echo "Installing cert-manager ${CERT_MANAGER_VERSION}..." |
22 | | - kubectl apply -f "https://github.com/cert-manager/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.crds.yaml" |
23 | | - helm repo add jetstack https://charts.jetstack.io >/dev/null 2>&1 || true |
24 | | - helm repo update >/dev/null 2>&1 || true |
| 21 | + echo "Installing cert-manager..." |
| 22 | + helm repo add jetstack https://charts.jetstack.io --force-update >/dev/null 2>&1 || true |
25 | 23 | helm upgrade --install cert-manager jetstack/cert-manager \ |
26 | | - -n cert-manager --create-namespace \ |
27 | | - --version "${CERT_MANAGER_VERSION}" \ |
28 | | - --set installCRDs=false \ |
29 | | - --set global.leaderElection.namespace=cert-manager \ |
30 | | - --set webhook.timeoutSeconds=30 1>/dev/null |
| 24 | + --kube-context "${K8S_CTX}" \ |
| 25 | + --namespace "${CERT_MANAGER_NAMESPACE}" \ |
| 26 | + --create-namespace \ |
| 27 | + --set crds.enabled=true 1>/dev/null |
31 | 28 |
|
32 | 29 | echo "Waiting for cert-manager deployments to be Available..." |
33 | 30 | for dep in cert-manager cert-manager-cainjector cert-manager-webhook; do |
34 | | - kubectl wait -n cert-manager --for=condition=Available deployment/${dep} --timeout=300s || { |
| 31 | + kubectl --context "${K8S_CTX}" wait -n "${CERT_MANAGER_NAMESPACE}" --for=condition=Available deployment/${dep} --timeout=300s || { |
35 | 32 | echo "ERROR: deployment ${dep} not Available" >&2; exit 1; } |
36 | 33 | done |
37 | 34 |
|
38 | 35 | echo "Waiting for webhook service existence..." |
39 | 36 | local tries=0 max_tries=30 |
40 | | - until kubectl get svc cert-manager-webhook -n cert-manager >/dev/null 2>&1; do |
| 37 | + until kubectl --context "${K8S_CTX}" get svc cert-manager-webhook -n "${CERT_MANAGER_NAMESPACE}" >/dev/null 2>&1; do |
41 | 38 | ((tries++)); [[ $tries -ge $max_tries ]] && { echo "ERROR: cert-manager-webhook service not found" >&2; exit 1; } |
42 | 39 | sleep 5 |
43 | 40 | done |
44 | 41 |
|
45 | 42 | echo "Waiting for webhook endpoints to have at least one address..." |
46 | 43 | tries=0 |
47 | | - until [[ $(kubectl get endpoints cert-manager-webhook -n cert-manager -o jsonpath='{.subsets[0].addresses[0].ip}' 2>/dev/null || echo '') != '' ]]; do |
| 44 | + until [[ $(kubectl --context "${K8S_CTX}" get endpoints cert-manager-webhook -n "${CERT_MANAGER_NAMESPACE}" -o jsonpath='{.subsets[0].addresses[0].ip}' 2>/dev/null || echo '') != '' ]]; do |
48 | 45 | ((tries++)); [[ $tries -ge $max_tries ]] && { echo "ERROR: webhook endpoints have no addresses" >&2; exit 1; } |
49 | 46 | sleep 5 |
50 | 47 | done |
|
184 | 181 | if ! kubectl get configmap "${MDB_TLS_CA_CONFIGMAP_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" >/dev/null 2>&1; then |
185 | 182 | ca_b64=$(kubectl get secret "${MDB_TLS_CA_SECRET_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" -o jsonpath='{.data.ca\.crt}' || true) |
186 | 183 | if [[ -n "$ca_b64" ]]; then |
187 | | - printf '%s' "$ca_b64" | base64 --decode > /tmp/ca.crt |
188 | | - kubectl create configmap "${MDB_TLS_CA_CONFIGMAP_NAME}" --from-file=ca-pem=/tmp/ca.crt --from-file=ca.crt=/tmp/ca.crt --dry-run=client -o yaml | kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - |
189 | | - rm -f /tmp/ca.crt |
| 184 | + tmp_ca_file="$(mktemp)" |
| 185 | + printf '%s' "$ca_b64" | base64 --decode > "${tmp_ca_file}" |
| 186 | + kubectl create configmap "${MDB_TLS_CA_CONFIGMAP_NAME}" \ |
| 187 | + --context "${K8S_CTX}" \ |
| 188 | + --from-file=ca-pem="${tmp_ca_file}" \ |
| 189 | + --from-file=ca.crt="${tmp_ca_file}" \ |
| 190 | + --dry-run=client -o yaml \ |
| 191 | + | kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - |
| 192 | + rm -f "${tmp_ca_file}" |
190 | 193 | fi |
191 | 194 | fi |
192 | 195 |
|
193 | | -echo "Community cert-manager TLS assets ready (v${CERT_MANAGER_VERSION})." |
| 196 | +echo "Community cert-manager TLS assets ready." |
0 commit comments