Skip to content

Commit

Permalink
Upgrade cert-manager to the latest version
Browse files Browse the repository at this point in the history
The older version we used had a too old version of the ACME client, which has been blocked
due to excessive calls.
  • Loading branch information
anton-johansson committed Dec 24, 2019
1 parent 11726e3 commit 8af74c2
Show file tree
Hide file tree
Showing 12 changed files with 146 additions and 177 deletions.
5 changes: 0 additions & 5 deletions services/10-cluster/cert-manager/10-namespace.yaml

This file was deleted.

78 changes: 0 additions & 78 deletions services/10-cluster/cert-manager/20-crds.yaml

This file was deleted.

43 changes: 0 additions & 43 deletions services/10-cluster/cert-manager/30-rbac.yaml

This file was deleted.

35 changes: 0 additions & 35 deletions services/10-cluster/cert-manager/40-deployment.yaml

This file was deleted.

12 changes: 0 additions & 12 deletions services/10-cluster/cert-manager/50-issuer.yaml

This file was deleted.

78 changes: 78 additions & 0 deletions services/10-cluster/cert-manager/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Certificate manager

I'm using [cert-manager](https://github.com/jetstack/cert-manager) to automatically get SSL certificates for our ingresses. I configure the certificate manager to use Lets Encrypt as certificate issuer.


## Installation

We use Helm 3 to install cert-manager:

```
$ kubectl apply --validate=false -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.12/deploy/manifests/00-crds.yaml
$ kubectl create namespace cert-manager
$ helm repo add jetstack https://charts.jetstack.io
$ helm install cert-manager jetstack/cert-manager --namespace cert-manager --version v0.12.0 --values helm-values.yaml
$ kubectl apply -f issuers.yaml
```

For any future upgrades, this command can be used:

```
$ helm upgrade cert-manager jetstack/cert-manager --namespace cert-manager --version v0.12.0 --values helm-values.yaml
```

Note: I've disabled the `webhook` component, because I didn't get it to work properly. It's not recommended, but it's viable option. Read more [here](https://cert-manager.io/docs/installation/compatibility/#disabling-webhook).


## Using it

To use dynamic SSL certificates, you create `Certificate` resources. These resources will in turn generate `Secret` resources that you can use in your tls-configuration. Here is an example:

```yaml
---
kind: Certificate
apiVersion: cert-manager.io/v1alpha2
metadata:
name: some-service
namespace: test
spec:
secretName: some-service-certificate
dnsNames:
- some-external-domain.com
issuerRef:
name: letsencrypt
kind: ClusterIssuer
group: cert-manager.io

---
kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:
name: some-service
namespace: test
labels:
app.kubernetes.io/name: some-service
annotations:
kubernetes.io/ingress.class: external
spec:
rules:
- host: some-external-domain.com
http:
paths:
- path: /
backend:
serviceName: some-service
servicePort: 8080
tls:
- secretName: some-service-certificate
hosts:
- some-external-domain.com
```


### Issuers

I have the following cluster issuers:

* `letsencrypt`
* `letsencrypt-staging` (useful only for testing cert-manager upgrades and similar)
3 changes: 3 additions & 0 deletions services/10-cluster/cert-manager/helm-values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
webhook:
enabled: false

31 changes: 31 additions & 0 deletions services/10-cluster/cert-manager/issuers.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
---
kind: ClusterIssuer
apiVersion: cert-manager.io/v1alpha2
metadata:
name: letsencrypt-staging
spec:
acme:
server: https://acme-staging-v02.api.letsencrypt.org/directory
email: hello@anton-johansson.com
privateKeySecretRef:
name: letsencrypt-staging
solvers:
- http01:
ingress:
class: external

---
kind: ClusterIssuer
apiVersion: cert-manager.io/v1alpha2
metadata:
name: letsencrypt
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: hello@anton-johansson.com
privateKeySecretRef:
name: letsencrypt
solvers:
- http01:
ingress:
class: external
16 changes: 16 additions & 0 deletions services/20-core/home-assistant/40-certificate.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
kind: Certificate
apiVersion: cert-manager.io/v1alpha2
metadata:
name: home-assistant
namespace: home-assistant
labels:
app.kubernetes.io/name: home-assistant
spec:
secretName: home-assistant-certificate
dnsNames:
- home.anton-johansson.com
issuerRef:
name: letsencrypt
kind: ClusterIssuer
group: cert-manager.io
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ metadata:
app.kubernetes.io/name: home-assistant
annotations:
kubernetes.io/ingress.class: external
certmanager.k8s.io/cluster-issuer: letsencrypt
spec:
rules:
- host: home.anton-johansson.com
Expand All @@ -19,6 +18,6 @@ spec:
serviceName: home-assistant
servicePort: 8123
tls:
- secretName: home-assistant-cert
- secretName: home-assistant-certificate
hosts:
- home.anton-johansson.com
16 changes: 16 additions & 0 deletions services/30-metrics/grafana/50-certificate.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
kind: Certificate
apiVersion: cert-manager.io/v1alpha2
metadata:
name: grafana
namespace: grafana
labels:
app.kubernetes.io/name: grafana
spec:
secretName: grafana-certificate
dnsNames:
- grafana.anton-johansson.com
issuerRef:
name: letsencrypt
kind: ClusterIssuer
group: cert-manager.io
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ metadata:
app.kubernetes.io/name: grafana
annotations:
kubernetes.io/ingress.class: external
certmanager.k8s.io/cluster-issuer: letsencrypt
spec:
rules:
- host: grafana.anton-johansson.com
Expand All @@ -19,6 +18,6 @@ spec:
serviceName: grafana
servicePort: 3000
tls:
- secretName: grafana-cert
- secretName: grafana-certificate
hosts:
- grafana.anton-johansson.com

0 comments on commit 8af74c2

Please sign in to comment.