演習 1.4 - メンバーをプールへ追加

Read this in other languages: uk English, japan 日本語.

目次

目的

本演習では、BIG-IP pool member module を使って、演習 1.3 で作成したプール http_pool にWebサーバーを追加します。

解説

Step 1:

テキストエディタを使って、bigip-pool-members.yml というファイルを新規作成します。

[student1@ansible ~]$ nano bigip-pool-members.yml

vimnano はコントロールノード上で利用可能です。RDP経由でのVisual Studio と Atom も同様です。

Step 2:

bigip-pool-members.yml へ、以下のプレイブック定義を記述します :

---
- name: BIG-IP SETUP
  hosts: lb
  connection: local
  gather_facts: false

まだエディタを閉じないでください。

Step 3

次に、タスクを追加します。このタスクは、bigip_pool_member モジュールを使用して、BIG-IP上に、2つの RHEL (Webサーバー)をプールメンバーとして設定します。

  tasks:
    - name: ADD POOL MEMBERS
      f5networks.f5_modules.bigip_pool_member:
        provider:
          server: "{{private_ip}}"
          user: "{{ansible_user}}"
          password: "{{ansible_password}}"
          server_port: 8443
          validate_certs: false
        state: "present"
        name: "{{hostvars[item].inventory_hostname}}"
        host: "{{hostvars[item].ansible_host}}"
        port: "80"
        pool: "http_pool"
      loop: "{{ groups['web'] }}"

ファイルを保存して、エディタを終了してください。

Step 4

プレイブックの実行 - コントロールホストのコマンドラインで以下を実行します。

[student1@ansible ~]$ ansible-playbook bigip-pool-members.yml

Playbook の出力

出力は以下のようになります。

[student1@ansible ~]$ ansible-playbook bigip-pool-members.yml

PLAY [BIG-IP SETUP] ************************************************************

TASK [ADD POOL MEMBERS] ********************************************************
changed: [f5] => (item=node1)
changed: [f5] => (item=node2)

PLAY RECAP *********************************************************************
f5                         : ok=1    changed=1    unreachable=0    failed=0

出力のパース

bigip_device_facts モジュールを使って、BIG-IPに設定されたプールメンバー情報を確認してみましょう。 JSON query は強力なフィルタリングツールです。演習を進める前に確認してみましょう。

[student1@ansible ~]$ nano display-pool-members.yml

以下を記述します:

---
- name: "List pool members"
  hosts: lb
  gather_facts: false
  connection: local

  tasks:
    - name: Query BIG-IP facts
      f5networks.f5_modules.bigip_device_info:
        provider:
          server: "{{private_ip}}"
          user: "{{ansible_user}}"
          password: "{{ansible_password}}"
          server_port: 8443
          validate_certs: false
        gather_subset:
          - ltm-pools
      register: bigip_device_facts

    - name: "View complete output"
      debug: "msg={{bigip_device_facts}}"

    - name: "Show members belonging to pool"
      debug: "msg={{item}}"
      loop: "{{bigip_device_facts.ltm_pools | json_query(query_string)}}"
      vars:
        query_string: "[?name=='http_pool'].members[*].name[]"

プレイブックの実行

[student1@ansible ~]$ ansible-playbook display-pool-members.yml

出力

[student1@ansible ~]$ ansible-playbook display-pool-members.yml

PLAY [List pool members] ******************************************************

TASK [Query BIG-IP facts] *****************************************************
changed: [f5]

TASK [View complete output] ***************************************************
ok: [f5] =>
  msg:
    changed: true
    ltm_pools:
    - allow_nat: 'yes'
      allow_snat: 'yes'
      client_ip_tos: pass-through
      client_link_qos: pass-through
      full_path: /Common/http_pool
      ignore_persisted_weight: 'no'
      lb_method: round-robin
      members:
      - address: 54.191.xx.xx
        connection_limit: 0
        dynamic_ratio: 1
        ephemeral: 'no'
        fqdn_autopopulate: 'no'
        full_path: /Common/node1:80
        inherit_profile: 'yes'
        logging: 'no'
        monitors: []
        name: node1:80
        partition: Common
        priority_group: 0
        rate_limit: 'no'
        ratio: 1
        state: disabled
      - address: 54.200.xx.xx
        connection_limit: 0
        dynamic_ratio: 1
        ephemeral: 'no'
        fqdn_autopopulate: 'no'
        full_path: /Common/node2:80
        inherit_profile: 'yes'
        logging: 'no'
        monitors: []
        name: node2:80
        partition: Common
        priority_group: 0
        rate_limit: 'no'
        ratio: 1
        state: disabled
      minimum_active_members: 0
      minimum_up_members: 0
      minimum_up_members_action: failover
      minimum_up_members_checking: 'no'
      monitors:
      - /Common/http
      name: http_pool
      priority_group_activation: 0
      queue_depth_limit: 0
      queue_on_connection_limit: 'no'
      queue_time_limit: 0
      reselect_tries: 0
      server_ip_tos: pass-through
      server_link_qos: pass-through
      service_down_action: none
      slow_ramp_time: 10

TASK [Show members belonging to pool] *****************************************
ok: [f5] => (item=node1:80) =>
  msg: node1:80
ok: [f5] => (item=node2:80) =>
  msg: node2:80

PLAY RECAP ********************************************************************
f5                         : ok=3    changed=0    unreachable=0    failed=0

解答

完成形のAnsible Playbook はこちらから参照可能です。 bigip-pool-members.yml.

確認

ブラウザでBIG-IPへログインして設定されたものを確認してみましょう。lab_inventory/hosts ファイルからBIG-IPのIPアドレスを確認して、https://X.X.X.X:8443/ のようにアクセスします。

BIG-IP へのログイン情報:

プールに二つのメンバー(node1とnode2)が含まれていることを確認します。Local Traffic -> Pools とクリックします。そして、http_pool をクリックすることでより詳細な情報を確認します。Members タブをクリックすることで全てのプールメンバーが表示されます。 f5members

これで本演習は終わりです。演習ガイドへ戻る