KEMPエンジニアブログでは、
弊社エンジニアから業界の最新技術情報やロードバランサー製品に関するさまざまなノウハウなどをお届けします。

2021年2月15日月曜日

Ansibleで行うKemp LoadMasterの設定自動化


 

今回はAnsibleで行うKemp LoadMaster設定方法の一部を紹介します。

具体的にはVSの負荷分散設定の追加を行います。

※環境設定に関する説明は含みません



1. Ansibleによる設定の自動化

ADCなどのNW機器を正確に運用するための作業として、作業手順書の作成、それに従った作業の実施という流れがあります。これには多くの時間とエンジニアリングリソースを消費することになります。また、こういった作業では人為的な操作ミスや手順書記載漏れなどの問題が伴うため、サービスの可用性といった面では大きな弊害となります。

そこでAnsibleという構成管理ツールの利用が広まっています。

Ansibleで設定の自動化を行うことは上記の問題を解決するだけでなく、不足するエンジニアリソースを幅広い業務に振り分けることも可能になり、運用管理コストを軽減することにもなります。


2. Ansibleの導入ポイント

Ansibleでは、作業手順書の代わりに構成機器の設定を定義するPlaybookというファイルを記述することになります。このファイルはyaml形式で書かれるため可読性が高く記述や修正が容易であるため、運用とメンテナンスにおいて多くのメリットをもたらします。

KempのサイトではAnsibleで使用されるAnsible module およびPlaybookが提供されています。これをAnsibleコントロールノードに配置し、適宜編集することにより、Ansibleでの運用を可能にします。

Kemp LoadMasterの設定では、Ansibleを使って以下の構成を自動化できます。


・VSの作成、RSの登録

・HTTPヘッダ修正(挿入, 削除)ルールの追加、適用

・URLマッチングルールの追加、適用

・サーバ証明書などのアップロード

・外部認証サーバとの連携

など


3. AnsibleによるLoadMasterの設定

今回はAnsibleを用いてLoadMaster上にバーチャルサービス(VS)を作成し、10台のリアルサーバ(RS)で負荷分散を行う設定をします。設定にあたって、システムを構成する機器とネットワーク環境を以下のように定義します。

Ansibleコントロールノード: PlaybookをもとにPythonを実行しKemp 360 Centralへ命令を行う
Kemp 360 Central: 複数台のLoadMasterを一元管理し、認証情報などの管理を効率化する
VLM-MAX(仮想LoadMaster): 10台のRSに対して効果的な負荷分散を行う


※Kemp 360 Centralのデプロイ方法に関してはご連絡いただければ別途ご紹介いたします。
以下でも紹介しております。
https://support.kemptechnologies.com/hc/en-us/articles/360005562311-KEMP-360-Central
※本ブログではコントロールノード上でのPython, Ansibleなど事前環境が準備されていることを前提とさせていただきます。

4 設定手順
■ 必要なファイルをダウンロード
以下からダウンロード可能なKemp社提供のAnsibleモジュール及びPlaybook等をダウンロードします。
 https://kemptechnologies.com/kemp360/ansible-module/
※KempIDを事前に取得いただく必要がございます。

■ 設定ファイルを配置
Zipファイル解凍後に得られる以下のディレクトリをAnsibleコントロールノード任意の場所に配置します。
・ansiblepoc-master

■ ansible.cnfの書換え
Ansibleコントロールノード作業ディレクトリにansible.cnfを配置した後、以下を追記しモジュールなどの配置場所を認識させます。(あるいは/etc/ansible配下にあるansible.cnfを編集)

library = /”上記で指定したディレクトリ”/ansiblepoc-master/kemp_ansible/library
module_utils = /”上記で指定したディレクトリ”/ansiblepoc-master/kemp_ansible/module_utils

■ 管理パスワードの設定
Kemp 360 Centralのapi keyを入手します。このapi keyはKemp 360 CentralのRest APIを使用するうえでのパスワードのような役割を果たします。
以下Passwordの箇所にKemp360 Centralの管理ユーザパスワードを入れた以下コマンドを任意のサーバなどから実行するとapi keyが出力されます。このapi keyを控えます。

