F5 BIG-IP と Puppet によるアプリケーション展開の自動化

導入

企業が新たな収益源を開拓するため、あるいは単に競争力を維持するためにデジタル変革戦略を追求する中で、大きな原動力となるのはスピード、つまり真に優れた顧客体験を迅速に提供できる能力の必要性です。 組織が DevOps 方法論を採用するにつれて、現在のネットワーク アーキテクチャが制限要因になっていることがわかってきました。 従来のネットワーク アーキテクチャは静的であり、人為的エラーの影響を受けやすく、管理には多大な運用投資が必要です。 拡張された継続的インテグレーション/開発 (CI/CD) パイプラインの一部として、アプリケーションの展開をサポートするネットワーク インフラストラクチャだけでなく、DNS や負荷分散などのネットワーク サービスも自動化することが不可欠です。

ネットワークの自動化により、組織は俊敏性を高めることができ、より動的で信頼性の高いネットワーク、運用効率の向上、導入時間の短縮、より一貫性のあるアプリケーション導入が可能になります。

F5 のプログラマビリティにより IT と DevOps の生産性が向上

プログラミング可能性は、運用の自動化を実現する重要な要素です。 F5 は長年にわたりこの概念を採用し、すべての F5® BIG-IP® アプリケーション配信コントローラ (ADC) にわたってプログラマビリティをサポートし、アプリケーション ネットワーク サービス ファブリックの俊敏性と拡張性を実現しています。 BIG-IP ADC の物理エディションと仮想エディションの両方に、柔軟でプログラム可能な管理、制御、およびデータ プレーンが備わっています。

管理プレーン
  • F5 iControl®: SOAP/XML/REST を利用して、異なるシステム間のオープンな通信を確保し、BIG-IP 機能を自動化します。 F5-iControl gem もサポートされており、Web サービスを使用して F5 デバイスに接続できるようになります。
  • F5 iApps®: テンプレート化された機能セットは、F5 デバイスでの構成とアプリケーションの展開を自動化するのに役立ちます。
コントロール プレーン
  • F5 iCall™: この Tcl ベースのスクリプト フレームワークを使用すると、予想される Tcl コマンドとともに TMSH (TMOS Shell コマンド ライン インターフェイス) コマンドを実行して、実行中の F5 デバイスの構成を指示できます。
データプレーン
  • F5 iRules®: 高度にカスタマイズ可能でプログラム可能な Tcl ベースのスクリプト言語である iRules を使用すると、トラフィックをリアルタイムで検査、分析、変更、ルーティング、リダイレクト、または操作できます。 次の進化である iRules Language eXtensions (LX) は、BIG-IP プラットフォーム (v12.1) で node.js 機能を有効にします。

ネットワーク プログラマビリティに対する包括的なアプローチにより、運用やビジネス イベント、または機会に応じて運用がオンデマンドで対応できるようになります。 ネットワーク プログラマビリティを実現する F5 の製品ポートフォリオにより、組織は効率的に自動化とオーケストレーションを行うことができます。

F5 と Puppet の共同ソリューション

F5 と Puppet は提携し、包括的なソリューションを通じて継続的インテグレーションと継続的デプロイメント (CI/CD) をサポートする現代のビジネスの俊敏性のニーズに応えています。 Puppet は、コンピューティング、ネットワーク、ストレージ リソースの管理を自動化するための統合されたソフトウェア定義のアプローチを提供する、商用サポート付きの構成管理ツールである Puppet Enterprise を提供しており、組織がよりシームレスにアプリケーションを配信できるように支援します。

Puppet Enterprise は、IT 自動化に対する宣言型のモデルベースのアプローチを採用しており、単純で反復的なタスクの自動化から大規模なパブリック クラウド、プライベート クラウド、ハイブリッド クラウドの導入まで、さまざまな機能を実行できます。 これらのクラウド環境で構成変更をモデル化、テストし、展開する機能により、インフラストラクチャ リソースを効率的に使用できます。モジュールによる Puppet の拡張性により、組織は既存のフレームワークを基盤として BIG-IP デバイスをサポートできます。

