公司在kubernetes集群上穩定運行數月的kibana服務於昨天下午突然無法正常提供服務,訪問kibana地址后提示如下信息:
排查過程:
看到提示后,第一反應肯定是檢查elasticsearch集群,碰巧昨天下午公司VPN奇慢,頻繁連接不上亦庄機房,因此問題排查一度集中在elasticsearch服務上,另一方面也是因為kibana服務由docker鏡像提供,只讀服務本身是沒有狀態變化的,在kubernetes集群中查看pod狀態,也沒有崩潰重啟的記錄,因此只能懷疑是連接的elasticsearch數據源無法訪問。
在公司VPN逐漸正常后,確認目標elasticsearch集群狀態也一直正常,問題排查稍微有些停頓。kibana服務本身及數據源elasticsearch集群都正常,那么問題只能出在kibana服務的運行環境,即docker或kubernetes集群之上,由於提示信息是請求超時,因此問題進一步定位到kubernetes及docker的網絡狀態。
進入容器內部訪問elasticsearch集群,不出意外,無法ping通,看來確實是由於網絡問題引起的kibana服務無法正常訪問elasticsearch集群。
進一步測試得知,所有容器內部都無法訪問外部地址,但是docker寄宿的虛擬機是可以訪問外部地址的,因此最終定位問題在docker的虛擬網橋docker0工作不正常導致。
問題解決:
問題定位后,仍然不確定為何會產生這個問題,kubernetes集群的docker節點采用docker 1.12.1版本:
問題原因未知,僅定位了問題,解決問題只有采用笨辦法:重新啟動kubernetes集群節點機上的docker服務及kubelet服務。
在重啟后,kubernetes自動重新調度kibana服務至節點機,進入pod內部后,訪問外部網絡恢復正常,在瀏覽器訪問kubernetes提供的kibana服務,恢復正常,問題解決。但問題產生的原因依然未知:docker0網橋中止包轉發,導致docker0掛接的所有容器網絡異常。如有高人知道請不吝指出,謝謝。