BLOG

第2回:今日から始めるF5 Distributed Cloud Services

Hiroshi Matsumoto サムネール
Hiroshi Matsumoto
Published June 06, 2022

・F5 Distributed Cloud Servicesのロードバランス機能の利用方法

本連載では皆様にF5 Distributed Cloud Services(略称 F5 XC)を使い始めていただくための情報をまとめております。F5 XCが求められる状況、そして「無料」でご利用いただくための手順、用途に合わせた機能の紹介を行っております。

第2回目となる今回は、アプリケーションのロードバランス機能についてご紹介いたします。

まだアカウントをお持ちでない方は、第1回の内容をご覧ください。また、アプリケーションデプロイ機能にご興味がある方は、第3回の内容をご覧ください。

第1回:F5 XCの利用を開始する方法
・第2回:F5 XCのロードバランス機能の利用方法(本記事)
第3回:F5 XCのアプリケーションデプロイ機能の利用方法

・「無料」でF5 XC LBを利用する

本ブログでは以下の想定で手順を記述します。第3回のF5 XCのアプリケーションデプロイ機能の記事からこちらの手順を参照する場合には、本手順を参考にロードバランサーを設定した後、あらためて第3回の内容を参考に設定を変更してください。
プロジェクトやアプリケーション、利用できる設備に合わせて適宜変更してください。

F5 XC 操作端末 インターネットに接続したPC
F5 XC LBの宛先FQDNへの接続 PCのhostsファイルを修正
転送先アプリケーション インターネットから接続できるプリケーション

皆様のアプリケーションに対する、通信を転送するために最低限必要となる設定をご紹介します。適宜設定項目やマニュアルを参照して、環境に合わせた設定を行ってください。

マニュアル:DCS セットアップガイド・ラボガイドの「DCS WAAP セットアップガイド」を参照してください

F5 XCのLB機能は、GUIで設定を行う以外に、APIやTerraformを使って設定することが可能です。本ブログでは双方についてご紹介を致します。

・設定完了後の構成

本ブログの手順に従って操作を完了した場合、以下のような構成のデプロイが完了します。

大変シンプルな構成です。
中段の「LB」がF5 XCを使ってデプロイするLB機能です。外部からの通信を受け付けます。そしてF5 XC上にデプロイしたLB機能が、インターネットを経由しWeb Appに対して負荷分散を行います。

それでは始めていきましょう。

・コンソールを使った設定

1.HTTP Load Balancerの設定

メニューより Load Balancers を選択してください

新規にHTTP Load Balanceを作成します。左メニュー HTTP Load Balancers をクリックし、 Add HTTP Load Balancer をクリックします

以下の通りパラメータを入力します。 FQDNについては後ほど適切にアプリケーションにアクセス出来るよう設定します。

入力パラメータ

項目名 用途 サンプル値
Name オブジェクトの名称 demo-echo-lb
List of Domain クライアントが接続する先となるドメイン名 echoapp.f5demo.net
Select Type of Load Balancer ロードバランサーで待ち受けるパラメータの指定(HTTP/HTTPS等) HTTPS with Custom Certificate

Select Type of Load Balancer の項目では以下のようなパラメータが選択可能です。用途や環境に合わせて選択ください。

項目名 用途
HTTP HTTP Load balancer
HTTPS with Automatic Certificate 証明書の自動更新を提供します。この設定を選択する場合、F5 XCにドメインのDelegateをしている必要があります。
HTTPS with Custom Certificate 別途ご用意いただいた証明書をご利用いただけます。

HTTPSに利用する 証明書 と 鍵 をアップロードします。 あくまでテストの利用となりますので、自己署名証明書を利用いただいて問題ございません。お手元にSSL証明書がない場合、以下のコマンドを参考にLinux Hostなどで証明書を作成いただけます

openssl ecparam -out ./demo-ecc.key -name prime256v1 -genkey 
openssl req -new -key ./demo-ecc.key -out ./demo-ecc-csr.pem -subj '/CN=<FQDN:例 echoapp.f5demo.net>' 
openssl req -x509 -nodes -days 30 -key ./demo-ecc.key -in ./demo-ecc-csr.pem -out ./demo-ecc.pem
# demo-ecc.key 、 demo-ecc.pem をご利用ください

Select Type of Load Balancer の HTTP Load balancer TLS Parameters 欄の Configure をクリックしてください

TLS設定の画面に遷移します。 Add Item をクリックします

Certificate に証明書の内容を貼り付けます。 Private Key 欄の Configure をクリックし、鍵を登録します。

Secret Info で Clear Secret を選択し、下に表示されるテキストボックスに鍵の情報を貼り付け、 Apply をクリックします

画面下部の Add Item をクリックします

画面下部の Apply をクリックします

2.分散先の設定

次に、Origin Poolsを指定します。画面を下にスクロールし Origin Pools のメニューを表示してください。 画面中央の Add Item をクリックします

Origin Poolの選択画面が表示されます。これから新規にOrigin Poolを作成しますので、Origin Pool選択欄から Create new origin pool をクリックします

Name 欄にOrigin Poolの名称を入力します。
新たに分散先のサーバを追加します。 Origin Servers に表示される Add Item をクリックします

