とてもツマらない障害対応のメモとなります。
が、英語圏には多少の情報はあったけど日本語になかったので、書き留めておきます。
障害内容
ある日、突然、OpenStack Grizzlyの管理画面からインスタンス作成などの操作が全てできなくなりました。既存のインスタンスには特に影響なく稼働していました。
原因
動作的には、認証システムであるKeystoneと、それ以外の全てのコンポーネントとの認証が失敗することが原因となりました。nova list や glance image-list などが Unauthorized 401 になる状態です。
根本的な原因は、Keystone管理のSSL証明書の期限が切れたことによるものでした。
調査内容
初めはトークンデータが溢れて記録できなくなったのかと思いましたが、keystone-manage token-flush を実行しても特に解決できず。どうやらKVSなので勝手に消えていった模様。というか、トークンを定期的に削除しろって話を初めてみました。次に、アカウントデータ元となっているLDAPを疑いましたが特に変わりなく。
OpenStackの設定を何も変更していなく、キャパシティオーバーでもなく、テスト環境とはいえプライベートクラウドとして1年間何事もなく稼働し続けてきて何故今!ということで、ちょうど1年間という期間系にまでマトを拡げてみると・・・ありました!ちょうど当日のファイル更新日になっていたSSL証明書群。
かくして、SSLの証明書を更新することで解決すると、思っていました。
対策
証明書作り直しに失敗
証明書を作り直すコマンドは用意されていたので10年に変更して実行し、色々再起動もしました……が、ダメッ!証明書は作成できるけど、有効にならない…/usr/share/pyshared/keystone/common/openssl.py
1 2 |
< default_days = 365 > default_days = 3650 |
1 2 3 4 5 6 7 8 9 10 11 12 |
# 旧証明書をバックアップ cd /etc/keystone/ cp -Rp ssl _ssl_original_20130529 # 既に証明書があるとkeystone-manageを実行しても動かないので削除(リンク集にも記載) rm -R ssl # 新証明書を作成し、所有者を訂正 keystone-manage --debug pki_setup --keystone-user keystone --keystone-group keystone chown -R keystone:keystone /etc/keystone/ssl # keystone, nova, ... と色々再起動もダメッ |
認証方式をUUIDに変更
とにかく色々やっても新証明書が有効にならなかったので、キレて認証方式PKIを、ひとつ前のFolsomまで標準だったUUIDに変更することで対応しました。/etc/keystone/keystone.conf
1 2 |
[signing] token_format = UUID |
・・・えぇ、逃げですよ、逃げ。
いいんです、所詮、プライベートクラウドの開発用環境なので。
だいたい、有効期限を365日とベタ書きした開発者が悪いんです、俺は、悪くない、悪くない。
調査リンク集
トークン管理とか結局関係なかったけど、せっかく色々調べたのでリンクを置いておきます。トークン管理
Keystone管理
認証の仕組み
同系統な事例の被害者
その他
ということで、タメにならないOpenStackトラブルシューティングでした。
最近のは最初から3650daysになっているみたいですが、一応確認しておいた方がいいかもしれません。
そーいや、Grizzlyを改良して商用利用していたトコとかあったけど、こういう罠もリリース前に見つけて全部対応してるのかと思うと、ホントに感心しちゃいますね。
1年間近く、全然OpenStackを追ってないけど、少しは気軽に利用できるようになったのかなー(遠い目