curl -k -X POST -d '{"username":"admin","password":"Password"}' https://Kemp360Centralの管理IPアドレス/api/v1/user/authenticate/

なお、今回は1台のADCに設定を加えますが、設定を行うADCが増えるにつれて把握すべきログイン用情報も増えることになります。そこで、これら情報も一元管理しているCentralを介して設定変更することによりこれを解消することができます。Centralのapi keyを取得する必要があるのはそのためであり、以降でPlaybook内に明記されます。






■ Playbookの修正
Playbookはansiblepoc-masterの下にあるexampleディレクトリにありこちらから編集可能ですが便宜上、以下の内容をPlaybookに記載します。こちらもAnsibleコントロールノードexampleディレクトリに配置します。

なお繰り返しになりますが、LMに10.2.2.13:443のVSを作成しバックエンドのRSには10台のRS 10.2.2.21~10.2.2.30:80を指定する設定となります。

※Ansible Playbookの構文自体に関しては以下などを参照願います。
https://docs.ansible.com/ansible/2.9_ja/user_guide/playbooks_intro.html#playbooks-intro

====================================================================================================
- name: Create a small configuration for LoadMaster
  hosts: localhost #Playbook上の作業対象はローカル(Ansibleコントロールノード)

  vars:
    central_address: ' ' #Kemp360centralの管理IPを指定します
    central_username: 'admin'
    central_api_key: ' ' #先ほど取得したapikeyを指定します
    lm_address: ' ' #作業対象LMの管理IPアドレスを指定します、X.X.X.X:443のようにポート番号も同時に指定します
    ip: ' ' #作成したいVSのIPアドレスを指定します
    port: 443  #作成したいVSのポート番号を指定します
    prot: 'tcp' #上記がtcpかudpかを指定します
    rs_ipstart: '10.2.2.' #今回は各RSのIPアドレスが21~30のように連続するため共通な3オクテット目までを指定します
    rs_port: '80' #RSのポート番号を指定します

  tasks:
    - name: Create Virtual Service Pathos on LM
      virtual_service:
        central_address: '{{ central_address }}'
        central_username: '{{ central_username }}'
        central_api_key: '{{ central_api_key }}'
        lm_address: '{{ lm_address }}'
        enable: 'Y'
        nickname: 'Pathos'
        ip: '{{ ip }}'
        port: '{{ port }}'
        protocol: '{{ prot }}'
        vs_type: 'http'
        ssl_acceleration: 1
        check_type: 'icmp'
        qos: 'Maximize-Reliability'
        transparent: 1
    - name: Create 10 real servers in sequence
      real_server:
        central_address: '{{ central_address }}'
        username: '{{ central_username  }}'
        lm_address: '{{ lm_address }}'
        api_key: '{{ central_api_key }}'
        vs_ip: '{{ ip }}'
        vs_port: '{{ port }}'
        vs_prot: '{{ prot }}'
        rs_ip: '{{ rs_ipstart }}{{ item }}'
        rs_port: '{{ rs_port }}'
      with_sequence: start=21 end=30 format='%d' #
====================================================================================================


■ ansible-playbookの実行
実行前のLoadMasterにはVSの設定はありません


Ansibleコントロールノード作業ディレクトリからansible-playbookを(今回作ったPlaybookを指定して)実行します。


成功したようですが、念のため実行後のVSの設定状態をLMのWUIから確認します


WUIからも設定変更が確認できました。

このようにAnsibleの活用は作業ミスによるリスク排除や作業時間の軽減に大きな効果があります。LoadMasterの保守やメンテナンスを実施する上でも充分な効果が期待できます。
次回以降の記事ではAnsibleでのサーバ証明書のインポート方法紹介も予定しています。

Kemp製品に関するお問いあわせに関しては、以下メールアドレスまでご連絡いただければ幸いです。

メールアドレス: kempmarket@fxc.jp