Setup custom certificates for a site
We already take care of the certificate management, but if you want to use your own certificates you can do so by configuring them manually.
There is a one-to-one relationship between a certificate and a site. The certificates are managed by Cert Manager and are signed using Let’s Encrypt , a free certificate provider.
NOTE
For now this feature is only available from the command line, so go ahead and connect to your cluster .
To make things easier, let’s define some helpful constants that will simplify our commands: The Project Namespace
and the Site Name
. Both can be found in the Bitpoke App on the
Runtime page
of the site.
PROJECT_NS=<your_namespace>
SITE_NAME=<your_site_name>
How to use custom certificates
In order to use a custom certificate, you need to do the following steps:
1. Upload the certificates
The certificate should include all the Domain names from the Routing section.
You should have 2 files: one containing the private key (tls.key
) and one containing the certificates bundle (tls.crt
).
Both should be in PEM format. In other words, your certificate should start with -----BEGIN CERTIFICATE-----
and end with -----END CERTIFICATE-----
and your key file should begin
with -----BEGIN RSA PRIVATE KEY-----
and end with -----END RSA PRIVATE KEY-----
.
Let’s name the new certificate (any name is good):
CERTIFICATE_NAME=$SITE_NAME-custom-tls
Create it.
kubectl -n $PROJECT_NS create secret tls $CERTIFICATE_NAME --cert=tls.crt --key=tls.key
2. Disable the certificate automatic management
In order to set a custom certificate, you have to tell Cert Manager that you don’t want to generate a certificate for your site.
kubectl -n $PROJECT_NS annotate wp $SITE_NAME site.presslabs.com/custom-certificate=""
3. Set the new certificate
Once the certificate is uploaded, you can set it to be used by the site.
kubectl -n $PROJECT_NS patch wp $SITE_NAME --type=merge -p "{\"spec\": { \"tlsSecretRef\": \"$CERTIFICATE_NAME\"}}"
4. Optional: Force ingress-nginx to reload certificates
In some cases, the certificate is not used right away by ingress-nginx and you have to reset the ingress controller.
How to re-enable the managed certificates
If you want to use again the managed certificates by Cert Manager , run the following command to remove the mark from your site:
kubectl -n $PROJECT_NS annotate wp $SITE_NAME site.presslabs.com/custom-certificate-