以下の内容で転送先サーバを追加します。サーバを追加し、 Add Item をクリックしてください。 この操作を追加対象のサーバ台数分繰り返してください。

  • Select Type of Origin Server
項目名 用途
Public DNS Name of Origin Server 対象の分散先サーバをDNS(FQDN)で指定する場合
Public IP of Origin Server 対象の分散先サーバをIPアドレスで指定する場合

分散先サーバが待ち受けるポートを指定します。このサンプルアプリケーションでは 80 を指定します 内容を確認し、 Continue をクリックします。

分散先サーバがHTTPSを利用する場合、分散先サーバの待ち受けるポートを 443 と指定し、TLS Configurationで TLS を選択し、適切なオプションを指定してください。

Add Item をクリックし、Origin Pool の追加を完了します

画面最下部まで移動し、 Save and Exit をクリックします

設定した内容が画面に表示されます

これで接続の準備が完了しました。次は、クライアント端末から実際に接続するための準備です。

3.動作確認

クライアントのhostsファイルを変更

設定したHTTPSサイトに接続するため、クライアントのhostsファイルを変更します

hostsファイルを利用せず、DNSのレコードを変更する場合、CNAMEの内容をDNSサーバに登録してください

CNAME欄に指定されたFQDNのアドレスをDNSサーバで解決し、IPアドレスを取得します

dig コマンドによるIPアドレス解決の結果

# dig ves-io-101f0be3-de90-4c78-8a1e-a101ce0336bd.ac.vh.ves.io +short
<IP Address>

表示されたIPアドレスを、アクセスするFQDN echoapp.f5demo.net のIPアドレスとしてhostsファイルに登録してください

hosts ファイル登録例

<IP Address> echoapp.f5demo.net

それでは実際に接続してみましょう。
アプリケーションの利用については、普段Webサイトを閲覧する手順と同様です。普段ご利用のブラウザに、「https://<指定したFQDN>」と入力してください。画面は正しく表示されたでしょうか?無事閲覧ができた皆様、おめでとうございます!

F5 XCのダッシュボードを確認しましょう。画面左側、Virtual Hostsの HTTP Load Balancers をクリックし、 右側に表示されるロードバランサー名下の「Performance Monitoring」のメニューをクリックしてください

Dashboard が表示されます。その他にも様々な結果を確認することができますので操作してみてください。 また、画面右上に対象とする期間の指定や、最新情報へ更新することが可能ですのでご希望の内容を確認してください

次に画面左側、Meshの Service Mesh をクリックし、表示された項目の More をクリックします

現状ではあまり通信量が多くないと思います。通信が多くなった場合には以下のような画面を閲覧いただくことができます。

・Terraform / API を用いた設定

今までの手順で、ブラウザから設定する方法について紹介しました。これで、オンプレミス、パブリッククラウド等環境に依存せず共通の手順で負荷分散、通信制御を行い、可用性を向上することが可能です。
しかし、こちらの記事をご覧の方の中では、アプリケーションのデプロイに合わせて「即座」に設定を反映したいとお考えの方もいらっしゃるでしょう。ご安心ください。こちらの内容はAPIやTerraformを通じて簡単に自動化することが可能です。そしてこちらも「無料」でご利用いただけます。

手順の2がTerraform、3がAPIの操作となっています。ご希望される内容をご確認ください。

1.Terraform/APIで利用する証明書の発行

Terraformを実行するホストでAPIに接続するための証明書が必要となります。証明書の作成方法を示します。 マニュアルは以下のページを参照してください。

F5 XCのコンソールを開き、 Administration を開きます

Personal Management の Credentials を開き、上部に表示される Create Credentials をクリックします

画面左側に表示される項目に各種情報を入力してください。 Credential Type は API Certificate を指定ください。パスワードは、Terraform を利用するホストの環境変数 VES_P12_PASSWORD に指定しますのでメモしてください。 他のパラメータは環境に合わせて自由に指定してください。

入力後、画面最下部の Download をクリックします。ポップアップでファイルのダウンロードを求められますので適当な場所に APIに用いる証明書を保存してください

これで、利用の準備ができました。

2.Terraformの利用

1で作成した証明書を、操作を行うホストに保存してください。パスワード情報も合わせて利用します。こちらの手順はLinuxの環境を想定して記述しております。

F5 XC Terraform の本書作成時点の対応バージョンは以下となります。

  • Terraform >= 0.13.x

必要となるファイルをローカルへコピーし、該当のディレクトリへ移動します。

$ git clone https://github.com/BeF5/f5j-dc-waap-automation
$ cd f5j-dc-waap-automation/terraform/http-load-balancer

TerraformでAPIに接続するためにはパスワード情報を環境変数に登録する必要があります。以下コマンドを参考に先程Credential作成時に指定したパスワード文字列をセットしてください。

export VES_P12_PASSWORD=**password**

以下のファイルでパラメータを指定します。エディタで内容を確認し、環境に合わせたパラメータを指定してください。Free Plan等、個人アカウントでAPIを利用する場合、URLは https://console.ves.volterra.io/api を指定してください。

