今天遇到一個很詭異的錯誤,這着實是一個大教訓,與各位一起分享下。
今天某台服務器上的glance服務不能使用了。
使用glanceclient訪問glance的返回結果是:
401 Unauthorized
由於在登陸dashboard需要獲得所有的client的返回信息,因此在登陸面板的時候會發生報錯,並且在點鏡像的時候由於401直接就彈出來了。
———————————————————————————————
Glance-api的錯誤日志是:
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
這條錯誤信息是在當向只提供http的服務發送https請求造成的。
———————————————————————————————————————————
keystone的錯誤日志是:
localhost - - [04/Dec/2012 16:23:01] code 400, message Bad request syntax ('\x16\x03\x01\x00\xcd\x01\x00\x00\xc9\x03\x02P\xbd\xb2\xe5\x04W\xe2\x86Qt\xdc\xdc]r\x88\xd2^O\x1a$O\x1c\x97r@;\x96\xe3\xbc\xcc\xe7\x99\x00\x00V\xc0\x14\xc0')
localhost - - [04/Dec/2012 16:23:01] "??P???W?Qt??]r?^O$Or@;???V??" 400 -
顯然,keystone不能理解glance發過來的https信息。
———————————————————————————————
那天,我剛好正在學習如何給keystone配置ssl,glance要和配置了ssl的keystone交互的話,需要將auth_protocol設置為https。
1.當時我檢查了keystone中的 ssl section和template中glance的endpoint,均為http。
2.然后我檢查了glance的5個配置文件中的authtoken section,沒有看到https的選項。
3.后來我又懷疑是端口,進程的問題,均沒有解決。
后來同事幫忙來調試keystone,我們發現了在keystone的authtoken middleware源碼中發現關於authtoken每個選項的默認參數:
cfg.StrOpt('auth_protocol', default='https'),
然后我們發現glance-register-paste.ini中auth_protocol這一選項不見了,於是glance-api啟動后就以將請求發送給了https://127.0.0.1:35357,也就造成了前面的哪個錯誤。