さくらのクラウドのエンハンスドロードバランサは、アプリケーションレイヤ(レイヤ7)で動作するプロキシー型のロードバランサです。(設定によりレイヤ4のTCPロードバランシングも可能です)AWSで言うところのALB(Application Load Balancer)、GCPで言うところのHTTP(S)ロードバランシングに該当するロードバランサになります。さくらのクラウドのエンハンスドロードバランサは、配下のサーバとして、さくらのクラウドのサーバだけでなく、さくらのVPSの仮想サーバや、さくらの専用サーバを設定できるのが魅力です。つい先日、さくらのクラウドのエンハンスドロードバランサを使う機会がありましたので、使い方をメモしておきました。
公式ドキュメント
さくらのクラウド「エンハンスドロードバランサ」の最新の情報は、以下のさくらのクラウド公式ドキュメントをご確認ください。
エンハンスドロードバランサ | さくらのクラウド ドキュメント
構成
今回設定する構成は下の図の通りです。
エンハンスドロードバランサでSSL終端(SSLオフロード)して、さくらのクラウド(石狩ゾーン)のWebサーバ2台にバランシングするといったシンプルな構成です。また、ソーリーサーバ(バランシング先のサーバが全てダウンした場合の接続先サーバ)として、さくらのVPS(東京)のサーバを設定します。
実際の運用では、バランシングされているWebサーバから共通して利用できるデータベースサーバやNFSサーバが必要になることがあります。そちらにつきましては、以下の記事をご参照ください。
さくらのクラウド「スイッチ + データベース + NFS」の使い方メモ
エンハンスドロードバランサの作成
エンハンスドロードバランサを作成します。
さくらのクラウドホームで「グローバル」をクリックします。
「エンハンスドLB」を選択して、右上の「+追加」をクリックします。
作成するエンハンスドロードバランサの設定を選択/入力して、ページ最下部の「+作成」をクリックすれば、エンハンスドロードバランサが作成されます。
今回は以下のように設定しましたが、用途にあわせて設定してください。設定内容の詳細につきましては、さくらのクラウドの公式ドキュメント をご参照ください。
設置先リージョン | 自動(エニーキャスト) |
性能上限 | 1,000cps(秒間の新しい接続可能数) ※今回はエンハンスドロードバランサでSSL終端しますので、性能上限は100cpsになります。 |
VIPフェイルオーバ | 有効にする DDoS対策になりますので、有効にすることをオススメします。 |
セッション維持 | 有効にしない ※ECサイトなどセッション維持が必要な場合は有効にしてください。 |
GZIP圧縮 | 有効にする |
実サーバ通信タイムアウト(秒) | 10 |
監視方法 | tcp |
チェック間隔(秒) | 10 |
ソーリーサーバ | (後で設定します) |
名前 | elb01 |
説明 | (なし) |
タグ | (なし) |
アイコン | (なし) |
情報の確認
この後の作業のため、作成したエンハンスドロードバランサの情報を確認しておきます。
作成したエンハンスドロードバランサを選択して、右上の「詳細」をクリックします。
「情報」タブを選択して「FQDN」と「プロキシ元ネットワーク」をメモしておきます。
DNSの設定
サイトのドメイン名と、先ほど確認したエンハンスドロードバランサのFQDNを紐付けるため、DNSサーバにCNAMEレコードを登録します。
今回設定するのサイトのドメイン名は www.s.apar.jp になりますので、登録するCNAMEレコードは次のようになります。
さくらのクラウドのDNSサーバの場合は、次のような設定でCNAMEレコードを登録します。
配下の実サーバの設定
エンハンスドロードバランサの配下に設置する Webサーバ①、Webサーバ②(これを「実サーバ」と呼びます)とソーリーサーバで表示されるコンテンツは次の通りです。
いずれのサーバーもWebブラウザで http://<IPアドレス>:80 にアクセスすると表示したいコンテンツが表示されるようにしておきます。実際の運用では実サーバとなるWebサーバ①、Webサーバ②は同じコンテンツを表示させますが、今回は動作確認のため、サーバ名を表示するようにしています。
接続元の制限
エンハンスドロードバランサ以外の接続を拒否するように、実サーバ(Webサーバ①、Webサーバ②)とソーリーサーバを設定します。
今回は、RHEL系のサーバOSに標準で搭載されている firewalld を使って接続元を制限しています。
HTTP(80/tcp)およびHTTPS(443/tcp) のポートを全て閉じます。
sudo firewall-cmd --remove-port=80/tcp --permanent sudo firewall-cmd --remove-port=443/tcp --permanent sudo firewall-cmd --remove-service=http --permanent sudo firewall-cmd --remove-service=https --permanent sudo firewall-cmd --reload
エンハンスドロードバランサの情報で確認した「プロキシ元ネットワーク」からのみ 80/tcp ポートへの接続を許可します。
sudo firewall-cmd --add-rich-rule="rule family=ipv4 source address=153.120.132.192/27 port protocol=tcp port=80 accept" --permanent sudo firewall-cmd --add-rich-rule="rule family=ipv4 source address=153.125.229.64/27 port protocol=tcp port=80 accept" --permanent sudo firewall-cmd --reload
正しく設定されていることを確認します。
sudo firewall-cmd --list-all ---(以下の表示であればOKです)--- public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client ssh ports: protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: rule family="ipv4" source address="153.125.229.64/27" port port="80" protocol="tcp" accept rule family="ipv4" source address="153.120.132.192/27" port port="80" protocol="tcp" accept
エンハンスドロードバランサの設定
DNSおよび配下の実サーバの設定が終わったら、本題のエンハンスドロードバランサの設定を行います。
今回は、以下のようにエンハンスドロードバランサを設定しますが、用途に合わせて設定してください。
- 実サーバとして Webサーバ① と Webサーバ② を設定
- ソーリーサーバを設定
- エンハンスドロードバランサでSSL終端して HTTP は HTTPS にリダイレクトする
- Let’s Encrypt の SSL証明書を利用
- HSTS を設定
実サーバの設定
Webサーバ① と Webサーバ② を、エンハンスドロードバランサの配下の実サーバとして設定します。
作成したエンハンスドロードバランサを選択して、右上の「詳細」をクリックします。
「実サーバ」タブを選択して「+追加」をクリックします。
Webサーバ①のIPアドレスを入力(またはサーバから選択)して、ポート番号に 80 を入力したら「追加」をクリックします。(下のスクリーンショットは例示用のIPアドレスです。実際にはさくらインターネットのIPアドレス以外は登録できません)
同様の手順で、Webサーバ②を登録し、右上の「反映」をクリックすれば実サーバの設定完了です。
ソーリーサーバの設定
続いて、ソーリーサーバ(実サーバが全てダウンした場合の接続先サーバ)を設定します。
画面上部の「監視方法の変更」をクリックします。
ソーリーサーバのIPアドレスを入力(またはサーバから選択)して、ポート番号に 80 を入力したら「変更」をクリックします。(ソーリーサーバについても、さくらインターネットのIPアドレス以外は登録できません)
待受ポートの設定
エンハンスドロードバランサの待受ポートを設定します。
「待受ポート」タブを選択して「+追加」をクリックします。
今回は、エンハンスドロードバランサでSSL終端しますので、プロキシ方式を「https」、HTTP/2のサポートは「有効」、SSLポリシーは「TLS 1.2/1.3 セキュア設定(2021/06)」を選択して「追加」をクリックします。(TLS 1.0 と 1.1 には脆弱性があり、ほとんどのWebブラウザで対応を終了しています。特別の理由がない限りは「TLS 1.2/1.3」または「TLS 1.3」からはじまるSSLポリシーを設定しましょう)
続いて、HTTP は HTTPS にリダイレクトするように設定します。プロキシ方式を「http」、httpsへのリダイレクト「有効」を選択して「追加」をクリックします。
待受ポートの追加が終わったら、右上の「反映」をクリックして設定を反映させます。
Let’s Encrypt の設定
Let’s Encrypt の SSL証明書を設定します。
画面上部の「SSL証明書の設定」から「Let’s Encryptの設定」を選択します。
はじめに「利用規約」をクリックして Let’s Encrypt の利用規約を確認しておきましょう。
続いてSSL証明書の自動更新「有効」を選択して、SSL証明書の Common Name にサイトのドメイン名を入力したら「同意して設定」をクリックします。
右上の「反映」をクリックして設定を反映させます。
設定を反映したら、今度は「SSL証明書の設定」から「Let’s Encryptの証明書更新」を選択してください。Let’s Encrypt の SSL証明書が取得されます。
1〜2分待ってから一度画面をリロードして「SSL証明書の設定」から「追加/変更」を選択すると、 SSL証明書が取得できていることが確認できると思います。
HSTS の設定
HTTP から HTTPS にリダイレクトする際に、中間者攻撃(通信に割り込んで、通信の盗聴や内容の改ざんを行う攻撃)を実行される脆弱性が発生します。その対応として、HSTS(HTTP Strict Transport Security)を設定し、Webブラウザが常に HTTPS で接続するようにします。
「レスポンスヘッダ」タブを選択して、待受ポート:443の「+追加」をクリックします。
レスポンスヘッダに「Strict-Transport-Security」、値に「max-age=31536000」を入力して「追加」をクリックします。
右上の「反映」をクリックして設定を反映させます。
動作確認
Webブラウザで、エンハンスドロードバランサに設定したドメイン名にアクセスして、ロードバランシングされていることを確認します。(セッション維持を有効にしている場合は、別のWebブラウザからアクセスしてみてください)
全ての実サーバをシャットダウンして、ソーリーサーバのコンテンツが表示されることを確認します。
おわりに
余談になりますが、さくらのクラウドの石狩ゾーンが収容されている石狩データセンターは、再生可能エネルギーにより発電された電力を採用することによりCO2(二酸化炭素)の年間排出量実質ゼロを実現しているそうです。
参考資料:さくらインターネット、6月1日より石狩データセンターの電力を再生可能エネルギー由来へ変更し、実質CO2排出量ゼロを実現
ここ数年で、企業活動においても地球環境への配慮が求められることが多くなりました、お客さまやクライアントからの要望に備えて、地球環境にやさしいクラウドサービスを選択するのはいかがでしょうか?
コメント