$ vi terraform.tfvars
# ** 環境に合わせて適切な内容に変更してください **
api_p12_file     = "**/path/to/p12file**"        // Path for p12 file downloaded from VoltConsole
api_url          = "https://**api url**"     // API URL for your tenant

# 本手順のサンプルで表示したパラメータの場合、以下のようになります
myns             = "**your namespace**"      // Name of your namespace
op_name          = "demo-origin-pool"        // Name of Origin Pool
pool_port        = "80"                      // Port Number
server_name1     = "**your target fqdn1**"   // Target Server FQDN1
server_name2     = "**your target fqdn1**"   // Target Server FQDN2
httplb_name      = "demo-echo-lb"            // Name of HTTP LoadBalancer
mydomain         = ["echoapp.f5demo.net"]    // Domain name to be exposed

cert             = "string///**base 64 encode SSL Certificate**"  // SSL Certificate for HTTPS access
private_key      = "string///**base 64 encode SSL Private Key**"  // SSL Private Key for HTTPS access

それでは、Terraformを実行しましょう。実行コマンドはお馴染みの以下コマンドとなります。それぞれの動作を試し、F5 XCのコンソールで正しく意図した通り動作するか確認してください。

# 実行前事前作業
$ terraform init
$ terraform plan

# 設定のデプロイ
$ terraform apply

# 設定の削除
$ terraform destroy

3.APIの利用

1で作成した証明書を、操作を行うホストに保存してください。パスワード情報も合わせて利用します。こちらの手順はLinuxの環境を想定して記述しております。

必要となるファイルをローカルへコピーし、該当のディレクトリへ移動します。

$ git clone https://github.com/BeF5/f5j-dc-waap-automation
$ cd f5j-dc-waap-automation/api/http-load-balancer

こちらのディレクトリに保存されているJSONファイルがAPIで指定するパラメータとなります。それぞれのファイルをエディタで開き、**<変数名>** の内容を環境に合わせて変更してください。

修正いただいたJSONファイル使いオブジェクトの作成を行います。Free Plan等、個人アカウントでAPIを利用する場合、URLは https://console.ves.volterra.io/api を指定してください。

必要となるオブジェクトを作成します。オブジェクトの作成順序は、Origin Poolの後、HTTP Load Balancerの作成となります。APIでは順番にリクエストを行い、正しくオブジェクトが確認されたことを確認し、作業を進めてください。

・オブジェクトの作成

# Originl Pool の作成
$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/origin_pools \
       --cert **/path/to/api_credential.p12-file**:**password** \
       --cert-type P12 \
       -X POST \
       -d @base-origin-pool.json

# HTTP LB の作成
$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/http_loadbalancers \
       --cert **/path/to/api_credential.p12-file**:**password** \
       --cert-type P12 \
       -X POST \
       -d @base-httplb.json

オブジェクトを削除する場合には、作成時の逆、HTTP Load Balancerの後、Origin Poolを削除する手順となります。

・オブジェクトの削除

# HTTP LB の削除
$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/http_loadbalancers/**httplb_name** \
       --cert **/path/to/api_credential.p12-file**:**password** \
       --cert-type P12 \
       -X DELETE
  
# Origin Pool の削除
$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/origin_pools/**op_name** \
       --cert **/path/to/api_credential.p12-file**:**password** \
       --cert-type P12 \
       -X DELETE

・さらなる拡張について

F5 XCのLB機能では、更に以下のような設定を追加することによりアプリケーションの可用性やセキュリティを高め、柔軟な通信をブロックすることが可能です。

ロードバランシングメソッド 多様な負荷分散方式からアプリケーションに合わせた設定を選択いただけます
Service Policy IPアドレスや国、リクエストの各種情報を元に通信制御が可能です
Rate Limit 一定時間内に許容するリクエストを指定することにより大量のリクエストからアプリケーションを守ります
Route URL Pathに応じた細かな制御により、APIを中心とした各種リクエストに対する細かな制御が可能です
HTTP Headerの制御 リクエスト、レスポンス双方に対してHTTP Headerの追加・削除の処理が可能です
DDoS (L3) 本記事に記述の利用方法の場合、F5 XC上に機能を展開するため、プラットフォームのDDoS対策機能により外部からの想定外の大量な通信を抑制します
WAF (別途有償) F5が提供する高度なWAFテクノロジーにより、Webアプリケーションに対する高度な攻撃から防御することが可能です
ボット対策機能
(別途有償)
人ではないクライアントからの通信をF5のエンジンで検知することにより、アプリケーションに対するクロールやその他自動化されたリクエストから防御することが可能です
怪しいユーザの検知
(別途有償)
アプリケーションに対する様々なリクエストから、怪しい動きをするクライアントを特定し、その情報をダッシュボードで確認したり、防御することが可能です

・まとめ

こちらの手順を利用することで、誰でも簡単にF5 XC LB機能の利用を開始いただくことができます。F5 XCはこのLB機能の他、優れたダッシュボードを使うことでトラフィックの詳細も把握することができますので、ぜひともこの機会にアプリケーションの可用性の向上にご活用いただければと思います