一般的な Puppet インフラストラクチャでは、管理対象システムごとにソフトウェア エージェントがインストールされています。 これらのエージェントは、システムに関する「ファクト」と呼ばれる複数の情報を定期的に Puppet マスター サーバーに送信します。 Puppet マスターは、受信したファクトとマニフェスト (Puppet コードで構成された Puppet プログラム) を使用して、最終的な構成を定義するカタログをコンパイルし、そのカタログをエージェントに送り返します。 エージェントはカタログで定義されたシステム状態を適用できます。 

ソフトウェア エージェントがノード内で直接実行されるサーバーの場合とは異なり、Puppet インフラストラクチャでは、BIG-IP デバイスのエージェントを実行するプロキシを設定できます。 これで、BIG-IP デバイスを Puppet の管理下に置き、ソリューションが提供するメリットを享受できるようになります。 Puppet エージェントは、Puppet マスターとは別のサーバー上に存在することも、同じサーバー上で実行することもできます。

Puppet 言語ファイルはマニフェストと呼ばれ、 .ppファイル拡張子で名前が付けられます。 Puppet 言語の中核はリソースの宣言です。 言語のその他の部分はすべて、リソースの宣言方法に柔軟性と利便性を追加するために存在します。 Puppet マスターは常に現在のノードの環境によって設定されたメイン マニフェストを使用します。ここでは、宣言的な方法でリソースを記述できます。 

F5 と Puppet の共同ソリューションのデータフローを図 1 に示します。

  1. Puppet エージェントを実行するプロキシは、リモート シェル アクセス、API、またはその他の手段を介して BIG-IP デバイスに関する情報を定期的に取得し、それをファクトとして Puppet マスターに渡します。
  2. Puppet マスターはカタログをコンパイルし、それをエージェントまたはプロキシに返します。
  3. Puppet プロキシは、Puppet マスターから受信したカタログを iControl gem コード スニペットに変換し、BIG-IP デバイス上の最終的な構成を作成します。
  4. iControl gem ファイルは、ノード構成パラメータを iControl メッセージに変換し、記述された状態を API 経由で強制するために使用されます。
F5 と Puppet の共同ソリューション。
図1: F5 と Puppet の共同ソリューション。

この共同実装の鍵となる 2 つの機能は、iControl API と Puppet ネットワーク デバイス管理です。 F5 iControl API は Puppet プロキシと F5 BIG-IP デバイス間の通信を提供し、Puppet Network Device Management は組織がネットワーク デバイスを構成するのに役立ちます。 Puppet ネットワーク デバイスと F5 iControl API を使用すると、Puppet F5 モジュールを導入し、BIG-IP デバイスに Puppet 管理を導入できます。 Puppet F5 モジュールは、仮想サーバーの導入と管理、プールとプール メンバーの構成と管理など、BIG-IP オブジェクトを管理するためのリソースを提供します。 Puppet は F5 モジュールを使用して BIG-IP デバイス用に定義されたリソースを見つけ、F5 モジュールに保存されているカスタム クラスまたは定義済みタイプを自動的に読み込みます。

主なメリット

この F5 と Puppet の共同ソリューションは、次のことに役立ちます。

  • 同じツールでコンピューティングとネットワーク インフラストラクチャを管理し、効率性を高めます。
  • システムとネットワーク チーム間の時間のかかる引き継ぎを排除します。
  • BIG-IP デバイスの設定の一貫性を強制します (設定が望ましい状態から逸脱すると、Puppet は自動的に設定された状態に戻します)。
  • 一度構成を記述するだけで、それを大規模に多数のシステムに適用できるため、スケーラビリティとサービスの弾力性を実現できます。
  • 素早い再生を可能にします。 アプリケーションをプレプロダクションからプロダクションに移行するときは、Puppet を実行するだけで、Puppet がテスト環境と同じようにすべてを構成します。
  • アプリケーション配信の速度を向上します。

Puppet F5 モジュールは、一般的なアプリケーションの展開に必要なサーバー ノード、プール、仮想サーバーなどの BIG-IP オブジェクトを作成および構成できます。 複数の BIG-IP デバイスを導入する場合、組織は Puppet モジュールを使用して、デバイスのライセンス、DNS および NTP 設定、内部および外部 VLAN、セルフ IP、ルート ドメインなどのすべての初期 BIG-IP オンボーディング タスクを自動化できます。

