2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

KubernetesAdvent Calendar 2024

Day 7

【K8s】Cert-managerでDNS-01のACME認証をする話

Last updated at Posted at 2024-12-06

今回はUniProのK8sとCloudflareを連携させて、DNS経由でLet's Encryptから証明書を取ってくる話です。

Cloudflareへの登録等に関しては、以下の記事で取り扱っているので、よければご覧ください。

動機

HTTPでCert-managerを使用すると、.well-knownのディレクトリがNextJSの404ページになってしまい、非常にめんどくさかったんですよね...
なので、DNS経由でのACMEを用いれば幸せになれるなぁと思ってやってみました。

仕組み

ACMEの認証フローはこんな感じです。

  1. CertmanagerがLet's Encryptからトークンをもらってくる
  2. CertmanagerがCloudflareのAPIを叩いてDNSレコードを作成する
  3. Let's EncryptのDNS-01のACME認証を通す
  4. 証明書を受け取り次第、CloudflareのAPIを叩いてDNSレコードを削除する

要はCloudflareのAPIを叩くための設定さえやっとけば大体はOKですね。
では、やってみましょう。

Issuerをたてる

ClusterIssuerにDNS01で使う設定を色々していきます。

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: le-cf-staging
spec:
  acme:
    email: webmaster@mail.uniproject-tech.net
    privateKeySecretRef:
      name: uniproject-tech-cluster-issuer-secret
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    solvers:
      - dns01:
          cloudflare:
            apiTokenSecretRef:
              name: cloudflare-api-token-secret
              key: api-token

解説

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: le-cf-staging
spec:
  acme:
    email: webmaster@mail.uniproject-tech.net
    privateKeySecretRef:
      name: uniproject-tech-cluster-issuer-secret
    server: https://acme-staging-v02.api.letsencrypt.org/directory

ここまではいつも通りですね。

    solvers:
      - dns01:
          cloudflare:
            apiTokenSecretRef:
              name: cloudflare-api-token-secret
              key: api-token

ここでCloudflareのAPIを叩くための認証情報があるSecretを指定しています
この場合だと、cloudflare-api-token-secretのapi-tokenから持ってきていますね。

ちなみに、Cert-managerはCloudflare以外にもいろんなDNSプロバイダーをサポートしています。

  • ACMEDNS
  • Akamai
  • AzureDNS
  • CloudFlare
  • Google
  • Route53
  • DigitalOcean
  • RFC2136

Secretを作る

これを、ClusterIssuerと同じnamespaceに置きましょう。

apiVersion: v1
data:
  api-token: <base64 encoded API token>
kind: Secret
metadata:
  name: cloudflare-api-token-secret

解説

APIトークンはCloudflareのダッシュボードから持ってきます。

cf-token-menu.png

ここで、作成、テンプレからDNSを選ぶと、とても便利です。
今回はアカウント全体にしました。

cf-token-template.png

あとは、セットして使ってみるだけです。

まとめ

今回はDNS-01でACMEを使い、Cert-managerでSSL証明書を取ってくるまでをしました。
だいぶ便利なので、皆さんもやってみてください!!

参考文献

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?