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回の更新コストをとったという感じです。