使用事例: BIG-IP プラットフォームでの HTTP アプリケーションの展開

BIG-IP デバイス上で一般的な HTTP アプリケーションを構成するには、ノード、モニター、プロファイルを設定し、仮想 IP アドレスを展開するなどを行う必要があります。 これは、単一の BIG-IP デバイスで自動化を行わなくても管理できるように思えるかもしれませんが、大規模なエンタープライズ アプリケーションを提供するために、複数のデータ センターにまたがる複数の F5 デバイスを構成するのは複雑で時間がかかり、エラーが発生しやすくなります。 宣言型のモデルベースの Puppet マニフェストを使用すると、組織はデータセンター全体の複数の BIG-IP デバイス上でアプリケーションの展開を管理および自動化できます。

デプロイメントを開始するには、Puppet マスターをインストールし、Puppet エージェントを実行できるプロキシ システムを作成します。 さらに、iControl gem や Faraday gem を含むすべての依存関係をプロキシ ホスト (Puppet エージェント) 上の Puppet Ruby 環境にインストールする必要があります。 展開は図 2 に示されています。

F5 と Puppet の共同ソリューションの展開。
図2: F5 と Puppet の共同ソリューションの展開。
device.conf ファイルを作成する

F5 モジュールを使用する前に、Puppet プロキシの Puppet 構成ディレクトリ ( /etc/puppetまたは/etc/puppetlabs/puppet ) にdevice.confファイルを作成する必要があります。

[bigip1]
f5 と入力
URL https://admin:admin@10.192.74.111

上記の例では、 管理者:admin@10.192.74.111 F5 デバイスの Puppet ログインを参照します: <ユーザー名>:<パスワード>@<BIGIP の IP アドレス>。

Puppet マスターでノードを分類する

次に、site.pp、<devicecertname>.pp ノード マニフェスト、またはいくつかの profiles::<profile_name> マニフェスト ファイル内の関連するクラス ステートメントまたはノード宣言に構成を入力します。 以下は、BIG-IP プラットフォーム上で HTTP アプリケーションを構成するためのサンプル Puppet マニフェスト ファイル (site.pp) です。

node bigip1 {
f5_node { '/Common/web_server_1':
確認 => '存在',
アドレス => '10.1.20.11',
説明 => 'Web サーバー ノード 1',
可用性要件 => 'すべて',
ヘルス モニター => ['/Common/icmp'],
}->

f5_node { '/Common/web_server_2':
確認 => '存在',
アドレス => '10.1.20.12',
説明 => 'Web サーバー ノード 2',
可用性要件 => 'すべて',
ヘルス モニター => ['/Common/icmp'],
}->

f5_node { '/Common/web_server_3':
確認 => '存在',
アドレス => '10.1.20.13'、
説明 => 'Web サーバー ノード 3'、
可用性要件 => 'すべて'、
ヘルス モニター => ['/Common/icmp']、
}->

f5_pool { '/Common/web_pool':
確認 => '存在'、
メンバー => [
{ 名前 => '/Common/web_server_1'、ポート => '80'、}、
{ 名前 => '/Common/web_server_2'、ポート => '80'、}、
{ 名前 => '/Common/web_server_3'、ポート => '80'、}、
]、
可用性要件 => 'すべて'、
ヘルス モニター => ['/Common/http_head_f5']、
}->

f5_virtualserver { '/Common/http_vs':
確認 => 'present'、
プロバイダー => 'standard'、
default_pool => '/Common/web_pool'、
宛先アドレス => '10.1.10.240'、
宛先マスク => '255.255.255.255'、
http_profile => '/Common/http'、
サービスポート => '80'、
プロトコル => 'tcp'、
ソース => '0.0.0.0/0'、
ソースアドレス変換 => 'automap'
}

}

