Kubernetes 網絡改進的三項實踐分享

自研CNI IPAM插件 解決K8s功能問題安全

首先,在功能方面,Kubernetes 網絡模型因爲IP不固定,沒法對IP資源進行精細管控,沒法使用基於IP的監控和基於IP的安全策略,此外,一些IP發現的服務部署十分困難,給運維人員增長了很大的工做難度。例如因爲IP不固定,令不少採用IP固定來作的傳統監控和審計機制所有失效。此外,不少軟件是對MAC地址進行受權,IP地址不固定沒法購買受權,IP固定的需求在必定場景下客觀存在。網絡

爲了解決這一問題,靈雀雲把IP當作重要資源,進行單獨管理。靈雀雲自研的CNI IPAM 插件,實現了IP導入和IP權限管理功能,能夠進行網段的添加和刪除,可在Kubernetes進行網段的精細化配置。例如,給某個業務或者某幾個用戶分配一個網關,先對IP進行網關設置,路由設置以及DNS設置;有了網段以後,進行IP添加或刪除,哪些IP可用均可以由管理員指定,通過權限和配額以後順利建立服務。運維

IPVS解決K8S大流量下性能線性降低問題性能

其次,在性能方面,因爲Kubernetes最先是基於Iptables來作的,Iptables 沒有增量更新功能,更新一條規則須要總體flush,更新時間長,這段時間以內流量會有不一樣程度的影響;Iptables規則串行,沒有預料到Kubernetes這種在一個機器上會有不少規則的狀況,流量須要通過全部規則的匹配,匹配以後再進行轉發,不然對時間、CPN和內存都是極大的消耗,尤爲在大規模狀況下對性能的影響十分明顯。ui

劉夢馨介紹指出,Kubernetes升級到1.8或1.9版本之後,安裝時能夠選擇IPVS模式,它是對Iptables的替換,在IPVS模式下添加規則是增量式的,不會強制進行全量更新,也不會進行串行的匹配,會經過必定的規則進行哈希map映射,很快地映射到對應的規則,不會出現大規模狀況下性能線性降低的情況。目前,IPVS在Kubernetes社區仍處於試用階段,劉夢馨表示,靈雀雲已經開始試用IPVS功能,從使用狀況來看,性能十分穩定,預計很快會將方案推廣給用戶。lua

自研OpenResty Ingress 解決K8S穩定性問題插件

最後,在穩定性方面,Kubernetes網絡缺乏健康檢查功能,NodePort 屏蔽了Pod的直接訪問,上層健康檢查失效,網絡分區、網絡問題致使的轉發異常時有發生。內存

靈雀雲採用自研的OpenResty Ingress,方便新增功能,能夠進行多端口監聽。官方的Nginx Ingress只能監聽80和43端口,但不少客戶要對更多的端口進行監聽,如根據端口區分的服務,靈雀雲對此進行了一些改動,其自研的Ingress支持多端口功能。另外,原始Ingress的轉化功能較少且配置複雜,須要不斷更改Nginx config。對於reload,靈雀雲用OpenResty實現lua的代碼庫,在lua的代碼裏進行流量調度,並設定了特定的DSL流量調度語言,能夠經過簡單的程序代碼實現特定的流量規則,在Ingress流量規則方面進行了豐富擴展。資源

在演講的最後,劉夢馨列舉了一個用簡單程序代碼實現特定流量規則的實例:路由

規則:域名是 www.baidu.com 或者 baidu.com,路徑是 /search, 源 IP 爲 114.114.114.114,header 中 uid 在 100 到 999 或者 10000 到 11000 之間的請求

(AND (IN HOST www.baidu.com baidu.com) (EQ URL /search) (EQ SRC_IP 114.114.114.114) (OR (RANGE HEADER uid 100 999) (RANGE HEADER uid 10000 11000)))

能夠看出,只需簡單的配置域名、路徑、特定範圍內的IP等信息,Dsl就能夠實現比較複雜的規則。

相關文章
相關標籤/搜索