diff --git a/README.md b/README.md index 3055aa0..0980d3a 100644 --- a/README.md +++ b/README.md @@ -36,11 +36,13 @@ make make install ``` -Install lego. +Install the acme terraform provider. ```sh -curl -Lo /tmp/lego.tgz https://github.com/go-acme/lego/releases/download/v4.3.1/lego_v4.3.1_linux_amd64.tar.gz -sudo tar zxvf /tmp/lego.tgz -C /usr/local/bin lego +git clone https://github.com/vancluever/terraform-provider-acme +cd terraform-provider-acme +mkdir -p ~/.terraform.d/plugins/vancluever/acme/2.3.0/linux_amd64/ +GOBIN=$HOME/.terraform.d/plugins/vancluever/acme/2.3.0/linux_amd64/ make ``` Create the template files from their samples. @@ -57,6 +59,12 @@ Install the required Ansible collections. ansible-galaxy collection install -r ansible/requirements.yaml ``` +Initialize Terraform. + +```sh +terraform init +``` + ### On the server Install libvirt. diff --git a/acme.tf b/acme.tf new file mode 100644 index 0000000..87b358a --- /dev/null +++ b/acme.tf @@ -0,0 +1,20 @@ +resource "tls_private_key" "account_key" { + algorithm = "RSA" + rsa_bits = 2048 +} + +resource "acme_registration" "cluster_reg" { + account_key_pem = tls_private_key.account_key.private_key_pem + email_address = var.acme_account_email +} + +resource "acme_certificate" "cluster_cert" { + account_key_pem = acme_registration.cluster_reg.account_key_pem + common_name = "api.${local.network_domain}" + subject_alternative_names = ["*.apps.${local.network_domain}"] + key_type = "2048" // RSA 2048 + + dns_challenge { + provider = "gandiv5" + } +} diff --git a/cluster b/cluster index 1d78f1e..41a5f6f 100755 --- a/cluster +++ b/cluster @@ -130,24 +130,21 @@ EOF function post_install_le () { local cluster_name="${1:-}" - # Generated by terraform - source "$cluster_name/dns.env" + cert_dn="$(openssl x509 -noout -subject -in "$cluster_name/cluster.crt")" + cert_cn="${cert_dn#subject=CN = }" - # Get a certificate from Let's Encrypt - lego -m "nmasse@redhat.com" -d "$LE_API_HOSTNAME" -d "$LE_ROUTER_HOSTNAME" -a --dns gandiv5 run --no-bundle - # Deploy certificate to ingress - oc --insecure-skip-tls-verify --kubeconfig="$cluster_name/auth/kubeconfig" create secret tls router-certs-$(date "+%Y-%m-%d") --cert=.lego/certificates/$LE_API_HOSTNAME.crt --key=.lego/certificates/$LE_API_HOSTNAME.key -n openshift-ingress --dry-run -o yaml > "$cluster_name/router-certs.yaml" + oc --insecure-skip-tls-verify --kubeconfig="$cluster_name/auth/kubeconfig" create secret tls router-certs-$(date "+%Y-%m-%d") --cert="$cluster_name/cluster.crt" --key="$cluster_name/cluster.key" -n openshift-ingress --dry-run -o yaml > "$cluster_name/router-certs.yaml" oc --insecure-skip-tls-verify --kubeconfig="$cluster_name/auth/kubeconfig" apply -f "$cluster_name/router-certs.yaml" -n openshift-ingress oc --insecure-skip-tls-verify --kubeconfig="$cluster_name/auth/kubeconfig" patch ingresscontroller default -n openshift-ingress-operator --type=merge --patch-file=/dev/fd/0 < "$cluster_name/api-certs.yaml" + oc --insecure-skip-tls-verify --kubeconfig="$cluster_name/auth/kubeconfig" create secret tls api-certs-$(date "+%Y-%m-%d") --cert="$cluster_name/cluster.crt" --key="$cluster_name/cluster.key" -n openshift-config --dry-run -o yaml > "$cluster_name/api-certs.yaml" oc --insecure-skip-tls-verify --kubeconfig="$cluster_name/auth/kubeconfig" apply -f "$cluster_name/api-certs.yaml" -n openshift-config oc --insecure-skip-tls-verify --kubeconfig="$cluster_name/auth/kubeconfig" patch apiserver cluster --type=merge --patch-file=/dev/fd/0 <