この例では、次の 3 つのタスクについて説明します。

  1. まず、Web サーバーを確立する必要があります。 「f5_node」と呼ばれる F5 モジュールは、 web_server_1web_server_2web_server_3の 3 つの Web サーバーを追加します。各サーバーには、可能な限り最小限のパラメーターと、各サーバーに直接 ping を実行して応答性を確認するヘルス モニターが備わっています。
  2. 次に、サーバーのプールを確立します。 「f5_pool」モジュールは、 web_poolという名前のプールを作成し、上記で作成したノード メンバーをプール メンバーとして追加します。
  3. 「f5_virtualserver」モジュールは、 httpプロファイルと上記で作成したweb_pool を使用して仮想サーバーhttp-vsを作成します。
パペットデバイスを実行

puppet device (Puppet Network Device コマンド) を実行する前は、BIG-IP デバイスに仮想サーバー、プール、またはノードは構成されていません。 puppet device -v --user=rootコマンドを実行すると、デバイス プロキシ ノードによって証明書が生成され、F5 デバイスに分類が適用されます。

以下に示すように、すべてのタスクは失敗することなく正常に完了しました。

$ sudo puppet device -v --user=root –trace
情報: https://10.192.74.111:443 の bigip1 に構成を適用し始めています
情報: pluginfacts を取得しています
情報: プラグインを取得しています
情報: bigip1 のキャッシュ カタログ
情報: 構成バージョン '1498175426' を適用しています
通知: /Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_1]/ensure: 作成済み
通知: /Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_2]/ensure: 作成済み
通知: /Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_3]/ensure: 作成済み
通知: /Stage[main]/Main/Node[bigip1]/F5_pool[/Common/web_pool]/ensure: 作成済み
通知: /Stage[main]/Main/Node[bigip1]/F5_virtualserver[/Common/http_vs]/ensure: 作成済み
情報: ノード[bigip1]: ノード[bigip1]のすべてのイベントのスケジュールを解除しています
注意: 0.50 秒でカタログを適用しました

Puppet によって、完全に構成された新しい仮想サーバーが作成されました (図 3)。 このサーバーは、新しく作成されたプール全体で HTTP アプリケーションの負荷を分散しています (図 4)。 プールには、新しく作成された 3 つの Web サーバーが含まれます (図 5)。

Puppet によって作成された仮想サーバー (“http_vs”)。
図3: Puppet によって作成された仮想サーバー (“http_vs”)。
Puppet によって作成された BIG-IP プール。
図4: Puppet によって作成された BIG-IP プール。
Puppet によって作成された Web サーバー。
図5: Puppet によって作成された BIG-IP プール。

すべての Puppet F5 モジュールはべき等性があり、つまり、ノード状態が設定された状態または目的の状態と一致しない場合にのみタスクが実行されます。 つまり、同じマニフェストが再度実行された場合、Puppet はこれらのオブジェクトを再構成しません。

情報: https://10.192.74.111:443 の bigip1 に構成を適用し始めています
情報: pluginfacts を取得しています
情報: プラグインを取得しています
情報: bigip1 のキャッシュ カタログ
情報: 構成バージョン「1498522983」を適用しています
注意: 1.51 秒でカタログを適用しました

結論

自動化は DevOps と CI/CD の重要なコンポーネントであり、多くの場合、構成管理から始まります。 F5 と Puppet の共同ソリューションにより、運用チームはアプリケーション インフラストラクチャ スタック全体の構成を展開、自動化、管理できるようになります。 これにより、アプリケーション開発者はインフラストラクチャ リソースを柔軟にスケールアップおよびスケールダウンし、アプリケーション テストを自動化し、アプリケーション開発の期間を短縮できるようになります。 その結果、組織はこれまでにないレベルの俊敏性と拡張性を実現できます。

F5とPuppetの共同ソリューションがビジネスにどのように役立つかについて詳しくは、 forge.puppet.com/f5/f5をご覧ください。

2017 年 10 月 5 日公開
  • Facebookでシェア
  • Xに共有
  • LinkedInにシェア
  • メールで共有
  • AddThisで共有

F5とつながる

F5 Labs

最新のアプリケーション脅威インテリジェンス。

DevCentral

ディスカッション フォーラムと専門家による記事のための F5 コミュニティ。

F5 ニュースルーム

ニュース、F5 ブログなど。