【獨家】K8S漏洞報告 | 近期bug fix解讀

安全漏洞CVE-2019-3874分析

Kubernetes近期重要bug fix分析

Kubernetes v1.13.5 bug fix數據分析

——本週更新內容 

安全漏洞CVE-2019-3874分析

3月21日,Kubernetes社區通過Google Group頻道Kubernetes developer/contributor discussion發佈了安全漏洞CVE-2019-3874以及解決方法。

這個安全漏洞最早由紅帽的工程師Matteo Croce,Natale Vinto和Andrea Spagnolo發現。當Kubernetes中的Pod以Root用戶運行時,它可以繞過cgroup內存隔離,通過SCTP網絡傳輸,創建一個潛在的DoS攻擊,此問題本身與Kubernetes無關,但是涉及到Kubernetes調用的內核模塊。問題的嚴重性被定義爲中等,社區建議將SCTP內核模塊列入黑名單來規避此問題。用戶可以通過執行如下命令來測試是否會到此類攻擊。

modprobe sctp; lsmod | grep sctp

用戶可以通過執行如下命令來把SCTP列入內核模塊的黑名單。

echo "install sctp /bin/true" > /etc/modprobe.d/sctp.conf

如果SCTP模塊已經載入內核,則需要重啓機器來從內核中卸載SCTP模塊。CVE-2019-3874安全漏洞的內核補丁正在開發中,但是通過將SCTP內核模塊列入黑名單可以保護用戶永久免受此類攻擊。

CVE-2019-3874鏈接:

https://access.redhat.com/security/cve/cve-2019-3874

Kubernetes近期重要bug fix分析

•#74672移除

導致內存泄漏的Reflector Metrics

https://github.com/kubernetes/kubernetes/pull/74672

該問題的背景是#73587這個Issue。用戶在升級到v1.12.5之後,發現集羣內節點上Kubelet在運行一段時間後吃掉了所有的內存,導致節點故障。使用go tool pprof發現Client Go Metrics耗費了大部分的計算時間。這些Reflector Metrics並不是必不可少,該PR移除了如下的Metrics來解決內存泄漏的問題:

  • reflector_items_per_list

  • reflector_items_per_watch

  • reflector_last_resource_version

  • reflector_list_duration_seconds

  • reflector_lists_total

  • reflector_short_watches_total

  • reflector_watch_duration_seconds

  • reflector_watches_total

•#74865獲取不到

包含有InitContainers的Pod的Metrics

https://github.com/kubernetes/kubernetes/pull/74865

該問題的初始現象是Metrics Server獲取不到包含有InitContainers的Pod的Metrics。

根本原因在於退出的容器(如InitContainers)CPU和Memory都爲Nil導致Metrics服務器將跳過Pod的處理。具體是removeTerminatedContainer的實現忽略了cri提供的runtimeapi.Container和cadvisor提供的cadvisorapiv2.ContainerInfo的不同。

此問題的解決方法是在原有上報Nil的情況下,修改爲上報退出容器的CPU和Memory爲0。

•#75366延遲CSI Client初始化

以解決CSI Volume Plugin在Kubelet重啓後

不可用的問題

https://github.com/kubernetes/kubernetes/pull/75366

該問題的背景是#72500這個Issue。在Kubelet重啓後,CSI Volume Plugin可能不會被重新註冊。這些Volume Plugin未註冊會相應地導致這些Plugin關聯的Volume的操作無法進行。解決辦法是在Kubelet重啓後,單獨提取一個csiClientGetter的Get()方法用於當初始化失敗時,能通過延遲CSI Client初始化的方式來重新註冊CSI Volume Plugin。

•#75364區分Volume Path和Mount Path

https://github.com/kubernetes/kubernetes/pull/75364

通常情況下大部分的Volume Plugin會去檢查Mount在Pod的Volume第一層級的目錄,但是對於CSI Plugin卻不是這樣,CSI Plugin可能會Mount在子目錄上。這個PR修改了Kubelet中VolumePath和MountPath引用的邏輯,實現對CSI的優化。

Kubernetes v1.13.5 bug fix數據分析

分類數量和佔比統計如下:

0419_1.jpg

嚴重程度數量統計如下(橫座標5爲最高,0爲最低):

0419_2.jpg

如下爲Kubernetes v1.13.5所有bug fix的彙總信息:

0419_3.jpg

相關服務請訪問:https://support.huaweicloud.com/cce/index.html?utm_content=cce_helpcenter_2019

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章