リソース定義@Cert Manager¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
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証明書を発行してもらう発行元認証局を設定する。
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