KubernetesでLet's EncryptのTLSサーバー証明書を手動更新する

気づいたらTLSサーバー証明書の有効期限が切れていた!なんて想像もしたくない話ですが、実際に起こってしまい、今回は軽減策として手動で更新しました。もしまた起こった時のためにも、手動でやったことを備忘録として残しておきます。

ちなみにcert-managerで自動更新設定したはずが、どうも動いてませんでした。。これは別途見直すとします👼

 

1.certbotで証明書を発行する

$ certbot certonly --manual --cert-name yopiilab.com -d yopiilab.com -d *.yopiilab.com --preferred-challenges dns --test-cert

チャレンジはDNSで行っているため--preferred-challenges dnsをつけています。

テスト後は--test-certを外せます。

SSL Server Test (Powered by Qualys SSL Labs)

Let's Encryptは証明書の発行にレート制限があるようなので、--dry-runまたは--test-certでのテストをしっかり行ってから、実際の取得が推奨されています。

 

2. 1.がうまくいったら保存先ディレクトリに移動しておく

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/yopiilab.com-0005/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/yopiilab.com-0005/privkey.pem
This certificate expires on 2022-04-08.
These files will be updated when the certificate renews.

$ cd /etc/letsencrypt/live/yopiilab.com-0005

3.tlsのsecretを削除する

$ kubectl delete secret yopiilab-tls -n=aichutower

どっちみち期限切れなのでいったん削除しました

 

4.新しいtlsのsecretを作成する

$ kubectl create secret tls yopiilab-tls --cert=fullchain.pem --key=privkey.pem -n=aichutower

 

その後、割とすぐ反映されました!

 

環境

f:id:yopiilab:20220109081946p:plain

 

【ブラウザゲーム】Webブラウザで遊べるミニゲームを作ってみました【Phaser】

Webブラウザで遊べるミニゲームを作ってみました。まだあたたかいうちに、開発周りの備忘録を残したいと思います。

あいちゅタワー

f:id:yopiilab:20211010211520p:plain

aichutower.appsight.net

 

↑↑の画像をタップでゲームに飛べます↑↑

 

 

プラットフォーム

Windows, macOS, iOS, Androidなどで動作するモダンWebブラウザ

 

ジャンル

ミニゲーム

 

対象年齢

全年齢

 

構成

システム

  •  フロントエンド
    • TypeScript
    • Phaser
    • Webpack
  • バックエンド
    • Node.js
    • Express
    • Docker
    • Azure Kubernetes Service
    • Azure Blob Storage

画像

  • 基本的にPhotoshopでがんばって作成
  • 砂浜の貝殻とヒトデの画像はフリー素材サイトより拝借

音楽

  • フリー素材サイトより拝借

フリー素材の拝借元は、整理でき次第掲載させていただきます。

 

開始当初(2021年7月末頃)のいろいろ

開発者の状態

  • Webのフロントエンド~バックエンド経験あり
  • 最近はバックエンドメイン
  • なんか個人でゲームとか作りたい
  • でも、どういうゲームをどうやって作るのが良いんだろう...?

イマドキは、Unityなどの高性能ゲームエンジンもあります。が、作り方や人気のゲームなどを調べていくうちに、インストール不要のブラウザゲームを作りたくなりました。ちょうど、開発者Web周りの経験がありますので、以下のようなゴールを設定しました。

ゴール

 

作るゲームジャンルの選定~プロトタイプの完成まで

とにかくシンプルで、早くリリースできるジャンルを選ぼうと思いました。そこで、今回は2Dの積みゲー(って正式に呼ぶのかは謎)のミニゲームにしました。具体的には、どう〇つタワーなんちゃらみたいなやつですね。

少なくとも、物理エンジンがすでに存在しているのを認知していたので「もしかして、俺がやることって画像作るくらいじゃね?」という甘い考えをしていました。途中までは。

実際、今回採用したゲームフレームワークのPhaserにも、物理エンジンが搭載されていて衝突判定も拾えました。なので、作り始めた段階では「いやぁーもうこれは本当に、あとは画像作って入れ込んで微調整するくらいだけでは!すまぬ!」という感じでした。ええ、途中までは...。

 

進めていくうちに、まず衝突判定のために、カスタムシェイプが必要と気づきました。オブジェクトの形が四角や三角なら必要ないんですが、独特の形をしていたためです。さすがに、ベクター画像用意するだけという訳にはいかず。これはまあわかる。でも、カスタムシェイプだとスプライトを回転させてもシェイプが回転してくれない。嘘でしょ?

