はじめに
今回は、Rancherとはどういうものかについてご紹介すると共に、本番での運用前に必ず押さえておきたい、Rancher環境での暗号化通信・証明書の発行手順についてご紹介いたします。
Rancherとは?
Rancherは、軽量な仮想化を実現するDockerをより便利に利用するため、アメリカのRancher Labs,Inc.が開発したコンテナオーケストレーションのためのソフトウェアです。
OSSとしての利用が可能で、有償でサポートを受けることもできます。
Rancherの利点
Rancherについて考えると同時に、どうしてDockerのようなコンテナ型仮想化が注目されるようになったのかにも目を向けてみましょう。
一番の理由は”軽量な仮想化”というところにあるように思います。
軽量な仮想化と聞くとそれだけかと思いがちですが、軽量であるということは、今まで時間やコスト、手間がかかって出来なかったことができるようになるということです。
例えば、「本番運用を見据えた環境で開発をしたい」「開発と運用を別ものとせず、リリースサイクルを速めたい」などといった、従来は潤沢な開発リソースが必要とされた開発プロセスがより手軽に実現可能となります。
そして、高度な開発プロセスが手軽に扱えるようになることで、サービス品質の向上により注力することができるようになります。
つまり、”軽量な仮想化”にはサービス利用者・サービス提供者共にメリットが生まれる可能性が秘められているのです。
ただし、高度な開発プロセスは、”軽量な仮想化”というだけで実現できません。
高度な開発プロセスを扱うためのスキルやノウハウ、導入コストがかかってきます。
それらを極力抑えるためにRancherのようなソフトウェアが開発されたと考えています。
本番運用と暗号化通信
Rancherの運用を開始するにあたり、SSL/TLS証明書の扱いと更新の自動化についてご紹介していきます。
ウェブを「よりセキュアに」という風潮
近年はHTTPSでウェブサービスを提供することが当たり前になってきました。
それはブラウザでの閲覧だけでなく、スマートフォンアプリ内からWebAPIを使用する際も、HTTPSではないサービスに対してそのままの設定では通信すらできなくなってきています。
証明書発行に関する事情
一方でSSL/TLS証明書の発行には、1ドメインあたり最低でも年間1,000円程度の費用がかかります。
サービス提供者にSSL/TLS証明書を利用することが望まれる中、これらを発行するための環境はどのように変化してきているでしょうか。
- AWSではAWS Certificate Managerというサービスで証明書を発行・管理することができるようになりました。
- Let’s Encryptという、”すべてのWorld Wide WebにTLS接続ができるようにすること”を目的としたプロジェクトが2016年4月12日に正式にサービスインし、現在も継続しています。
上記は共に無料でSSL/TLS証明書が発行できます。
これらのサービスによりTLS接続の敷居は格段に低くなったと言えるでしょう。
証明書発行の自動化と制限
それでは、従来費用がかかっていたものがなぜ無料で利用できるようになったのでしょうか?
それは証明書の発行作業を自動化するため、ACMEプロトコルという形で手続きが整理されたことが大きな理由として挙げられます。
ただし、このような無料SSL/TLS証明書の発行には、従来になかった制限が含まれます。
- AWS Certificate Managerで作成した証明書は、Elastic Load BalancingおよびAmazon CloudFront以外のサービスで利用することはできない。
- Let’s Encryptで作成した証明書の有効期限は90日と短い。(従来は1年での運用が主)
- Let’s Encryptはワイルドカード証明書の発行をサポートしていない。
- 証明書取得のAPIにRateLimitsがある。
- 証明書の種類はDVのみ対応。(DV[Domain Validation] => ドメインの所有を確認して発行)
一見制限が多いように見えるLet’s Encryptですが、Rancherに備わっている証明書の管理機構と組み合わせることで、非常に強力な仕組みに一変します。
Rancher環境で証明書の発行&更新の自動化
それでは、実際にRancherでどのように設定していくのか見ていきましょう。
1. 証明書発行をサポートするカスタムカタログを追加
RancherのコミュニティカタログにLet’s Encrypt Certificate Managerというカタログがエントリーされていますが、今回こちらは使いません。
Rancherロードバランサで簡単に使える&自動更新ができるようにしたいため、Rancher Let’s Encrypt Serviceを利用します。
こちらはカタログ一覧には出てこないので、Rancherの[管理者]->[設定]からカスタムカタログとして登録します。
2. ドメインを指定してスタックを起動
カスタムカタログとして登録できたら、HTTPS通信を行いたいドメインを指定してスタックを立ち上げます。
補足2: カタログの初期設定ではSTAGING=true
となっています。本番運用の際はSTAGING=false
に変更してください。
3. RancherロードバランサにACME challenge用のエンドポイントを用意
証明書取得用のスタックができたら、RancherロードバランサにACME challenge用のエンドポイントを用意します。
エンドポイントはドメインごとに設定します。
“リクエストホスト”がドメインで、”対象”が先ほど立ち上げたスタックのnginxサービスです。
パスには/.well-known/を埋めます。
このようにLet’s EncryptからのACME challenge受けつけることで、証明書が手に入ります。
4. 証明書が取得できたことを確認
無事ACME challengeが成功したら、Rancher Let’s Encrypt ServiceがRancher Serverに証明書を登録してくれます。
証明書がドメイン単位で作成されており、有効期限が3ヶ月(90日)であることがわかります。
5. Rancherロードバランサに証明書を設定
証明書が取得できたことを確認したら、Rancherロードバランサに証明書を設定します。
メインの証明書を選択し、代替証明書を必要に応じて追加します。
設定ができたらロードバランサをアップグレードします。
6. 証明書の更新タイミングを確認
最後に更新タイミングを確認しておきましょう。
初期設定では有効期限が切れる14日前に更新してくれるようです。
これで短い証明書の有効期限でも自動で更新し続けてくれるので安心です。
まとめ
このようにRancherとLet’s Encryptを組み合わせることで、セキュアな本番環境を手軽に構築することができました。
従来の自動化されていない方法でこれらを設定した場合、待ち時間なども含め最低でも1日以上(決済や更新手続きを考えるともっと)を要すると思います。
本番環境は重厚な構成になりがちですが、このような自動化を積極的に取り入れて運用の効率化を目指すことが重要ではないでしょうか。