BIG-IP LTMのHA構成によるWebアクセス負荷分散#
本構成はFJcloud-O 東日本/西日本リージョン3向けとなります。
本ページは、2021年7月時点の参考情報です。
公開中のテンプレートには、以下のイメージが含まれます。
- BIG-IP ASM 1G
- CentOS 7.9 64bit (English) 01
恐れ入りますが、最新版のBIG-IP・Linuxイメージをご使用の上、構築してください。
要求事項#
- 複数のWebサーバへ負荷分散したい
- 複数のWebサーバへ安全に接続したい
- 構築作業の品質を保ちながら効率化したい
対応するデザインパターン概要#
1. 構築の概要#
本パターンではBIG-IP Local Traffic Managerロードバランサー(以下:BIG-IP LTMと記載)のHA構成を構築し、Webサーバへの負荷分散とセキュアなHTTPS接続を実現します。
構築作業ではFJcloud-Oオーケストレーション機能とAnsibleを活用し、自動化を行います。
- FJcloud-Oオーケストレーション機能によるテンプレートの実行
- ネットワーク関連リソース、仮想サーバの構築作業を自動化
- テンプレートの活用方法は テンプレートを使用したサンプルシステムの構築を参照
- Ansibleによるテンプレートの実行
- BIG-IP LTMの設定作業を自動化
2. Ansibleについて#
本パターンで使用するAnsibleの特長は以下の通りです。
- Red Hat社が開発するオープンソースの構成管理ツール
- Playbookというyaml形式のテンプレートファイルを実行することで構成を管理
- サーバやクラウドインフラにかかわる様々な作業を自動化
- エージェントレスで実行可能であり、接続にはSSH接続が必須
- モジュールを利用することで高い拡張性を実現
- BIG-IPのモジュールは こちら にて公開
構造(イメージ図)#
構成図#
括弧内の値は、本ガイドにて紹介するテンプレートを使用して構築した際の設定値です。
ネットワーク論理構成図#
テストクライアントサーバからの通信はBIG-IP LTMにてSSLオフロードされ、常時httpでWebサーバにアクセスされます。
実装サンプル#
1. ネットワーク関連リソースの作成#
下記のテンプレートファイルをダウンロードし、API実行環境に展開してください。
Note
本ガイドで使用する各テンプレートファイルは、設定ファイル(yaml形式)とパラメータファイル(json形式)で構成され、相互に依存関係が存在します。
IaaSポータルの「テンプレート」⇒「スタック一覧」画面からのAPIの実行はできません。
以下のガイドに記載の例に従い、LinuxベースのAPI実行環境を配備の上実行してください。
(1) 仮想ネットワーク・仮想ルータの作成#
APIを使用してスタックを作成することで、以下の仮想ネットワーク(サブネット含む)・仮想ルータを作成します。
- 内部ネットワークA0~A4
- 仮想ルータA0~A2
事前準備として、以下を実施してください。
- IaaSポータルの「ネットワーク」⇒「仮想ネットワーク」⇒「fip-net」と選択した画面で、仮想ネットワークIDを控えます。
- 展開した
PARAMETER_BIGIP-CDP-NETWORK.json
ファイル”fip_net”の値を、上記で控えた値に書き換えます。
- 設定項目(REST API)
リクエストパラメータ名 | 変数例 | 設定値例 | 内容 |
---|---|---|---|
- | $TEMPLATE_FILE | "TEMPLATE_BIGIP-CDP-NETWORK.yaml" | ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-NETWORK.yaml のパスを指定 |
- | $PARAMETER_FILE | "PARAMETER_BIGIP-CDP-NETWORK.json" | ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-NETWORK.json のパスを指定 |
"stack_name" | $STACK_NAME | "bigip-CDP-network" | 作成するスタック名を指定 |
"template" | $TEMPLATE | $(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') |
変数$TEMPLATE_FILE には、ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-NETWORK.yaml のパスを指定 |
"parameters" | $PARAMETER | $(cat ${PARAMETER_FILE}) | 変数PARAMETER_FILE には、ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-NETWORK.json のパスを指定 |
- 実行API例
STACK_NAME=bigip-CDP-network TEMPLATE_FILE=TEMPLATE_BIGIP-CDP-NETWORK.yaml PARAMETER_FILE=PARAMETER_BIGIP-CDP-NETWORK.json TEMPLATE=$(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') PARAMETER=$(cat ${PARAMETER_FILE}) curl -k $ORCHESTRATION/v1/${PROJECT_ID}/stacks -X POST \ -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \ -d @- <<EOL { "stack_name": "${STACK_NAME}", "template": "${TEMPLATE}", "parameters": ${PARAMETER} } EOL
(2) ルータA2用ファイアウォール作成#
APIを使用してスタックを作成することで、ルータA2に付与するファイアウォールを作成します。
作成するファイアウォールには以下のファイアウォールルールが設定されます。
No. | ファイアウォールルール名 | action | IPプロトコル | 接続元IPアドレス | 接続元使用ポート | 接続先IPアドレス | 接続先使用ポート |
---|---|---|---|---|---|---|---|
1 | firewall_ingress_rule_allow_vpncider | allow | tcp | 192.168.246.0/24 (SSL-VPNクライアントIPプール) |
any | 192.168.50.0/24 | any |
2 | firewall_ingress_rule_allow_vpnendpoint | allow | tcp | 0.0.0.0/0 | any | 192.168.90.5 (※1) |
443 |
3 | firewall_egress_rule_allow_all | allow | any | 192.168.50.0/24 | any | any | any |
4 | firewall_rule_all_deny | allow | any | any | any | any | any |
※1:
192.168.90.5/32はSSL-VPN ConnectionリソースのIPアドレスとして利用されます。
詳細は 機能説明書 をご参照ください。
事前準備として、以下を実施してください。
- IaaSポータルの「ネットワーク」⇒「仮想ルータ」⇒「management-net-router」と選択した画面で、仮想ルータIDを控えます。
- 展開した
PARAMETER_BIGIP-CDP-FW_MANAGEMENT.json
ファイル”router_id”の値を、上記で控えた値に書き換えます。
- 設定項目(REST API)
リクエストパラメータ名 | 変数例 | 設定値例 | 内容 |
---|---|---|---|
- | $TEMPLATE_FILE | "TEMPLATE_BIGIP-CDP-FW_MANAGEMENT.yaml" | ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-FW_MANAGEMENT.yaml のパスを指定 |
- | $PARAMETER_FILE | "PARAMETER_BIGIP-CDP-FW_MANAGEMENT.json" | ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-FW_MANAGEMENT.json のパスを指定 |
"stack_name" | $STACK_NAME | "bigip-CDP-management-fw" | 作成するスタック名を指定 |
"template" | $TEMPLATE | $(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') |
変数$TEMPLATE_FILE には、ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-FW_MANAGEMENT.yaml のパスを指定 |
"parameters" | $PARAMETER | $(cat ${PARAMETER_FILE}) | 変数PARAMETER_FILE には、ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-FW_MANAGEMENT.json のパスを指定 |
- 実行API例
STACK_NAME=bigip-CDP-management-fw TEMPLATE_FILE=TEMPLATE_BIGIP-CDP-FW_MANAGEMENT.yaml PARAMETER_FILE=PARAMETER_BIGIP-CDP-FW_MANAGEMENT.json TEMPLATE=$(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') PARAMETER=$(cat ${PARAMETER_FILE}) curl -k $ORCHESTRATION/v1/${PROJECT_ID}/stacks -X POST \ -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \ -d @- <<EOL { "stack_name": "${STACK_NAME}", "template": "${TEMPLATE}", "parameters": ${PARAMETER} } EOL
(3) セキュリティグループの作成#
APIを使用してスタックを作成することで、以下5つのセキュリティグループを作成します。
作成する5つのセキュリティグループにはそれぞれ、全ての通信を許可する以下表のセキュリティグループルールが設定されます。
これらのセキュリティグループは、以下手順にて仮想サーバを作成する際、各サーバのポートに対し自動で設定されます。
-
セキュリティグループ
- internal-security-group
- external-security-group
- ha-security-group
- application-security-group
- management-security-group
-
セキュリティグループルール
No. | ルール | 方向 | オープンポート | ポート番号 | 接続先 | CIDR |
---|---|---|---|---|---|---|
1 | ALL TCP | 送信 | ポート番号 | 1 - 65535 | - | - |
2 | ALL UDP | 送信 | ポート番号 | 1 - 65535 | - | - |
3 | ALL TCP | 受信 | ポート番号 | 1 - 65535 | - | - |
4 | ALL UDP | 受信 | ポート番号 | 1 - 65535 | - | - |
- 設定項目(REST API)
リクエストパラメータ名 | 変数例 | 設定値例 | 内容 |
---|---|---|---|
- | $TEMPLATE_FILE | "TEMPLATE_BIGIP-CDP-SECURITY_GROUP.yaml" | ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-SECURITY_GROUP.yaml のパスを指定 |
"stack_name" | $STACK_NAME | "bigip-CDP-security-group" | 作成するスタック名を指定 |
"template" | $TEMPLATE | $(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') |
変数$TEMPLATE_FILE には、ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-SECURITY_GROUP.yaml のパスを指定 |
- 実行API例
STACK_NAME=bigip-CDP-security-group TEMPLATE_FILE=TEMPLATE_BIGIP-CDP-SECURITY_GROUP.yaml TEMPLATE=$(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') curl -k $ORCHESTRATION/v1/${PROJECT_ID}/stacks -X POST \ -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \ -d @- <<EOL { "stack_name": "${STACK_NAME}", "template": "${TEMPLATE}" } EOL
2. BIG-IP LTMの作成#
(1) BIGIP用 共有ポート作成#
APIを使用してスタックを作成することで、BIG-IP LTM用の共有ポートを作成します。
以下の共有ポートが作成されます。
- 代表IPアドレス:192.168.10.99
- ロードバランス用バーチャルサーバIPアドレス:192.168.10.201
- 代表IPアドレス:192.168.20.99
- 設定項目(REST API)
リクエストパラメータ名 | 変数例 | 設定値例 | 内容 |
---|---|---|---|
- | $TEMPLATE_FILE | "TEMPLATE_BIGIP-CDP-VIRTUAL_PORT.yaml" | ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-VIRTUAL_PORT.yaml のパスを指定 |
"stack_name" | $STACK_NAME | "bigip-CDP-virtual-port" | 作成するスタック名を指定 |
"template" | $TEMPLATE | $(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') |
変数$TEMPLATE_FILE には、ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-VIRTUAL_PORT.yaml のパスを指定 |
- 実行API例
STACK_NAME=bigip-CDP-virtual-port TEMPLATE_FILE=TEMPLATE_BIGIP-CDP-VIRTUAL_PORT.yaml TEMPLATE=$(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') curl -k $ORCHESTRATION/v1/${PROJECT_ID}/stacks -X POST \ -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \ -d @- <<EOL { "stack_name": "${STACK_NAME}", "template": "${TEMPLATE}" } EOL
(2) BIG-IP LTM(Active)の作成#
APIを使用してスタックを作成することで、 BIG-IP LTM(Active)を作成します。
- 設定項目(REST API)
リクエストパラメータ名 | 変数例 | 設定値例 | 内容 |
---|---|---|---|
- | $TEMPLATE_FILE | "TEMPLATE_BIGIP-CDP-BIGIP-SERVER.yaml" | ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-BIGIP-SERVER.yaml のパスを指定 |
- | $PARAMETER_FILE | "PARAMETER_BIGIP-CDP-BIGIP-SERVER-active.json" | ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-BIGIP-SERVER-active.json のパスを指定 |
"stack_name" | $STACK_NAME | "bigip-CDP-server-active" | 作成するスタック名を指定 |
"template" | $TEMPLATE | $(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') |
変数$TEMPLATE_FILE には、ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-BIGIP-SERVER.yaml のパスを指定 |
"parameters" | $PARAMETER | $(cat ${PARAMETER_FILE}) | 変数PARAMETER_FILE には、ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-BIGIP-SERVER-active.json のパスを指定 |
- 実行API例
STACK_NAME=bigip-CDP-server-active TEMPLATE_FILE=TEMPLATE_BIGIP-CDP-BIGIP-SERVER.yaml PARAMETER_FILE=PARAMETER_BIGIP-CDP-BIGIP-SERVER-active.json TEMPLATE=$(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') PARAMETER=$(cat ${PARAMETER_FILE}) curl -k $ORCHESTRATION/v1/${PROJECT_ID}/stacks -X POST \ -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \ -d @- <<EOL { "stack_name": "${STACK_NAME}", "template": "${TEMPLATE}", "parameters": ${PARAMETER} } EOL
(3) BIG-IP LTM(Standby)の作成#
APIを使用してスタックを作成することで、 BIG-IP LTM(Standby)を作成します。
- 設定項目(REST API)
リクエストパラメータ名 | 変数例 | 設定値例 | 内容 |
---|---|---|---|
- | $TEMPLATE_FILE | "TEMPLATE_BIGIP-CDP-BIGIP-SERVER.yaml" | ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-BIGIP-SERVER.yaml のパスを指定 |
- | $PARAMETER_FILE | "PARAMETER_BIGIP-CDP-BIGIP-SERVER-standby.json" | ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-BIGIP-SERVER-standby.json のパスを指定 |
"stack_name" | $STACK_NAME | "bigip-CDP-server-standby" | 作成するスタック名を指定 |
"template" | $TEMPLATE | $(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') |
変数$TEMPLATE_FILE には、ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-BIGIP-SERVER.yaml のパスを指定 |
"parameters" | $PARAMETER | $(cat ${PARAMETER_FILE}) | 変数PARAMETER_FILE には、ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-BIGIP-SERVER-standby.json のパスを指定 |
- 実行API例
STACK_NAME=bigip-CDP-server-standby TEMPLATE_FILE=TEMPLATE_BIGIP-CDP-BIGIP-SERVER.yaml PARAMETER_FILE=PARAMETER_BIGIP-CDP-BIGIP-SERVER-standby.json TEMPLATE=$(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') PARAMETER=$(cat ${PARAMETER_FILE}) curl -k $ORCHESTRATION/v1/${PROJECT_ID}/stacks -X POST \ -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \ -d @- <<EOL { "stack_name": "${STACK_NAME}", "template": "${TEMPLATE}", "parameters": ${PARAMETER} } EOL
3. Webサーバの作成#
(1) キーペア作成#
サーバにログインするためのキーペアを作成します。
- IaaSポータルの「コンピュート」⇒「キーペア」と選択した画面で、右上の「+」ボタンをクリックしキーペアを作成します。
- キーペア名「BigipKeypair」を入力し「次へ」をクリックし、任意の場所にダウンロードします。
(2) Webサーバ1の作成#
APIを使用してスタックを作成することで、Webサーバ1を作成します。
本手順により、以下の設定が自動で行われます。
- Rootユーザのパスワード設定
- 任意のパスワードへの変更は、
PARAMETER_BIGIP-CDP-WEBSERVER1.json
内の"root_password"
の値を修正
- 任意のパスワードへの変更は、
- yum updateの実行
- httpdのインストール
- 設定項目(REST API)
リクエストパラメータ名 | 変数例 | 設定値例 | 内容 |
---|---|---|---|
- | $TEMPLATE_FILE | "TEMPLATE_BIGIP-CDP-WEBSERVER.yaml" | ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-WEBSERVER.yaml のパスを指定 |
- | $PARAMETER_FILE | "PARAMETER_BIGIP-CDP-WEBSERVER1.json" | ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-WEBSERVER1.json のパスを指定 |
"stack_name" | $STACK_NAME | "bigip-CDP-webserver1" | 作成するスタック名を指定 |
"template" | $TEMPLATE | $(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') |
変数$TEMPLATE_FILE には、ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-WEBSERVER.yaml のパスを指定 |
"parameters" | $PARAMETER | $(cat ${PARAMETER_FILE}) | 変数PARAMETER_FILE には、ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-WEBSERVER1.json のパスを指定 |
- 実行API例
STACK_NAME=bigip-CDP-webserver1 TEMPLATE_FILE=TEMPLATE_BIGIP-CDP-WEBSERVER.yaml PARAMETER_FILE=PARAMETER_BIGIP-CDP-WEBSERVER1.json TEMPLATE=$(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') PARAMETER=$(cat ${PARAMETER_FILE}) curl -k $ORCHESTRATION/v1/${PROJECT_ID}/stacks -X POST \ -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \ -d @- <<EOL { "stack_name": "${STACK_NAME}", "template": "${TEMPLATE}", "parameters": ${PARAMETER} } EOL
(3) Webサーバ2の作成#
APIを使用してスタックを作成することで、 Webサーバ2を作成します。
本手順により、以下の設定が自動で行われます。
- Rootユーザのパスワード設定
- 任意のパスワードへの変更は、
PARAMETER_BIGIP-CDP-WEBSERVER2.json
内の"root_password"
の値を修正
- 任意のパスワードへの変更は、
- yum updateの実行
- httpdのインストール
- 設定項目(REST API)
リクエストパラメータ名 | 変数例 | 設定値例 | 内容 |
---|---|---|---|
- | $TEMPLATE_FILE | "TEMPLATE_BIGIP-CDP-WEBSERVER.yaml" | ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-WEBSERVER.yaml のパスを指定 |
- | $PARAMETER_FILE | "PARAMETER_BIGIP-CDP-WEBSERVER2.json" | ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-WEBSERVER2.json のパスを指定 |
"stack_name" | $STACK_NAME | "bigip-CDP-webserver2" | 作成するスタック名を指定 |
"template" | $TEMPLATE | $(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') |
変数$TEMPLATE_FILE には、ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-WEBSERVER.yaml のパスを指定 |
"parameters" | $PARAMETER | $(cat ${PARAMETER_FILE}) | 変数PARAMETER_FILE には、ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-WEBSERVER2.json のパスを指定 |
- 実行API例
STACK_NAME=bigip-CDP-webserver2 TEMPLATE_FILE=TEMPLATE_BIGIP-CDP-WEBSERVER.yaml PARAMETER_FILE=PARAMETER_BIGIP-CDP-WEBSERVER2.json TEMPLATE=$(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') PARAMETER=$(cat ${PARAMETER_FILE}) curl -k $ORCHESTRATION/v1/${PROJECT_ID}/stacks -X POST \ -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \ -d @- <<EOL { "stack_name": "${STACK_NAME}", "template": "${TEMPLATE}", "parameters": ${PARAMETER} } EOL
4. Ansibleサーバの作成#
APIを使用してスタックを作成することで、Ansibleサーバを作成します。
本手順により、以下の設定が自動で行われます。
- Rootユーザのパスワード設定
- 任意のパスワードへの変更は、
PARAMETER_BIGIP-CDP-AnsibleSERVER.json
内の"root_password"
の値を修正
- 任意のパスワードへの変更は、
- yum updateの実行
- epel-release, ansible のインストール
- 設定項目(REST API)
リクエストパラメータ名 | 変数例 | 設定値例 | 内容 |
---|---|---|---|
- | $TEMPLATE_FILE | "TEMPLATE_BIGIP-CDP-AnsibleSERVER.yaml" | ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-AnsibleSERVER.yaml のパスを指定 |
- | $PARAMETER_FILE | "PARAMETER_BIGIP-CDP-AnsibleSERVER.json" | ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-AnsibleSERVER.json のパスを指定 |
"stack_name" | $STACK_NAME | "bigip-CDP-ansibleserver" | 作成するスタック名を指定 |
"template" | $TEMPLATE | $(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') |
変数$TEMPLATE_FILE には、ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-AnsibleSERVER.yaml のパスを指定 |
"parameters" | $PARAMETER | $(cat ${PARAMETER_FILE}) | 変数PARAMETER_FILE には、ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-AnsibleSERVER.json のパスを指定 |
- 実行API例
STACK_NAME=bigip-CDP-ansibleserver TEMPLATE_FILE=TEMPLATE_BIGIP-CDP-AnsibleSERVER.yaml PARAMETER_FILE=PARAMETER_BIGIP-CDP-AnsibleSERVER.json TEMPLATE=$(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') PARAMETER=$(cat ${PARAMETER_FILE}) curl -k $ORCHESTRATION/v1/${PROJECT_ID}/stacks -X POST \ -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \ -d @- <<EOL { "stack_name": "${STACK_NAME}", "template": "${TEMPLATE}", "parameters": ${PARAMETER} } EOL
5. テストクライアントサーバの作成#
APIを使用してスタックを作成することで、テストクライアントサーバを作成します。
本手順により、以下の設定が自動で行われます。
- Rootユーザのパスワード設定
- 任意のパスワードへの変更は、
PARAMETER_BIGIP-CDP-testclient.json
内の"root_password"
の値を修正
- 任意のパスワードへの変更は、
- 設定項目(REST API)
リクエストパラメータ名 | 変数例 | 設定値例 | 内容 |
---|---|---|---|
- | $TEMPLATE_FILE | "TEMPLATE_BIGIP-CDP-testclient.yaml" | ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-testclient.yaml のパスを指定 |
- | $PARAMETER_FILE | "PARAMETER_BIGIP-CDP-testclient.json" | ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-testclient.json のパスを指定 |
"stack_name" | $STACK_NAME | "bigip-CDP-testclient" | 作成するスタック名を指定 |
"template" | $TEMPLATE | $(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') |
変数$TEMPLATE_FILE には、ダウンロードしたテンプレートファイルTEMPLATE_BIGIP-CDP-testclient.yaml のパスを指定 |
"parameters" | $PARAMETER | $(cat ${PARAMETER_FILE}) | 変数PARAMETER_FILE には、ダウンロードしたパラメータファイルPARAMETER_BIGIP-CDP-testclient.json のパスを指定 |
- 実行API例
STACK_NAME=bigip-CDP-testclient TEMPLATE_FILE=TEMPLATE_BIGIP-CDP-testclient.yaml PARAMETER_FILE=PARAMETER_BIGIP-CDP-testclient.json TEMPLATE=$(cat ${TEMPLATE_FILE} | sed -z -e 's/\n/\\n/g') PARAMETER=$(cat ${PARAMETER_FILE}) curl -k $ORCHESTRATION/v1/${PROJECT_ID}/stacks -X POST \ -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \ -d @- <<EOL { "stack_name": "${STACK_NAME}", "template": "${TEMPLATE}", "parameters": ${PARAMETER} } EOL
6. 管理用SSL-VPNの作成#
BIG-IP LTMへのセキュアな接続を実現するため、管理用のSSL-VPNを作成します。
(1) VPNサービス作成#
- ルータA2にVPNサービスを設定
- 作成手順は初期構築ガイド VPNサービスを作成 を参照
- 以下の設定値例を参照
パラメータ名 | 設定値例 |
---|---|
仮想ルータ名 | management-net-router |
サブネット名 | management-subnet |
VPNサービス名 | BIGIP-CDP-VPN |
管理状態 | true |
(2) SSL-VPNコネクションの作成#
- 以下のSSL-VPNコネクションを作成
- 作成手順は初期構築ガイド SSL-VPNコネクションを作成 を参照
- 以下の設定値例を参照
パラメータ名 | 設定値例 |
---|---|
SSL-VPN接続名 | BIGIP-CDP-SSLVPN |
管理状態 | true |
証明書 | FJCloud証明書(デフォルト) |
クライアントIPプール | 192.168.246.0/24 |
7. BIG-IP LTMの設定#
構築したBIG-IP LTM2台に対し、以下の設定を行います。
- ライセンス認証
- ライセンス認証の実施
- Ansible実行による設定
- 初期パスワード変更
- 各種設定変更
- 基本設定 (ホスト名、IPアドレス、VLANなど)
- HA構成の設定
- Floating-IPアドレスの設定
- ロードバランスに必要な設定の実施
- Webサーバ1・2へのスタティックルートの設定
- Webサーバ1・2へのロードバランスの設定
(1) ライセンス認証#
BIG-IP LTMにSSHログインし、ライセンス認証を実施します。
FUJITSU Hybrid IT Service FJcloud-O IaaS BIG-IP スタートガイド(PDF形式) の第5 章 BIG-IP ライセンス登録
を参照の上、実施してください。
(2) Ansible実行による設定#
(A) 事前準備#
以下の手順で、Ansible実行のための事前準備を実施します。
-
テンプレートファイルのダウンロード
- Ansible実行前に下記のテンプレートファイルをダウンロードし、API実行環境に展開
Ansibleテンプレートファイル
- Ansible実行前に下記のテンプレートファイルをダウンロードし、API実行環境に展開
-
Ansibleサーバへログイン
- rootユーザを使用し、SSL-VPN経由でSSHログイン
-
/etc/ansible/roles/inventory
ディレクトリを作成し、移動- 実行例:
[root@ansible-server ~]# mkdir /etc/ansible/roles/inventory [root@ansible-server ~]# cd /etc/ansible/roles/inventory
- 実行例:
-
ダウンロードした
bigip_ansible.zip
を解凍した以下のファイル・サブディレクトリ一式を、API実行環境から上記のディレクトリに転送
(B) Playbookの実行#
以下3つのPlaybook(yaml形式)を実行することで、BIG-IP LTM2台の設定を実行します。
必要に応じて各yamlファイルを修正のうえご活用ください。
yamlファイル | 設定内容 |
---|---|
01_setup.yaml | 初期パスワード変更 |
02_configureHA.yaml | 各種設定変更 |
03_create_virtualserver.yaml | ロードバランスに必要な設定の変更 |
01_setup.yaml
の実行- BIG-IPサーバ2台の初期パスワード変更を含む設定を実施
- インベントリファイル(制御したいホストを定義するファイル)として
hosts
ファイルを指定し、この中の"ansible_ssh_pass"
の値を修正することで初期パスワードを設定可能 hosts
ファイルでは、以下の制御対象ホストとグループを定義- BIG-IP LTM(Active) ホスト名:
"bigip01"
- BIG-IP LTM(Standby) ホスト名:
"bigip02"
- 上記2ホストが所属するグループ名:
"bigip"
同ファイル内13行目に"[bigip]"
と記載し定義
- BIG-IP LTM(Active) ホスト名:
- 実行例:
[root@ansible-server inventory]# ansible-playbook -i hosts 01_setup.yaml
-
02_configureHA.yaml
の実行- BIG-IPサーバ2台の各種設定変更を実施
- インベントリファイルとして
hosts
ファイルを指定 - 各設定パラメータは
host_vars/bigip01.yaml
・host_vars/bigip02.yaml
・group_vars/bigip.yaml
ファイルの対応箇所を修正 - 実行例:
[root@ansible-server inventory]# ansible-playbook -i hosts 02_configureHA.yaml
-
bigip01.yaml
と02_configureHA.yaml
ファイルの対応例
以下を参考に、各設定パラメータを設定してください。
03_create_virtualserver.yaml
の実行- ロードバランスに必要な設定の変更を、BIG-IP LTM(Active)に投入
- インベントリファイルとして
hosts
ファイルを指定 - 各設定パラメータは
bigip01.yaml
ファイルの対応箇所を修正 - 実行例:
[root@ansible-server inventory]# ansible-playbook -i hosts 03_create_virtualserver.yaml
(3) Ansibleの実行に関する補足#
(A) 冪(べき)等性に関して#
Ansibleを利用した構成管理では、Playbookには視認性の高い「構築後のあるべき姿」が記載されます。
同一のPlaybookを複数回実行する場合、何度実行しても同一の結果を得ることが可能です。(冪(べき)等性)
以下に、Playbook(02_configureHA.yaml
)を複数回、2台のBIG-IP LTMに対して実行した場合のイメージを記載します。
上側のキャプチャは初回実行時、下側は2回目実行時のものです。
初回実行時、設定内容は"changed"
と表示されますが、2回目の実行時は変更なしのため"ok"
と表示されます。
(B) Ansible設定ファイルに関して#
本パターンでのAnsible設定ファイルに関する補足情報を以下に記載します。
- Ansible設定ファイルの内容
- 主なAnsible設定ファイルとその設定内容は以下の通りです。
ファイル名 | 内容 |
---|---|
bigip.yaml | bigip01、bigip02に設定する共通パラメータ |
bigip01.yaml | BIG-IP LTM(Active)の固有パラメータ |
bigip02.yaml | BIG-IP LTM(Standby)の固有パラメータ |
hosts
ファイルの設定内容hosts
ファイルでのサーバホスト・グループに関する設定内容は以下の通りです。# This is the default ansible 'hosts' file. # # It should live in /etc/ansible/hosts # # - Comments begin with the '#' character # - Blank lines are ignored # - Groups of hosts are delimited by [header] elements # - You can enter hostnames or ip addresses # - A hostname/ip can be a member of multiple groups [bigip] #bigipというグループ名を設定し、bigipのIPアドレス、ユーザー、パスワードを設定(以下例ではパスワード"aaa"と指定) bigip01 ansible_host=192.168.50.11 ansible_user=admin ansible_ssh_pass=‘aaa' bigip02 ansible_host=192.168.50.12 ansible_user=admin ansible_ssh_pass=‘aaa' [bigip_master] #特定条件で指定したインスタンスのみ処理をしたい場合に記載 bigip01 [bigip_slave] #特定条件で指定したインスタンスのみ処理をしたい場合に記載 bigip02
hosts
ファイルと01_setup.yaml
ファイルの関連性01_setup.yaml
ファイルの実行時、hosts
ファイル内に記載のグループ"bigip"
にあるインスタンスにて実行されます。01_setup.yaml
ファイルでの設定内容は以下をご確認ください。--- - name: bigip setup hosts: bigip #hostsファイルのグループbigipにあるインスタンスにて実行 gather_facts: no connection: local collections: - f5networks.f5_modules ~~省略~~
hosts
ファイルと02_configureHA.yaml
ファイルの関連性02_configureHA.yaml
の実行時、"when"
と記載された行では、hosts
ファイルにある特定のグループのみ処理が実行されます。02_configureHA.yaml
ファイルでの設定内容は以下をご確認ください。~~省略~~ - name: Add-to-trust to be executed only from master to slave bigip_device_trust: provider: "{{ provider }}" peer_server: "{{ peer_mgmt }}" peer_hostname: "{{ peer_hostname }}" peer_user: "{{ admin_user }}" peer_password: "{{ admin_password }}" when: inventory_hostname in groups[‘bigip_master’] #when:~ hostsファイルにある特定のグループのみ処理を実行 ~~省略~~
メリット・効果#
本パターンではFJcloud-Oオーケストレーション機能およびAnsibleを活用します。
これにより、以下のメリットを享受可能です。
- 環境(テスト・本番)が変わっても同一の内容で構築可能
- 構築が自動化されることでオペレーションミスを防止し、構築期間を短縮
- テンプレートによる構築作業を実施することで、詳細な構築手順書等の事前準備が不要
- テンプレートのバージョン管理による容易な構成管理が実現
注意事項#
- 本パターンは、2021年7月時点のFJcloud-O 東日本/西日本リージョン3にて動作検証をしています。
- 本パターンは、Ansibleサーバにインストールされたansible 2.9.23にて動作確認済です。
- 本パターンは、AnsibleサーバにインストールされたPython 2.7.5にて動作確認済です。
- Ansibleのファイル記載方式・実行方法の詳細は、Ansibleの 公式ドキュメント を参照ください。
- 本パターンにおけるBIG-IP LTMの設定や冗長方式のパラメータ、ロードバランス方式などはあくまでも一例です。
実際に利用される場合、ご使用の環境に適したパラメータ・方式にて導入ください。 - BIG-IP LTMの設定にあたっては、以下の資料を適宜ご参照ください。
FUJITSU Hybrid IT Service FJcloud-O IaaS BIG-IP スタートガイド(PDF形式)