コンテンツにスキップ

リソース定義@CertManager

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. セットアップ

チャートとして

$ helm repo add <チャートリポジトリ名> https://charts.jetstack.io

$ helm repo update

$ kubectl create namespace cert-manager

$ helm install <Helmリリース名> <チャートリポジトリ名>/cert-manager -n cert-manager --version <バージョンタグ>


02. Certificate

Certificateとは

認証局を使用して、秘密鍵と証明書署名要求に基づいて、X.509のSSL証明書 (.crtファイル) を作成する。

証明書自体は、紐づくSecretに割り当てられる。


.spec.secretName

▼ secretNameとは

SSL証明書、SSL証明書と対になる秘密鍵、を保持するSecretの名前を設定する。

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: foo-certificate
  namespace: cert-manager
spec:
  secretName: foo-certificate-secret

▼ SSL証明書を使用する

Ingressの.spec.tls[*].secretNameキーにて、Secretを設定する。

これにより、IngressにSSL証明書を割り当てられる。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/issuer: foo-issuer
  name: foo-ingress
  namespace: foo-namespace
spec:
  tls:
    - hosts:
        - example.com
      secretName: foo-certificate-secret


.spec.dnsNames

▼ dnsNamesとは

SSL証明書を取得したいドメインを設定する。

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: foo-certificate
  namespace: cert-manager
spec:
  dnsNames:
    - example.com
    - foo.example.com


.spec.issuerRef

▼ issuerRefとは

SSL証明書を発行してもらう認証局 (Issuer) を設定する。

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: foo-certificate
  namespace: cert-manager
spec:
  issuerRef:
    name: foo-issuer
    kind: Issuer
    group: cert-manager.io


03. CertificateRequest

CertificateRequestとは

秘密鍵から、証明書署名要求 (.csrファイル) を作成する。


.spec.request

▼ request

証明書署名要求 (.csrファイル) の作成に必要な秘密鍵を設定する。

apiVersion: cert-manager.io/v1
kind: CertificateRequest
metadata:
  name: foo-certificate-request
  namespace: cert-manager
spec:
  request: LS0tL ...


.spec.isCA

▼ isCAとは

秘密鍵と証明書署名要求 (.csrファイル) に基づいて作成するSSL証明書が中間CA証明書であるか否か、を設定する。

apiVersion: cert-manager.io/v1
kind: CertificateRequest
metadata:
  name: foo-certificate-request
  namespace: cert-manager
spec:
  isCA: "false"


.spec.usages

▼ usagesとは

記入中...

apiVersion: cert-manager.io/v1
kind: CertificateRequest
metadata:
  name: foo-certificate-request
  namespace: cert-manager
spec:
  usages:
    - signing
    - digital signature
    - server auth


.spec.duration

▼ durationとは

SSL証明書の有効期限を設定する。

apiVersion: cert-manager.io/v1
kind: CertificateRequest
metadata:
  name: foo-certificate-request
  namespace: cert-manager
spec:
  duration: 2160h


.spec.issuerRef

▼ issuerRefとは

SSL証明書の作成に使用する認証局を設定する。

apiVersion: cert-manager.io/v1
kind: CertificateRequest
metadata:
  name: foo-certificate-request
  namespace: cert-manager
spec:
  issuerRef:
    name: foo-issuer
    kind: Issuer
    group: cert-manager.io


04.ClusterIssuer

ClusterIssuerとは

異なるNamespaceに対して横断的に証明書を発行する認証局を作成する。


.spec.acme

▼ acmeとは

SSL証明書を自動的に更新するACMEプロトコルについて設定する。

▼ server

ACMEサーバーのURLを設定する。

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: foo-cluster-issuer
  namespace: cert-manager
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory

▼ email

ACMEサーバーのユーザーの登録に使用したメールアドレスを設定する。

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: foo-cluster-issuer
  namespace: cert-manager
spec:
  acme:
    email: example@gmail.com

▼ privateKeySecretRef

SSL証明書、SSL証明書と対になる秘密鍵、を保持するSecretの名前を設定する。

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: foo-cluster-issuer
  namespace: cert-manager
spec:
  acme:
    privateKeySecretRef:
      name: foo-certificate-secret

▼ solvers

名前解決の委譲先 (例:AWS Route53、Google CloudDNS、など) を設定する。

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: foo-cluster-issuer
  namespace: cert-manager
spec:
  acme:
    solvers:
      - dns01:
          # AWS Route53を委譲先とする。
          route53:
            region: ap-northeast-1
            accessKeyID: <AWSアカウントID>
            secretAccessKeySecretRef:
              # Route53にリクエストを送信するための認証情報を保持するSecret
              name: foo-route53-credentials-secret
              # シークレットアクセスキー名
              key: foo-secret-access-key


05. Issuer

Issuerとは

同じNamespaceに対して証明書を発行する認証局を作成する。

同じNamespaceにあるKubernetesリソースに対して証明書を発行する。

もし複数のNamespaceに対して横断的に証明書を発行したい場合、ClusterIssuerを使用する必要がある。


.spec.ca

▼ secretName

SSL証明書、SSL証明書と対になる秘密鍵、を保持するSecretの名前を設定する。

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: foo-issuer
  namespace: foo-namespace
spec:
  ca:
    secretName: foo-certificate-secret