パパエンジニアのポエム

奥さんと娘ちゃんへの愛が止まらない

GKE で Let's Encrypt (ワイルドカード編)

まえがき

cert-manager は使わないです。
理由は、kube-lego で時間を無駄にしてしまったから。
これから kubernetes がどう変わっていくかわからないのと、
シンプルでプリミティブなシステムが好きなので、公式の方法で行いました。
なので、 3ヶ月に1回手動対応 です。

certbot インストール

brew install certbot

certbot 実行

sudo certbot certonly --manual \
  --preferred-challenges dns-01 \
  --server https://acme-v02.api.letsencrypt.org/directory \
  -m hoge@fuga.com \
  -d sample.com \
  -d *.sample.com

こんな感じで、メインドメインワイルドカードサブドメインを引数に渡し実行。

DNSにTXTレコード追加

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.sample.com with the following value:

lgfkjaldfjlasdkgjjakdflasjflaslasdjf

Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------

↑の値をTXTレコードに追加します。

DNS名:_acme-challenge.sample.com 値:lgfkjaldfjlasdkgjjakdflasjflaslasdjf

追加したら、Enter を押す。 登録前に押すとこけます。
あと、DNSにメインドメイン以外のAレコードがあるとこけました(ちょっとハマった)

tls用の Secret 作成

↑で作成された証明書を元にSecret作成

sudo kubectl create secret tls tls-certs \
  --key /etc/letsencrypt/live/sample.com/privkey.pem \
  --cert /etc/letsencrypt/live/sample.com/fullchain.pem

IngressでSecretを参照

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ing-dev
spec:
  tls:
  - secretName: tls-certs
  backend:
    serviceName: svc-dev
    servicePort: 80

↑みたいに tls-certs を追加する。
Ingress デプロイ後、2,3分間 経過すると反映されてます。
サブドメインDNSに登録しワイルドカードが聞いているか確認してみましょう。

まとめ

公式のやり方でサクッと対応できました。
3ヶ月に1回の更新もシェルスクリプトで対応できそうです。
cert-manager に対応して、破壊的変更リスクとバグリスクを抱えるより、
3ヶ月に1回の更新コストをとったという感じです。