コンテンツにスキップ

12. cert-manager

cert-managerを使うと証明書の発行と更新を自動化できる。

インストール

1
2
3
$ helm repo add jetstack https://charts.jetstack.io
$ helm repo update
$ helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set crds.enabled=true

動作確認

1
2
3
4
5
$ kubectl get pods -n cert-manager
NAME                                       READY   STATUS    RESTARTS   AGE
cert-manager-5f885f9c55-4wqd2              1/1     Running   0          109s
cert-manager-cainjector-7f45ffb9d5-cx5ch   1/1     Running   0          109s
cert-manager-webhook-7944648944-k8wzz      1/1     Running   0          109s

ClusterIssuerのリソースを作成する

自己署名証明書を発行するCAを定義する。

k8s/cluster-issuer.yaml
1
2
3
4
5
6
7
# 認証局(CA: Certificate Authority)を定義するリソース
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: selfsigned # この認証局は自己署名証明書を発行する
spec:
  selfSigned: {}

Certificateのリソースを作成する

本来はdnsNamesにドメインを指定するのだが、自己署名証明書を使う場合はipAddressesにIPアドレスをハードコーディングしないといけない。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: app-tls
  namespace: app
spec:
  secretName: app-tls
  issuerRef:
    name: selfsigned
    kind: ClusterIssuer
  ipAddresses:
    - xxx.xxx.xxx.xxx
# dnsNames:
#  - example.com