自己署名証明書の作成方法
Kubernetes クラスタ上に cert-manager を入れて、自己署名証明書を発行するための手順メモ。
動作確認 ver
cert-manager v0.8.0- cert-manager v0.11.0
ルート証明書として発行する場合
やること
- 自己署名証明書発行用の ClusterIssuer をデプロイする
-
- の ClusterIssuer を参照して証明書を発行する Certificate をデプロイする
ClusterIssuer デプロイ
$ kubectl apply -f - <<EOF apiVersion: cert-manager.io/v1alpha2 kind: ClusterIssuer metadata: name: selfsigning spec: selfSigned: {} EOF
Certificate デプロイ
- 証明書を格納する namespace にデプロイする
issuerRef
で↑でデプロイした ClusterIssuer を参照する形で指定するorganization
は指定しないとcert-manager
という文字列が入る- 証明書の中身に
O = cert-manager
という文字列が入ってしまう
- 証明書の中身に
commonName
にコモンネーム、dnsNames
に subjectAltNames を入れてあげる- 証明書を更新して再度吐かせたい場合は、commonName/dnsNames あたりを変更してあげないとなぜか cert-manager が再発行をしてくれない…(原因不明
$ kubectl apply -f - <<EOF apiVersion: cert-manager.io/v1alpha2 kind: Certificate metadata: name: selfsigned-wildcard-example-com namespace: app spec: commonName: '*.example.com' dnsNames: - hogehoge.example.com - example.com issuerRef: kind: ClusterIssuer name: selfsigning organization: - example.com self signed secretName: selfsigned-wildcard-example-com EOF
クラスタ内に CA を立てて、CA に発行させる場合
やること
- 自己署名証明書発行用の ClusterIssuer をデプロイする
-
- の ClusterIssuer を参照して CA の証明書を発行する Certificate をデプロイする
-
- で発行した CA を参照する Issuer をデプロイする
-
- の Issuer を参照しつつ発行する Certificate をデプロイする
ClusterIssuer デプロイ
Certificate デプロイ(CA 証明書)
isCA: true
がミソsecretName
で指定された名前の Secret に CA 証明書・鍵のペアが出力される
$ kubectl apply -f - <<EOF apiVersion: cert-manager.io/v1alpha2 kind: Certificate metadata: name: example-com-root-ca namespace: app spec: commonName: example.com Root CA duration: 43800h0m0s # 5 years isCA: true issuerRef: kind: ClusterIssuer name: selfsigning organization: - example.com secretName: example-com-root-ca EOF
Issuer デプロイ(CA利用)
- CA 証明書を使う Issuer を利用しつつ証明書を発行するような Certificate をデプロイする
$ kubectl apply -f - <<EOF apiVersion: cert-manager.io/v1alpha2 kind: Issuer metadata: name: example-com namespace: app spec: ca: secretName: example-com-root-ca EOF
Certificate デプロイ(CA に発行させる)
$ kubectl apply -f - <<EOF apiVersion: cert-manager.io/v1alpha2 kind: Certificate metadata: name: selfsigned-wildcard-apps-by-example-com-root-ca namespace: app spec: commonName: '*.example.com' duration: 8760h0m0s # 365 days issuerRef: kind: Issuer name: example-com organization: - example.com secretName: selfsigned-wildcard-apps-by-example-com-root-ca EOF