連載
» 2014年10月08日 18時00分 公開

新人インフラ技術者のためのサーバー構築/運用自動化入門(3):Puppetのインストールと動作確認、トラブル対処法 (3/4)

[菅原亮, 岡本隆史,NTT OSSセンタ]

Puppet設定(master側)

 最初にPuppetの設定ファイル(/etc/puppet/puppet.conf)を修正します。このファイルはセクションによって設定を分けています。セクションは“[main]”のようにセクション名を角括弧でくくります。セクションは以下のものがあります。

  • main
    全ての動作で共通の設定
  • master
    master動作固有の設定。mainセクションでの設定より優先される
  • agent
    agent動作固有の設定。mainセクションでの設定より優先される
  • user
    apply動作(スタンドアロン型での動作)固有の設定。mainセクションでの設定より優先される

 ここではmainセクションに以下の設定を追加します。

show_diff = true

 この設定により、変更の適用時にファイルの差分を表示するようになります。

 次に、自動署名の設定をします。Puppet masterはagentからの接続が正規のホストであることを認証しています。agentからの初回接続時にmasterが署名することでagentは接続を認められますが、この署名はpuppet cert signというコマンドを実行する必要があります。本連載ではこの署名を自動的に処理する設定をします。自動署名の設定ファイル(/etc/puppet/autosign.conf)を新規に作成し、以下の内容を記述します。

*

 この記述で全てのホストは自動的に署名されるようになります。もし特定のドメインや特定のホストだけ自動署名にしたい場合は、以下のような設定ファイル(/etc/puppet/autosign.conf)を新規に作成し、ドメイン名やホスト名を記述します。「*」によるワイルドカード指定が可能です。

rebuilt.example.com
*.scratch.example.com
*.local

 ここまで設定ができたらmasterを起動しましょう。以下のコマンドラインで起動します。

# service puppetmaster start
 
Starting puppetmaster:                                        [  OK  ]

Puppet設定(agent側)

 master側と同様にPuppetの設定ファイル(/etc/puppet/puppet.conf)を修正します。ここではagentセクションに以下の行を追加してください。

server = [Puppet masterのホスト名]

 この設定はPuppet masterのホスト名を設定するものです。

 なお、Red Hat系OSではsysconfigのpuppetファイル(/etc/sysconfig/puppet)でサービス起動時のパラメーターを設定できますが、この後の接続テストの例など直接Puppetコマンドを直接実行する場合、このファイルでの設定は無視されてしまうため、本連載では推奨しません。

 設定ができたらmasterに接続テストしてみましょう。以下のコマンドラインのように実行します。

# puppet agent -t --verbose
 
Info: Creating a new SSL key for agent
Info: Caching certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for agent
Info: Certificate Request fingerprint (SHA256): xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
Info: Caching certificate for agent
Info: Caching certificate_revocation_list for ca
Info: Caching certificate for ca
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent
Info: Applying configuration version '1407388475'
Info: Creating state file /var/lib/puppet/state/state.yaml
Notice: Finished catalog run in 0.03 seconds
※実行例のfingerprintは架空です

 もし、ここで「getaddrinfo: Name or service not known」というエラーが出た場合は、Puppetの設定ファイル(/etc/puppet/puppet.conf)でPuppet masterのホスト名が正しく設定されているか、またhostsファイル(/etc/hosts)にPuppet masterのホスト名が正しく定義されているか確認してください。

 また「SSLv3 read server certificate B: certificate verify failed: [CRL is not yet valid for /CN=builder]」というエラーが出た場合はdateコマンドでmaster、agent双方の時間を確認してください。

 masterとagentの時刻ずれは、おおむね1分以内であることとされています。masterとagentの時刻ずれが9時間の場合は、VirtualBoxのシステムの設定で[ハードウェアクロックをUTCにする]のチェックが外れているか確認してください(詳細は前回記事を参照してください)。

 では次に、master側で正しく認証されたか確認しましょう。master側で以下のコマンドラインのように実行します。

# puppet cert list --all
+ "agent"   (SHA256) xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:
+ "builder" (SHA256) xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:

 この例はmasterのホスト名が“builder”、agentのホスト名が“agent”で実行しています。“agent”の前に“+”が付いているか確認してください。もし付いていないのであれば、接続テストは以下のようになっていたことでしょう。

# puppet agent -t --verbose
 
Info: Creating a new SSL key for agent
Info: Caching certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for agent
Info: Certificate Request fingerprint (SHA256): xx:xx:xx:xx:xx:xx:xx:xx:xx
Info: Caching certificate for ca
Exiting; no certificate found and waitforcert is disabled

 先ほど説明しましたように、Puppet masterはagentからの接続が正規のホストであることを認証しています。“+”が付いていない状態はagentの証明書に署名されていない状態ですので、自動署名の設定ファイル(/etc/puppet/autosign.conf)が正しく設定されているか確認してください。修正後は念のためpuppetmasterサービスを再起動してください。

 ただし、一度署名待ちになってしまったagentは署名するまで接続できませんので、以下のコマンドラインで署名してしまいましょう。署名するコマンドは先ほど紹介しましたがpuppet cert signでしたね。

# puppet cert sign --all
 
Notice: Signed certificate request for agent
Notice: Removing file Puppet::SSL::CertificateRequest agent at '/var/lib/puppet/ssl/ca/requests/agent.pem'

 今度は“+”が付いています。agentは署名され接続可能になりました。もう一度agentからmasterに接続テストしてみましょう。

# puppet agent -t --verbose
 
Info: Caching certificate for agent
Info: Caching certificate_revocation_list for ca
Info: Caching certificate for agent
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent
Info: Applying configuration version '1407395560'
Notice: Finished catalog run in 0.03 seconds

 今度は「Exiting; no certificate found and waitforcert is disabled」ではなく「Notice: Finished catalog run in 0.03 seconds」になりました。無事接続できるようになりました。なおagentについては、以降サービスで起動せずにコマンドラインを使って動作テストしますので、今回は起動しないようにしてください。

Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。