mirror of
				https://github.com/optim-enterprises-bv/openstack-helm.git
				synced 2025-10-31 18:27:53 +00:00 
			
		
		
		
	 ca47e3c974
			
		
	
	ca47e3c974
	
	
	
		
			
			This reverts commit 2ec17153c6.
Reason for revert: resolved bug with cluster issuer versioning
Depends-on: https://review.opendev.org/c/openstack/openstack-helm-infra/+/772814
Co-authored-by: Sangeet Gupta <sg774j@att.com>
Change-Id: If7ebef1cebbe5b1d97ac530dd7136e3fc9232b21
		
	
		
			
				
	
	
		
			171 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| set -eux
 | |
| 
 | |
| : ${CERT_MANAGER_VERSION:="v1.2.0"}
 | |
| 
 | |
| cert_path="/etc/openstack-helm"
 | |
| ca_cert_root="$cert_path/certs/ca"
 | |
| 
 | |
| function check_cert {
 | |
|   # $1: the certificate file, e.g. ca.pem
 | |
|   # $2: the key file, e.g. ca-key.pem
 | |
|   local cert="$(openssl x509 -noout -modulus -in $1)"
 | |
|   local key="$(openssl rsa -noout -modulus -in $2)"
 | |
|   if ! [ "$cert" = "$key" ]; then
 | |
|     echo "Failure: tls private key does not match cert"
 | |
|     exit 1
 | |
|   else
 | |
|     echo "Pass: $cert is valid with $key"
 | |
|   fi
 | |
| }
 | |
| 
 | |
| # Download cfssl and cfssljson if they are not available on the system
 | |
| if type cfssl && type cfssljson; then
 | |
|   echo "cfssl and cfssljson found - skipping installation"
 | |
| else
 | |
|   echo "installing cfssl and cfssljson"
 | |
|   temp_bin=$(mktemp --directory)
 | |
|   cd $temp_bin
 | |
|   CFSSLURL=https://pkg.cfssl.org/R1.2
 | |
|   curl --retry 3 --retry-connrefused -sSL -o cfssl $CFSSLURL/cfssl_linux-amd64
 | |
|   curl --retry 3 --retry-connrefused -sSL -o cfssljson $CFSSLURL/cfssljson_linux-amd64
 | |
|   chmod +x {cfssl,cfssljson}
 | |
|   export PATH=$PATH:$temp_bin
 | |
| fi
 | |
| 
 | |
| # Sets up a directory for the certs
 | |
| sudo rm -rf $cert_path
 | |
| sudo mkdir -p $ca_cert_root
 | |
| sudo chmod -R go+w $cert_path
 | |
| 
 | |
| cd $ca_cert_root
 | |
| 
 | |
| cat > ca-csr.json <<EOF
 | |
| {
 | |
|   "CN": "ACME Company",
 | |
|   "key": {
 | |
|     "algo": "rsa",
 | |
|     "size": 4096
 | |
|   },
 | |
|   "names": [
 | |
|     {
 | |
|       "C": "US",
 | |
|       "L": "SomeState",
 | |
|       "ST": "SomeCity",
 | |
|       "O": "SomeOrg",
 | |
|       "OU": "SomeUnit"
 | |
|     }
 | |
|   ]
 | |
| }
 | |
| EOF
 | |
| 
 | |
| cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
 | |
| check_cert ca.pem ca-key.pem
 | |
| 
 | |
| 
 | |
| cat > cfssl.json <<EOF
 | |
| {
 | |
|   "signing": {
 | |
|     "default": {
 | |
|       "expiry": "8760h"
 | |
|     },
 | |
|     "profiles": {
 | |
|       "intermediate_ca": {
 | |
|         "expiry": "8760h",
 | |
|         "usages": [
 | |
|           "signing",
 | |
|           "digital signature",
 | |
|           "cert sign",
 | |
|           "crl sign",
 | |
|           "key encipherment",
 | |
|           "server auth",
 | |
|           "client auth"
 | |
|         ],
 | |
|         "ca_constraint": {
 | |
|           "is_ca": true
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| EOF
 | |
| 
 | |
| cat > intermediate-ca.json <<EOF
 | |
| {
 | |
|   "CN": "OpenStack Helm CA",
 | |
|   "key": {
 | |
|     "algo": "rsa",
 | |
|     "size": 4096
 | |
|   },
 | |
|   "names": [
 | |
|     {
 | |
|       "C": "GB",
 | |
|       "L": "Space",
 | |
|       "ST": "Earth",
 | |
|       "O": "OSH",
 | |
|       "OU": "OSH"
 | |
|     }
 | |
|   ],
 | |
|   "ca": {
 | |
|     "expiry": "8760h"
 | |
|   }
 | |
| }
 | |
| EOF
 | |
| 
 | |
| cfssl gencert -initca intermediate-ca.json | cfssljson -bare intermediate-ca -
 | |
| cfssl sign -ca ca.pem -ca-key ca-key.pem -config cfssl.json -profile intermediate_ca \
 | |
|   intermediate-ca.csr | cfssljson -bare intermediate-ca
 | |
| check_cert intermediate-ca.pem intermediate-ca-key.pem
 | |
| 
 | |
| kubectl create ns cert-manager
 | |
| helm repo add jetstack https://charts.jetstack.io
 | |
| helm repo update
 | |
| 
 | |
| # helm 2 command
 | |
| helm install --name cert-manager --namespace cert-manager \
 | |
|   --version ${CERT_MANAGER_VERSION} jetstack/cert-manager \
 | |
|   --set installCRDs=true \
 | |
|   --set extraArgs[0]="--enable-certificate-owner-ref=true"
 | |
| 
 | |
| # helm 3 command
 | |
| # helm install cert-manager jetstack/cert-manager --namespace cert-manager \
 | |
| #   --version ${CERT_MANAGER_VERSION} \
 | |
| #   --set installCRDs=true \
 | |
| #   --set extraArgs[0]="--enable-certificate-owner-ref=true"
 | |
| 
 | |
| helm repo remove jetstack
 | |
| 
 | |
| key=$(cat /etc/openstack-helm/certs/ca/ca-key.pem | base64 | tr -d "\n")
 | |
| crt=$(cat /etc/openstack-helm/certs/ca/ca.pem | base64 | tr -d "\n")
 | |
| 
 | |
| cat > /tmp/ca-issuers.yaml <<EOF
 | |
| ---
 | |
| apiVersion: v1
 | |
| kind: Secret
 | |
| metadata:
 | |
|   name: ca-key-pair
 | |
|   namespace: cert-manager
 | |
| data:
 | |
|   tls.crt: $crt
 | |
|   tls.key: $key
 | |
| ---
 | |
| apiVersion: cert-manager.io/v1
 | |
| kind: ClusterIssuer
 | |
| metadata:
 | |
|   name: ca-issuer
 | |
| spec:
 | |
|   ca:
 | |
|     secretName: ca-key-pair
 | |
| EOF
 | |
| 
 | |
| 
 | |
| kubectl wait --for=condition=Ready pods --all -n cert-manager --timeout=180s
 | |
| 
 | |
| # Per [0], put a sleep here to guard against the error - failed calling webhook "webhook.cert-manager.io"
 | |
| # [0] https://github.com/jetstack/cert-manager/issues/2602
 | |
| sleep 45
 | |
| 
 | |
| kubectl create ns openstack
 | |
| kubectl apply -f /tmp/ca-issuers.yaml
 |