Kubernetes 網路改進的三項實踐分享_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和記憶體都是極大的消耗,尤其在大規模情況下對效能的影響十分明顯。
劉夢馨介紹指出,Kubernetes升級到1.8或1.9版本以後,安裝時可以選擇IPVS模式,它是對Iptables的替換,在IPVS模式下新增規則是增量式的,不會強制進行全量更新,也不會進行序列的匹配,會通過一定的規則進行雜湊map對映,很快地對映到對應的規則,不會出現大規模情況下效能線性下降的狀況。目前,IPVS在Kubernetes社群仍處於試用階段,劉夢馨表示,靈雀雲已經開始試用IPVS功能,從使用情況來看,效能十分穩定,預計很快會將方案推廣給使用者。
自研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就可以實現比較複雜的規則。
靈雀雲是一家專注容器服務和企業級PaaS的服務商,始終保持著對技術的敏銳和前瞻性理解,在容器領域,靈雀雲是國內最早將Kubernetes產品化的專業服務商,推出了基於Kubernetes的產品Alauda EE,打造客戶容器環境核心系統以及在DevOps和微服務方面的最佳實踐。未來,靈雀雲將依託強大的產品和服務能力,為傳統企業數字化轉型保駕護航。