とまあそんな感じで、各種ハマりポイントを踏み抜き、プロトタイプがようやく完成しました。まあようやくと言っても、ゲームのプロトタイプ自体は作業した日を足すと数日でしたので、その後を思うと、素晴らしく順調だったと言えます。

気持ち的には、性懲りもなく「よし、もうあとは微調整してリリースするだけ!すまぬ!爆速で大人気ゲームを作ってしまい、すまぬ!」という感じでした。

 

止まらない妄想~夢から覚めるまで

数日でプロトタイプ!までは良かったんですが、その後は延々とひとりでぐるぐるしていました。特に最初にリリースするものというのもあり、気合が入ってしまったのかもしれません。

何にぐるぐるしていたかと言いますと、ルールや機能の見直しです。

例えば

  • ステージを作って、冒険していく感じにもしたい
  • ちゃんとエンディングとかあったほうが良いかも
  • ランキングとかで、他のプレイヤーの様子を可視化したい
  • ランキングやるなら、SNS連携もしたい
  • アイテムやボーナスポイントを設けて、やりこみ要素を増やしたい
  • 課金要素も欲しい
  • オンライン対戦モードも欲しい

など、もう完全に「ミニゲーム」とは何だったのか、という感じに。笑

そして、作って試してみるにしても、思うようなペースで進捗出せなかったり。やっと試せるようになっても、微妙な感じで不採用だったり。

7月末に作り始めて、8月半ばにプロトタイプができていたはず。それが、気づいたら9月末なんですよ。「このままじゃ一生完成しないんじゃないか」と怖くなりましたよね。急に語り掛けてしまいすみません。でも、ここでようやく、長い夢から覚めて現実を見始めました。

 

いろいろ削ぎ落す~リリースまで

実装しかけていた妄想機能は、ひととおり削ぎ落としました。そして、残りは微調整のみとし、リリース優先に舵を切りました。

これからのことも踏まえ、Webpack, CI/CD, TLSなどの設定などを経て...。そして...10月にようやく公開に至りました...!

 

そんな感じで、とにかくリリースできて良かったです。

周り道したのもあってか、やたら感慨深さがあります。あとは、どなたかプレイしてみていただけますと...🥺

f:id:yopiilab:20211010211520p:plain

↑↑の画像をタップでゲームに飛べます↑↑

 

全体をふりかえって

良かったこと

  • とにかく1つ目が形になった
  • シンプルなゲームにできた
  • 登場するキャラクターやグラフィックが可愛くなった(自分で言うことか?)

イマイチだったこと

  • 最終的には削る余計な機能を入れてしまったり、脇道に逸れすぎた感がある
  • 本業が忙しかったりで、思ったように時間が取れなかった
  • このゲーム超おもしろい!みたいな要素が思いつかなかった(そんなもの滅多に思い浮かばないかもですが)

所感

簡単なミニゲームでも、いざ自分で作って公開するのは苦労しました。でも楽しかったです!(小並感)

今回せっかくある程度環境が整ったので、隙あらば新作も開発していきたいと思います!

 

f:id:yopiilab:20211010233629p:plain

※開発初期のキャラクター

WSL2でkubectl実行するとlocalhost:8080 was refusedとか出る件

WSL2で

az aks get-credentials --name MyManagedCluster --overwrite-existing --resource-group MyResourceGroup

した後に

kubectl get po

したら以下のようなエラーが出た。

The connection to the server localhost:8080 was refused - did you specify the right host or port?

最近Service Principal作るときにlocalhost適当に指定した記憶はあるけど、さすがにここでは関係ないだろうし・・ということで調べると以下のような情報を発見した。

qiita.com

 

WSLからWindowsのCドライブにアクセスするときは /mnt/c でアクセスしなきゃいけないはずが、 C:\ でアクセスしていて、ファイルに設定を書き込めていなかったことが原因っぽいです。(これWindowsのパス表記じゃん?)

ええ・・そうなのか。という訳で記載の以下を実行したら

$ echo 'export KUBECONFIG="/mnt/c/Users/{{ユーザー名}}/.kube/config"' >> ~/.bashrc
$ source ~/.bashrc
$ kubectl config view

無事に実行できるようになった...圧倒的感謝🙇

しかしWSL2便利だけどこういうところカオス...。

Windows PowerShellでジャンクションを作成する

ディレクトリのシンボリックリンク的なものを張りたい場合に以下でいけた

New-Item -Path D:\To\Be\Created\Junction\Here -ItemType Junction -Value C:\To\Be\Jumped\From\Junction\Here

環境

Windows 10