こんにちは。インフラの深淵を覗き込み、数多のシステム障害を鎮めてきたSREの視点から、今日はPuppet運用の「最大の鬼門」についてお話しします。
Puppetを触り始めたエンジニアが、運用フェーズで必ず一度は絶望する瞬間――それが「SSL証明書の期限切れ・破損」による通信遮断です。
`SSL_connect returned=1 errno=0 state=error: certificate verify failed`
このエラーログを初めて見たとき、多くの人は「Puppetが壊れた!」と慌てて再インストールを試みます。しかし、それは遠回りです。Puppetの心臓部は証明書による信頼関係(PKI)にあります。この仕組みさえ理解すれば、どんなトラブルも数分で解決できます。
今日は、現場で戦うための「完全リカバリー手順」を伝授しましょう。
—
1. なぜ証明書エラーが起きるのか?
Puppetはマスター(Puppet Server)とエージェント間で、互いの身分を証明するためにSSL証明書を交換します。
- 有効期限切れ: 自動更新設定のミスや、証明書の有効期間(デフォルト5年)を過ぎた場合。
- 破損: ファイルシステムの不整合や、誤操作による鍵の削除。
- 信頼関係の崩壊: マスター側のCA(認証局)とエージェント側の鍵ペアが不一致になった場合。
これらは「信頼の破綻」を意味します。再起動しても直りません。「一度すべてを捨てて、新しい信頼を構築する」のが、最も確実で速い解決策です。
—
2. 現場で震えるほど役立つ!完全リカバリー手順
以下の手順は、障害が発生したエージェントノード上で実行してください。
ステップ1:汚染されたキャッシュを完全消去する
古い証明書や破損した鍵が残っていると、Puppetは新しいリクエストを投げません。まずはクリーンアップです。
Puppetサービスを停止
systemctl stop puppet
SSLディレクトリを特定して削除(環境によりパスが異なる場合があります)
通常は /etc/puppetlabs/puppet/ssl です
rm -rf /etc/puppetlabs/puppet/ssl/
ステップ2:マスター側で古い署名を失効・削除する
マスター側(Puppet Server)は、「以前この名前のノードを認証した」という記憶を持っています。これが残っていると、新しい証明書申請が拒否されます。
マスター側のコンソールで実行:
古いノードの証明書をリストアップ
puppetserver ca list –all
エージェントノードの証明書を失効・削除
puppetserver ca clean –certname <エージェントのホスト名>
ステップ3:新しい信頼を再構築する
エージェント側に戻り、再署名申請を行います。
手動でカタログ取得を試行(これだけで証明書リクエストが飛びます)
puppet agent -t
このとき、`Exiting; no certificate found and waitforcert is disabled` と表示されれば成功です。エージェントは「私は誰にも認められていないので、署名ください」とマスターに泣きついています。
ステップ4:マスター側で署名を許可する
マスター側のコンソールで実行:
申請が届いているか確認
puppetserver ca list
署名を実行(信頼の付与)
puppetserver ca sign –certname <エージェントのホスト名>
ステップ5:最終確認
エージェント側で再度実行し、カタログが正常に適用されることを確認します。
エージェント側で実行
puppet agent -t
`Applied catalog in X.XX seconds` という表示が出れば、無事インフラの平和が戻りました。
—
3. 初心者の方へ:Puppetの「本質」を忘れないで
Puppetを単なる「設定ツール」だと思っていませんか?
Puppetの本質は「宣言的状態の維持」です。
- 冪等性(べきとうせい): 何度実行しても同じ結果になること。
- 信頼の連鎖: 証明書は、その信頼を担保するパスポートです。
最初は難しく感じるかもしれませんが、この「証明書管理」さえマスターすれば、あなたはもうただのツール使用者ではなく、「インフラの整合性を守るエンジニア」の入り口に立っています。
最後に
運用で一番怖いのは「エラー」ではなく「なぜエラーになったか分からないこと」です。
今回紹介した手順をメモ帳の片隅に置いておくだけで、深夜の緊急呼び出しに怯える必要はなくなります。
何かあったら、まずは `ssl` ディレクトリを見つめ直してください。そこには、インフラという複雑なシステムの「信頼の履歴」が眠っています。
次は、この証明書を自動更新する `autosign` や `Puppet Bolt` を使った効率化の世界でお会いしましょう。インフラ構築を楽しんでください!